如何仅使用 CSS 制作选项卡? [复制]

2024-01-12

我正在寻找像这样的选项卡系统jQuery 选项卡 http://jqueryui.com/tabs/,用户可以在不同的面板之间切换以查看不同的内容:

但是,我需要在不使用 JavaScript 的情况下完成此操作,以便未启用 JavaScript 的用户可以轻松使用该网站。此外,我想避免导航到不同的静态html页面,每个页面都有不同样式对应的“选项卡”。解决这个问题的好方法是什么?


实现纯 CSS 选项卡的一个简单方法是使用单选按钮!

关键是风格labels附加到相应的按钮。单选按钮本身是隐藏的,有一点绝对定位,位于屏幕一侧。

基本的html结构是:

div#holder
    input[type="radio"]
    div.content-holder
        label
        div.tab-content (all your tab content goes here)
    input[type="radio"]
    ... keep repeating

关键在于选择器。我们将设计样式input[type="radio"]按钮与

input[type="radio"] {
    position: absolute;
    left: -100%;
    top: -100%;
    height: 0;
    display: none;
}

如上所述,这会将它们提升到屏幕一侧。但是我们如何点击它们呢?幸运的是,如果您的目标是label,它可以帮你点击输入!

<label for="radioInputId1">tab title</label>

然后我们设置实际标签的样式(为了简洁起见,我将省略美学样式):

input[type="radio"] + div.content-holder > label {
    display: inline-block;
    float: left;
    height: 35px;
    width: 33%; /* or whatever width you want */
}

现在我们的标签应该看起来像顶部的“选项卡”div#holder。但所有这些内容又如何呢?好吧,我们希望默认情况下将其全部隐藏,因此我们可以使用以下选择器来定位它:

input[type="radio"] + div.content-holder > div.tab-content {
    display: none;
    position: absolute;
    top: 65px;        /* this depends on your label height */
    width: 100%;
}

上面的 CSS 是让它工作所需的最小 CSS。除了display: none;div实际显示。但这在选项卡中没有显示任何内容,所以……现在怎么办?

input[type="radio"]:checked + div.content-holder > div.tab-content {
    display: block;
}

上述工作的原因是因为:checked伪类。自从labels 附加到特定的单选按钮,它们会触发:checked单击时。这会自动关闭所有其他单选按钮。因为我们已经将所有内容封装在一个div.content-holder,我们可以使用下一个同级 CSS 选择器,+,以确保我们仅针对特定选项卡。 (尝试使用~看看会发生什么!)

这是一个fiddle http://jsfiddle.net/Luxelin/xsr96u3m/3/,对于那些不喜欢堆栈片段的人来说,这是一个堆栈片段,对于那些喜欢堆栈片段的人:

#holder {
  border: solid 1px black;
  display: block;
  height: 500px;
  position: relative;
  width: 600px;
}
p {
  margin: 5px 0 0 5px;
}
input[type="radio"] {
  display: none;
  height: 0;
  left: -100%;
  position: absolute;
  top: -100%;
}
input[type="radio"] + div.content-holder > label {
  background-color: #7BE;
  border-radius: 2px;
  color: #333;
  display: inline-block;
  float: left;
  height: 35px;
  margin: 5px 0 0 2px;
  padding: 15px 0 0 0;
  text-align: center;
  width: 33%;
}
input[type="radio"] + div.content-holder > div {
  display: none;
  position: absolute;
  text-align: center;
  top: 65px;
  width: 100%;
}
input[type="radio"]:checked + div.content-holder > div {
  display: block;
}
input[type="radio"]:checked + div.content-holder > label {
  background-color: #B1CF6F;
}
img {
  left: 0;
  margin: 15px auto auto auto;
  position: absolute;
  right: 0;
}
<div id="holder">
  <input type="radio" name="tabs" value="1" id="check1" checked>
  <div class="content-holder">
    <label for="check1">one</label>
    <div class="tab-content">
      <p>All my content for the first tab goes here.</p>
    </div>
  </div>
  <input type="radio" name="tabs" value="2" id="check2">
  <div class="content-holder">
    <label for="check2">two</label>
    <div class="tab-content">
      <h2>You can put whatever you want in your tabs!</h2>
      <p>Any content, anywhere!</p>
      <p>
        Remember, though, they're absolutely positioned.
        This means they position themselves relative to
        their parent, div#holder, which is relatively positioned
      </p>
    </div>
  </div>
  <input type="radio" name="tabs" value="3" id="check3">
  <div class="content-holder">
    <label for="check3">three</label>
    <div class="tab-content">
      <p>
        And maybe I want a picture of a nice cat in my third tab!
      </p>
      <img src="https://i.stack.imgur.com/Bgaea.jpg">
    </div>
  </div>
