1

私は完全な CSS タブ ナビゲーションに取り組んでいます。これが私がやりたいことです: http://jsfiddle.net/7fZnn/1/

しかし、インライン CSS を使用してタブを配置したくありません。そこで、このインライン CSS を置き換えることができるものを調査します。私はそれらを見つけます:

  • attr() 関数、:before または :after を使用して要素を選択した場合の content 属性でのみサポートされます
  • CSS カウンター。それは素晴らしいことですが、attr() 関数として、これは content 属性でのみ機能します
  • CSS 変数、これは Firefox 29 で動作するはずですが、実際には 30 を使用しています。

CSS変数(およびコメントのカウンター)を含む私のコードは次のとおりです:http://jsfiddle.net/j8wxQ/2/

HTML

<div class="container">
    <div class="tabs">
        <div class="tab" id="foo">
            <a href="#foo">Foo</a>
            <div class="content">
                <h1>Onglet 1</h1>
                <p>Lorem Ipsum...</p>
            </div>
        </div>
        <div class="tab" id="bar">
            <a href="#bar">Bar</a>
            <div class="content">
                <h1>Onglet 2</h1>
                <p>Lorem Ipsum...</p>
            </div>
        </div>
        <div class="tab" id="toto">
            <a href="#toto">Toto</a>
            <div class="content">
                <h1>Onglet 3</h1>
                <p>Lorem Ipsum...</p>
            </div>
       </div>
       <div class="tab" id="tata">
           <a href="#tata">Tata</a>
           <div class="content">
               <h1>Onglet 4</h1>
               <p>Lorem Ipsum...</p>
           </div>
       </div>
       <div class="tab default" id="titi">
           <a href="#titi">Titi</a>
           <div class="content">
               <h1>Onglet 5</h1>
               <p>Lorem Ipsum...</p>
           </div>
       </div>
    </div>
</div>

CSS

:root {
    var-tab: 0px;
}

@media screen and (min-width: 1025px) {
    .container {
        width: 1000px;
        margin: auto;
    }
}

@media screen and (max-width: 1024px) and (min-width: 641px) {
    .container {
        width: 99%;
        margin: auto;
    }
}

@media screen and (max-width: 640px) {
    .container {
        width: 100%;
        margin: 0;
        padding: 0;
    }

    body, html {
        margin: 0;
        padding: 0;
    }
}

.tabs {
    position: relative;
    width: 100%;
    /*counter-reset: tab 0;*/
}

.tab {
    /*counter-increment: tab;*/
    var-tab: calc(var(tab) + 75px);
}

.tab .content {
    display: none;
    position: absolute;
    top: 50px;
    margin-top: -5px;
    border: solid 5px rgba(0,0,255, 0.1);
    padding: 10px 10px 10px 10px;
}

.tab:target .content {
    display: block;
    position: absolute;
    top: 50px;
}

.tab.default .content{
    display: block;
    position: absolute;
    top: 50px;
}

.tab:target ~ .tab.default .content {
    display: none;
}

.tabs .tab a {
    position: absolute;
    top: 0;
    left: var(tab);
    /*left: calc(75px * counter(tab));*/
    display: inline-block;
    height: 45px;
    line-height: 45px;
    min-width: 75px;
    margin: 0;
    padding: 0;
    text-decoration: none;
    color: #000;
    vertical-align: middle;
    border-bottom: solid 5px rgba(0,0,255, 0.1);
    text-align: center;
}

.tabs .tab a:hover {
    border-bottom: solid 5px rgba(0,0,255,0.5);
}

.tabs .tab:target a {
    border-bottom: solid 5px rgba(0,0,255,1);
}

p {
    text-align: justify;
}

それで、私は何を逃したのですか?目標を達成するために他の何かを使用できると思いますか?

ご協力いただきありがとうございます!

4

3 に答える 3

0

残念ながら、css 変数は本番環境に対応するにはほど遠いです (つまり、公開サイトで使用できるほど広くサポートされています)。

タブの数が限られていることを考えると、最も実行可能な (純粋な css) ソリューションが最も明白なソリューションであると思います。タブごとに単純にセレクターを使用できます。これは特にエレガントではありませんが、うまく機能します。

.tab:nth-child(1) > a {
    left: calc(74px * 0);
}
.tab:nth-child(2) > a {
    left: calc(74px * 1);
}
.tab:nth-child(3) > a {
    left: calc(74px * 2);
}
/* etc.. */

http://jsfiddle.net/7fZnn/2/

于 2014-04-22T14:18:57.170 に答える