【问题标题】::target pseudo selector and tabs:target 伪选择器和选项卡
【发布时间】:2011-11-11 21:11:10
【问题描述】:

所以我想创建一个只使用 CSS 的标签系统。

到目前为止我的工作有效,但我不知道如何让一个标签默认可见。

标签:

<section class="tabs">

  <ul>
   <li><a href="#tab1">1</a></li>
   <li><a href="#tab2">2</a></li>
   <li><a href="#tab3">3</a></li>
  </ul>

  <section id="tab1"> content for 1... </section>
  <section id="tab2"> content for 2... </section>
  <section id="tab3"> content for 3... </section>

</section>

还有css(最重要的部分):

.tabs section{
 display: none;
}

.tabs section:target{
 display: block;
}

所以如果我将section:first-child 设置为阻止(默认情况下第一个选项卡应该可见),那么如果 URL 中有一个锚点,我会得到两个可见部分:第一个选项卡和目标选项卡...

我该如何克服这个问题?

【问题讨论】:

  • 这取决于您是否能够或愿意使用 JavaScript。因为 CSS 只控制表示,而不是行为,所以它无法提供您需要的功能。
  • 我已经有处理标签显示/隐藏的javascript,css只是关闭js的浏览器的后备。
  • 这些标签都在一个页面上吗?非 JS 访问者如何能够看到默认隐藏的内容?
  • 通过点击其中一个链接,地址变为site.com/#tabN,触发:target on #tabN...
  • 我知道你已经接受了我对你的问题的回答,但我只是希望你确保你检查了我编辑的解决方案,以显示链接是活动的(正如你的评论所指出的那样)。

标签: html css target


【解决方案1】:

好吧,如果您将默认选项设置为最后一个选项卡 (section:last-child),那么我认为这可以工作:

.tabs section,
.tabs section:target ~ section {
   display: none;
}

使用通用兄弟选择器~ 要求元素位于它所针对的兄弟元素之前,因此使用last-child 而不是first-child 要求的原因。

编辑:2011 年 11 月 12 日,我确实找到了一种方法让您将 a 标记突出显示为活动状态!假设它符合您的特定应用程序。下面是一些简单的概念验证代码(仅在 FF 中测试过):

HTML

<section class="tabs">
  <ul class="nav">
   <li><a href="#tab1">1</a></li>
   <li><a href="#tab2">2</a></li>
   <li><a href="#tab3">3</a></li>
  </ul>


  <section id="tab2"><div class="tabActive"></div> content for 2... </section>
  <section id="tab3"><div class="tabActive"></div> content for 3... </section>
  <section id="tab1"><div class="tabActive"></div> content for 1... </section>

</section>

CSS

.nav {
    position: relative;
    z-index: 2;
    margin: 10px .5em 0;
}
.nav li {
    padding: .5em;
    width: 2em;
    text-align: center;
    float: left;
}

.tabs section,
.tabs section:target ~ section {
   display: none;
}

.tabs section:target,
.tabs section:last-child {
    display: block;
    clear: left;
    margin: 0 .5em;
    min-width: 300px;  /* for show only */
    min-height: 200px; /* for show only */
    border: 1px solid black;   
    position: relative;
    z-index: 1;
    padding: 10px;
}

.tabActive { /* set for tab 1 */
    width: 2em;
    height: 2em;
    position: absolute;
    top: -2em;
    left: .5em;
    border: 1px solid black;
    border-bottom: transparent;
    background-color: inherit;
    margin-top: -1px; /* top border height */
    margin-left: -1px; /* left border width */
}

#tab1 {background-color: cyan;}
#tab2 {background-color: yellow;}
#tab3 {background-color: pink;}

#tab2 .tabActive {left: 3.5em;}
#tab3 .tabActive {left: 6.5em;}

【讨论】:

  • 它有效,谢谢 :) 现在我需要找到一种方法让链接看起来“活跃”
  • 好。我认为没有一种非脚本方式可以让链接看起来处于活动状态,而无需重新格式化您的 html 以在其各自的 section 元素中包含 a 元素(当然,这会在您显示它们时产生问题你现在的样子)。在某些时候,当有人关闭 javacript 时,您只需要放弃用户体验。
  • 我上面的评论是错误的。请参阅上面我编辑的解决方案,了解如何将链接突出显示为活动的,即使它们不在 section 元素中。
  • 谢谢,我会检查一下,虽然我认为它不适合我的情况,因为我使用图像和其他东西来绘制图形......
猜你喜欢
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-24
  • 2014-02-03
  • 2012-11-03
  • 1970-01-01
相关资源
最近更新 更多