</div>

我设计的选项卡确实相当基本。如果您希望它们“包裹”到内容中,您可以通过一些额外的 CSS 工作来做到这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何仅使用 CSS 制作选项卡? [复制] 的相关文章

  • 使用 jquery 和 php 测试表单输入是否为 1 或 2 位整数

    我有一个表单 其中有五个字段全部设置为 maxlength 2 基本上 我希望唯一可以输入的值是一位或两位整数 因为在将值存储在数据库中之前对这些字段执行计算 是否有任何 jquery 不允许用户输入不是整数的值 另外 用 jquery 和
  • 在 HTML 中移动选取框/下移文本

    我正在尝试向下移动或移动 HTML 中的文本 但我似乎无法将其移动到任何地方 我添加了一个颜色命令来更改文本的颜色 但似乎只是移动了 它一直到顶部
  • jQuery Blur() 在 Chrome 上不起作用

    我在 MacOSX 上运行这个http jsfiddle net q84wv http jsfiddle net q84wv on Chrome最新版本 它不会工作 在 Firefox 上运行时它工作得很好 有什么线索吗 假设您想要aler
  • 使用 Javascript / Jquery 的本地存储(不使用 HTML5)

    我想在 javascript 或 jquery 中复制本地存储概念 类似于 HTML5 但不幸的是我不知道如何开始 任何人都可以建议如何使用 javascript 或 jquery 实现本地存储 不使用 HTML5 这是一个有点愚蠢的差事
  • 只需编辑 .css 即可更改

    有 4 div class myField 每一个都在另一个之下 http jsfiddle net urielz 6Mdmd http jsfiddle net urielz 6Mdmd 我想将其视图更改为两对情侣面对面 就像结果一样 h
  • ReactJS:从没有 onChange 事件的 props 中选择默认值?

    所以 我只是想知道我是否绝对需要在 React 中的选择组件上有一个 onChange 事件处理程序 我有一个道具传递我想要选择的选项的默认值 如果我有的话 它就没有问题
  • Chrome Javascript 调试器暂停时不会重新加载页面

    有时 当我在 Chrome 中调试某些 javascript 并且暂停了 javascript 时 如果我尝试重新加载页面 chrome 只会 继续 调试器 单步执行到下一个断点 似乎没有任何方法可以强制 javascript 完全停止运行
  • 对象数组 - 在 Vue.js 生态系统中更新对象的正确方法

    我不确定问题到底出在哪里 但我会看看是否有人可以帮助我理解我的代码出了什么问题 我正在利用 Vuex 商店来跟踪某些不断变化的状态 我这样做如下 import Vue from vue import Vuex from vuex Vue u
  • 使用 onBlur 事件上的值更新 React 输入文本字段

    我有以下输入字段 在模糊时 该函数调用服务来更新服务器的输入值 完成后 它会更新输入字段 我怎样才能让它发挥作用 我可以理解为什么它不允许我更改字段 但我能做些什么才能使其工作 我无法使用defaultValue因为我会将这些字段更改为其他
  • 将 JavaScript 引擎嵌入到 .NET 中 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 只是想知道是否有人尝试过将任何 js 引擎嵌入并实际集成到 net 环境中 我可以找到并实际使用 经过L
  • 如何在 angularjs 中修剪()字符串?

    有角度特定的方法吗 如果没有 我应该使用内置的jquery 来做到这一点吗 如果我应该使用内置的jquery 如何在不使用 的情况下访问trim 函数 或者这是必要的 编辑 是的 我知道 str trim 对不起 我需要这个才能在 IE 8
  • Postman - 如何计算 JSON 响应中特定对象的出现次数

    我是 JSON 和 Postman 的新手 我相信我正在尝试做一些非常简单的事情 我创建了一个 GET 请求 它将获得如下所示的 JSON 响应 在下面的例子中我想得到count响应中所有 IsArchived 属性 这些属性的数量因响应而
  • 理论上防止 WebSocket 中第一个收到的消息丢失

    服务器端代码发送消息立即地连接打开后 它向客户端发送初始配置 问候语 以下代码是在客户端 var sock new WebSocket url sock addEventListener error processError sock ad
  • 使用 Lodash 的 TypeScript:_.map(["123", " 234 "], _.trim) 返回 boolean[]?

    我有一个字符串数组 它们已像这样分割 var searchValue 600 800 123 180 var groups searchValue split gt 600 800 123 180 因此项目周围可能存在空格 并且我想删除空格
  • 使用文本遮盖视频

    是否可以使用 HTML CSS 文本来屏蔽视频 我已经找到并设置了这种工作方式 但没有一种允许文本后面有透明背景 例如 这支笔要求您进行某种填充 它并不是真正掩盖实际视频 而是创造幻觉 https codepen io dudleystor
  • 如何在粘贴时获取文本区域输入字段的新值?

    我发现当我尝试从文本区域字段读取值时onpaste调用函数时 我得到字段的旧值 粘贴操作之前的值 而不是新值 粘贴操作之后的值 以下是此行为的演示 http jsfiddle net qsDnr http jsfiddle net qsDn
  • ThreeJS无法加载Json文件

    首先 我已经读过这个问题 https stackoverflow com questions 17201888 three js exporter export object not working with jsonloader r58没
  • 使用 React React-router 登录后重定向到主页,并且 usenavigate 不起作用?

    我希望用户在成功登录后重定向到主页 我将用户登录的 api 请求的数据存储在一个名为 currentUser 的变量中 因此如果 currentUser 为 true 它应该重定向到主页 这就是我处理登录请求的方式 export const
  • 如何根据所需表单输入的值更改 CSS 样式

    我想知道如何编写 javascript 来改变所需的表单元素的样式 如果它们有价值的话就改变它们 我想要做的是当所需的文本字段为空时 在它们周围有一个彩色边框 并在它们有值时删除边框样式 我想做的是编写一个 javascript 函数来检查
  • 如何在 JavaScript 中获取浮点数的小数位?

    我想要的是与 Number prototype toPrecision 几乎相反的 这意味着当我有数字时 它有多少位小数 例如 12 3456 getDecimals 4 对于任何想知道如何更快地完成此操作 无需转换为字符串 的人 这里有一

