:target 伪选择器和选项卡

Ale*_*lex 3 html css target

所以我想只使用 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>
Run Code Online (Sandbox Code Playgroud)

和 css(最重要的部分):

.tabs section{
 display: none;
}

.tabs section:target{
 display: block;
}
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能克服这个问题?

Sco*_*ttS 5

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

.tabs section,
.tabs section:target ~ section {
   display: none;
}
Run Code Online (Sandbox Code Playgroud)

使用一般的兄弟选择器~要求元素位于它所针对的兄弟元素之前,因此这就是使用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>
Run Code Online (Sandbox Code Playgroud)

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;}
Run Code Online (Sandbox Code Playgroud)