【问题标题】:Multiple tabs in one HTML page without unique reference (no ID or class)一个 HTML 页面中的多个选项卡,没有唯一引用(没有 ID 或类)
【发布时间】:2021-05-07 15:51:29
【问题描述】:

一个 HTML 页面中是否可以有多个选项卡而没有唯一引用,即没有 ID 或类作为单击选项卡时要显示的内容的参考。下面的代码只是为了可视化它的外观。它是纯 CSS 并使用 ID。多个带有选项卡的此类部分应出现在一个 HTML 页面中。代码应该可以在没有任何手动预定义的东西的情况下工作,因为这个带有标签的代码模式应该在多个 HTML 页面上重复使用多次,因此它应该是通用的。我正在考虑使用 JS 和 nextElementSibling 之类的潜在解决方案。任何人都可以支持并发布解决方案(不一定在示例中;理想情况下使用纯 JS,没有库)?

    body {
  background: #e0e0e0;
}

* {
  transition: 0.5s ease-in-out;
  box-sizing: border-box;
}

.accordion {
  margin: 94px auto 0 auto;
  max-width: 500px;
  height: 300px;
  position: relative;
}
.accordion input.tab-toggle {
  position: absolute;
  opacity: 0;
}
.accordion input.tab-toggle:checked + label {
  background: white;
}
.accordion input.tab-toggle:checked + label .tab-title:hover {
  background: transparent;
}
.accordion input.tab-toggle:checked + label .tab {
  visibility: visible;
  opacity: 1;
}
.accordion label {
  float: left;
  font-size: 16px;
  line-height: 16px;
  border-radius: 3px 3px 0 0;
}
.accordion label:first-of-type .tab {
  border-radius: 0 3px 3px 3px;
}
.accordion label .tab-title {
  display: block;
  padding: 20px;
  border-radius: 3px 3px 0 0;
}
.accordion label .tab-title:hover {
  cursor: pointer;
  background: rgba(0, 0, 0, 0.1);
}
.accordion .tab {
  visibility: hidden;
  opacity: 0;
  position: absolute;
  padding: 20px;
  top: 56px;
  left: 0;
  min-width: 100%;
  height: 244px;
  background: white;
  border-radius: 3px;
}
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque felis mi, vulputate et lorem quis, blandit pharetra metus. Donec viverra accumsan velit at ullamcorper.
</p>
<div class="accordion">
  <input class="tab-toggle" type="radio" name="my_radio_group" id="tab_one" checked/>
  <label for="tab_one">
    <span class="tab-title">Tab One</span>
    <div class="tab" id="tab_one_wrapper">
      <p>Hi. I'm tab one's content. Nice to meet you.</p>
    </div>
  </label>

  <input class="tab-toggle" type="radio" name="my_radio_group" id="tab_two" />
  <label for="tab_two">
    <span class="tab-title">Tab Two</span>
    <div class="tab" id="tab_two_wrapper">
      <p>Hi. I'm tab two's content. Nice to meet you.</p>
    </div>
  </label>

  <input class="tab-toggle" type="radio" name="my_radio_group" id="tab_three" />
  <label for="tab_three">
    <span class="tab-title">Tab Three</span>
    <div class="tab" id="tab_three_wrapper">
      <p>Hi. I'm tab three's content. Nice to meet you.</p>
    </div>
  </label>

  <input class="tab-toggle" type="radio" name="my_radio_group" id="tab_four" />
  <label for="tab_four">
    <span class="tab-title">Tab Four</span>
    <div class="tab" id="tab_four_wrapper">
      <p>Hi. I'm tab four's content. Nice to meet you.</p>
    </div>
  </label>


</div>

<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque felis mi, vulputate et lorem quis, blandit pharetra metus. Donec viverra accumsan velit at ullamcorper.
</p>

<div class="accordion">

  <input class="tab-toggle" type="radio" name="my_radio_group" id="tab_five" />
  <label for="tab_five">
    <span class="tab-title">Tab Five</span>
    <div class="tab" id="tab_five_wrapper">
      <p>Tab Five</p>
    </div>
  </label>

  <input class="tab-toggle" type="radio" name="my_radio_group" id="tab_six"/>
  <label for="tab_six">
    <span class="tab-title">Tab Six</span>
    <div class="tab" id="tab_six_wrapper">
      <p>Six</p>
    </div>
  </label>

  <input class="tab-toggle" type="radio" name="my_radio_group" id="tab_seven" />
  <label for="tab_seven">
    <span class="tab-title">Tab Seven</span>
    <div class="tab" id="tab_seven_wrapper">
      <p>Seven</p>
    </div>
  </label>

  <input class="tab-toggle" type="radio" name="my_radio_group" id="tab_eight" />
  <label for="tab_eight">
    <span class="tab-title">Tab Eight</span>
    <div class="tab" id="tab_eight_wrapper">
      <p>Eight</p>
    </div>
  </label>
