:目标伪选择器和选项卡

时间:2011-11-11 21:11:11

标签: 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>

和css(最重要的部分):

.tabs section{
 display: none;
}

.tabs section:target{
 display: block;
}

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

我该如何克服这个问题?

1 个答案:

答案 0 :(得分:4)

好吧,如果你将默认设置作为最后一个标签(section:last-child),那么我认为这可行:

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

使用常规兄弟选择器~要求元素位于其目标的兄弟节点之前,因此需要last-child而不是first-child的原因。

编辑:11-12-2011,我确实找到了一种方法让您突出显示您的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;}