2011-11-11 110 views
3

所以我想創建一個只使用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阻止(第一個選項卡應該是默認的可見),那麼我會得到兩個可見部分,如果網址中存在錨點:第一個標籤和目標標籤...

我該如何克服這個問題?

+0

,如果你有能力,或願意使用JavaScript取決於。因爲CSS只控制表示而不是行爲,所以它不能提供你不需要的功能。 –

+0

我已經有處理選項卡顯示/隱藏的JavaScript,CSS只是對js關閉的瀏覽器的後備。 – Alex

+0

這些標籤都在一個頁面上嗎?非JS訪客如何能夠看到隱藏的默認內容? – KatieK

回答

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;} 
+0

它的工作原理,謝謝:)現在我需要找到一種方法,使鏈接看起來「積極」 – Alex

+1

好。我不認爲有一種非腳本化的方式讓鏈接看起來很活躍,而不需要重新設置你的html的格式來讓它們各自的'section'元素中有'a'元素(這當然會產生你在你目前的態度)。在某些時候,當有人關閉了javacript時,您只需放棄用戶體驗。 – ScottS

+0

我上面的評論是錯誤的。請參閱我上面編輯的解決方案,以瞭解如何將鏈接突出顯示爲即使它們不在'section'元素中。 – ScottS