</div>

【问题讨论】:

  • 给定的 CSS 根本不依赖 id。它已经可以重复使用了
  • @TJ CSS 没有,但标签按 ID 分配给单选按钮。

标签: javascript html css tabs


【解决方案1】:

如果您在 &lt;label&gt; 中插入单选按钮,则不必使用 id:

body {
  background: #e0e0e0;
}

* {
  transition: 0.5s ease-in-out;
  box-sizing: border-box;
}

.accordion {
  margin: 94px auto 0 auto;
  max-width: 500px;
  height: 300px;
  position: relative;
}
.accordion input.tab-toggle {
  position: absolute;
  opacity: 0;
}
.accordion label input.tab-toggle:checked + .tab-title {
  background: white;
}
.accordion label input.tab-toggle:checked ~ .tab {
  visibility: visible;
  opacity: 1;
}
.accordion label {
  float: left;
  font-size: 16px;
  line-height: 16px;
  border-radius: 3px 3px 0 0;
}
.accordion label:first-of-type .tab {
  border-radius: 0 3px 3px 3px;
}
.accordion label .tab-title {
  cursor: pointer;
  display: block;
  padding: 20px;
  border-radius: 3px 3px 0 0;
}
.accordion label .tab-title:hover {
  background: rgba(0, 0, 0, 0.1);
}
.accordion .tab {
  visibility: hidden;
  opacity: 0;
  position: absolute;
  padding: 20px;
  top: 56px;
  left: 0;
  min-width: 100%;
  height: 244px;
  background: white;
  border-radius: 3px;
}
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque felis mi, vulputate et lorem quis, blandit pharetra metus. Donec viverra accumsan velit at ullamcorper.
</p>
<div class="accordion">
  <label>
    <input class="tab-toggle" type="radio" name="my_radio_group" checked/>
    <span class="tab-title">Tab One</span>
    <div class="tab">
      <p>Hi. I'm tab one's content. Nice to meet you.</p>
    </div>
  </label>

  <label>
    <input class="tab-toggle" type="radio" name="my_radio_group" />
    <span class="tab-title">Tab Two</span>
    <div class="tab">
      <p>Hi. I'm tab two's content. Nice to meet you.</p>
    </div>
  </label>

  <label>
    <input class="tab-toggle" type="radio" name="my_radio_group" />
    <span class="tab-title">Tab Three</span>
    <div class="tab">
      <p>Hi. I'm tab three's content. Nice to meet you.</p>
    </div>
  </label>

  <label>
    <input class="tab-toggle" type="radio" name="my_radio_group" />
    <span class="tab-title">Tab Four</span>
    <div class="tab">
      <p>Hi. I'm tab four's content. Nice to meet you.</p>
    </div>
  </label>


</div>

<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque felis mi, vulputate et lorem quis, blandit pharetra metus. Donec viverra accumsan velit at ullamcorper.
</p>

<div class="accordion">

  <label>
    <input class="tab-toggle" type="radio" name="my_radio_group" />
    <span class="tab-title">Tab Five</span>
    <div class="tab">
      <p>Tab Five</p>
    </div>
  </label>

  <label>
    <input class="tab-toggle" type="radio" name="my_radio_group"/>
    <span class="tab-title">Tab Six</span>
    <div class="tab">
      <p>Six</p>
    </div>
  </label>

  <label>
    <input class="tab-toggle" type="radio" name="my_radio_group" />
    <span class="tab-title">Tab Seven</span>
    <div class="tab">
      <p>Seven</p>
    </div>
  </label>

  <label>
    <input class="tab-toggle" type="radio" name="my_radio_group" />
    <span class="tab-title">Tab Eight</span>
    <div class="tab">
      <p>Eight</p>
    </div>
  </label>
</div>

【讨论】:

  • 谢谢!很有前途。一句话:但是,这种方式对我来说并不是真的有用。可能存在的每个选项卡部分的第一个应该可见/检查。在这个例子中这是不可能的,对吧,因为在一个部分中单击的选项卡会影响其他部分?这不应该。每个部分都应该相互独立(这就是为什么我认为基本示例有些欠佳)。有什么想法吗?
猜你喜欢
  • 2021-07-26
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 2018-02-02
  • 2016-08-07
  • 2021-04-05
相关资源
最近更新 更多