随机推荐

  • 以编程方式更改 UITableView 的高度

    我有一个UITableView我想根据其中包含的单元格数量以编程方式更改其高度 你能帮助我吗 您可以使用此代码 self yourTableView frame CGRectMake x y width noOfCell heightOfO
  • 当脚本运行时,Postgres now() 时间戳不会改变

    我的 PHP 脚本将运行几秒钟 并且我需要随时从 Postgres 数据库获取真实的时间戳 但是当我从 Postgres 获取 current timestamp 时 它总是返回相同的值 这是我的示例脚本 使用 DBAL echo DB d
  • Java中Thread.currentThread().join()的使用

    以下代码取自 Jersey 项目中的示例 看here https github com jersey jersey blob 2 22 1 examples helloworld src main java org glassfish je
  • JavaScript 中的 sCrypt 实现? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有人问一个bCrypt 的 JavaScript 实现 https stackoverflow com
  • Python pandas 数据框警告,建议使用 .loc 代替?

    您好 我想通过删除丢失的信息并使所有字母小写来操作数据 但对于小写转换 我收到此警告 E Program Files Extra Python27 lib site packages pandas core frame py 1808 Us
  • 在纯 JavaScript 中进行“同步”AJAX 调用时如何显示“正在加载”?

    我想确保向用户显示结果 因此我进行同步 AJAX 调用 使用异步 AJAX 显示 正在加载 指示器非常简单 示例无处不在 但是当我使用带有 XMLHttpRequest 的同步 AJAX 调用时 加载指示器 GIF 图像根本不显示 有人说在
  • Visual Studio - Nuget - 无法加载源的服务索引

    这是我的 NuGet config
  • Binance API如何计算24小时内的priceChangePercent

    我正在开发自己的应用程序 我想在其中检索 24 小时内的价格数据 我已阅读币安提供的文档 https github com binance exchange binance official api docs blob master res
  • 如何使我的安装项目生成可执行文件?

    我构建了一个小型桌面应用程序 尝试使用安装项目来允许其他用户安装它 但每当我运行此安装程序时 它都不会生成可执行文件 这是我第一次制作安装项目 我的解决方案包含两个项目 一个是安装项目 它安装另一个项目的主要输出 另一个项目是一个 WPF
  • 修复 Lisp 语法

    作为 Lisp 的新手 我想知道 Lisp 语法是否可以 修复 有人说 Lisp 的语法是其最大的优势之一 我不太明白这一点 难道不能用空格 换行和缩进的组合来替换 明显的 括号吗 就像Python一样 在我看来 括号是 Lisp 代码中最
  • 使用要删除的列的参数从 R data.table 中删除多列

    我正在尝试以类似的方式操作多个 data tables 并且想编写一个函数来完成此操作 我想传递一个参数 其中包含将执行操作的列列表 当列的向量声明位于 运算符的左侧时 此方法可以正常工作 但如果它是较早声明的 或传递到函数中 则效果不佳
  • Bootstrap:居中 col-md-5?

    我觉得这是一个很奇怪的问题 但我似乎无法在网上找到解决方案 如果我有一个col md 5 我似乎无法将其居中 据我了解网格系统 如果我选择列大小 1 12 为了控制列的位置 我使用 col offset 所以如果我有一个col md 4 我
  • Dart 运行时检查 switch 语句中的类型

    我在尝试检查 Dart 中某些对象的运行时类型时发现了一些奇怪的行为 让我们举一个简单的例子 main List
  • 如何以编程方式将最小化的无模式 WinForm 带到之前显示的位置?

    为了在单击事件时将无模式 Windows 窗体恢复到其先前的位置 我尝试使用下面所示的代码 但它不起作用 如果我遗漏了什么 请告诉我 public void SetFocus this Focus this BringToFront if
  • MVC 3 从 web.config 中的 AppSettings 获取值

    在普通的 ASP NET Web 表单站点中 我会使用 web configs appsettings 将应用程序设置数据添加到站点 但是 在使用 MVC 3 时 我无法以这种方式检索设置值 首先 有 2 个 web config 文件 第
  • wx.TextCtrl(或底层 GTK+)的多线程问题

    我正在开发一个GUI来启动外部长期运行的后台程序 该后台程序可以通过 stdin 给出输入命令 并使用 stdout 和 stderr 来保持打印输出和错误消息 我在 GUI 中使用 wx TextCtrl 对象来提供输入和打印输出 我当前
  • 允许图像缩小,但不允许拉伸

    我的网站有 4 000 多个页面 每页有 10 个或更多不同大小的 jpeg 图像 我正在努力使该网站对移动设备更加友好 为此 我希望能够缩小图像以适应较小的屏幕 我知道我可以做这样的事情来表明图像可以缩小 img bodyImg widt
  • 下载图像并在 BlackBerry 上显示

    我必须开发一个网址 其中涉及从网址下载图像并在黑莓刺激器中显示 任何人都可以在这方面帮助我吗 此代码将连接给定的 URL 并返回 Bitmap 对象 public static Bitmap connectServerForImage St
  • LINQ 表达式> 相当于 .Contains()

    有谁知道如何使用 Linq 表达式创建 Contains string 函数 甚至创建谓词来完成此操作 public static Expression
  • 如何仅使用 CSS 制作选项卡? [复制]

    这个问题在这里已经有答案了 我正在寻找像这样的选项卡系统jQuery 选项卡 http jqueryui com tabs 用户可以在不同的面板之间切换以查看不同的内容 但是 我需要在不使用 JavaScript 的情况下完成此操作 以便未