2010-07-28 18 views
16

Bu CSS'ye sahip:Varsayılan: CSS ile hedefle

<style type="text/css"> 
.tab { 
    display: none; 
} 
.tab:target { 
    display: block; 
} 
</style> 

Ve bu HTML:

<div class="tab_container"> 

    <ul class="tabs"> 
    <li><a href="#updates-list">List</a></li> 
    <li><a href="#updates-map">Map</a></li> 
    </ul> 

    <ul class="tab list" id="updates-list"> 
    Eh.. Hello! 
    </ul> 
    <div class="tab map" id="updates-map"></div> 
</div> 

Ancak, hedef (URL'de #) belirtilmemişse ve henüz bir sekme tıklanmadıysa sayfam boş. Xzx39 varsayılan olarak göstermek istiyorum.

Bunu nasıl yapabilirim? Teşekkürler.


Güncelleme: Bunun yanında, ilk hedef değilse Google Haritam bozuk. Birisi bir düzeltme biliyor mu?

+0

[CSS3 belirtimi] 'den (http://www.w3.org/TR/css3-selectors/#target-pseudo): "Belgenin URI'sinin parça tanımlayıcısı yoksa, belgenin hedef öğesi yoktur. " Çok kötü! –

+0

Neden boo? Eğer bir parça tanımlayıcısı yoksa, 'hedef' ile ne eşleşmesi beklenir? Kök eleman? * Her element * (veya her bir [id], bir [isim] ')? Ya da, varsayılan olarak, [id] 'nin bir alt kümesi arasında, bir yazarın * kendi yazdıklarına dayanarak beklediği belgenin içinde bir parça tanımlayıcısı ile referans alınmasını bekler. Ne CSS, ne de DOM bile bir ihtimal olabilir. herhangi bir bilgi var mı? – BoltClock

cevap

18

Kendiliğinden düşünebileceğim tek çözümün, ne yazık ki JavaScript kullanması olduğunu söylemek zorundayım. şöyle birşey:

<script type="text/javascript"> 
    if (document.location.hash == "" || document.location.hash == "#") 
    document.location.hash = "#updates-list"; 
</script> 

DÜZENLEME:

Ok, CSS çözüm var. Bu ancak varsayılan giriş #updates-list son yerleştirilmesini gerektirir (#updates-map sonra ve eklemek olabilecek diğer sekmeler):

.tab, .tab:target ~ #updates-list { 
    display: none; 
} 
#updates-list, .tab:target { 
    display: block; 
} 
+0

çok teşekkürler! ama css çözümünüzün nasıl varsayılan bir hedef seçtiğini biraz daha açıklayabilir misiniz? .tab nedir? .tab kullandı mı? .tabs olmalı? veya –

+2

'# updates-list' varsayılanıdır, çünkü # update-list, .tab: target {...} 'kuralında belirttiğim şey budur. ".tab" sekmelerin içeriklerinin üzerindeki sınıftır, sekmelerin kendileri değil - CSS'mi sorudaki CSS ile karşılaştırır. – RoToRa

+0

tamam, ikinci satırın varsayılan stilini şu şekilde göstereceğini söylüyor: hedef? ve ilk satır, bir hedef bir kardeşse, standart sınıfın hedefle aynı olmadığını söyler mi? ama ikinci çizgiyi geçersiz kılmayacak mısın? Bu örnek ile çalışmak için çalışıyorum http://css-tricks.com/examples/CSSTabs/ - http://jsfiddle.net/ArHdb/ çok teşekkürler –

2

Senden isteyeyim tahmin varsayılan sekme görüntülemek için .tab_container:not(> :target) > .default gibi seçme şey olduğunda hiçbir biri hedeflenmiştir. Ancak, bu mümkün değildir, çünkü :not() sözde sınıf sadece basit seçicilerin (yani :target değil, > :target değil), bu durumda, kapsayıcının hedefini değil, çocukların hedefini kontrol edersiniz.

Ben aşağıdakilerden birini olacaktır:

  • Kullanım JavaScript yükte ilk sekmesine hedef belirlemek (ya da sadece çapa mevcut olduğunu gerektirir) için.

  • ilk aktif sekme için belirli bir geçersiz kılma sınıfını ekleyin ve ilk sekme anahtarından sonra (JavaScript ile tekrar) çıkarın.

İlk alternatif, tarayıcı geçmişi ile karıştırılırken ikinci seçenek kod karmaşasından biraz daha fazla olur. Şu anda "mükemmel" bir çözüm düşünemiyorum. Belki de CSS3 olmayan tarayıcılarla uyumluluk elde etmek ve bu sorunu biraz temiz bir şekilde çözmek için mevcut hedefi tespit etmek için Javascript'i tamamen kullanmanız daha iyi olur mu?

+0

Uyumluluk sorun değil. Sadece Webkit'i önemsiyorum. –

+0

Bu * gelecekte * .tab_container: not (: has (>: target))> .default' ile mümkün olabilir, ancak yalnızca bir çocuk birleştiricisiyle ': has()' CSS'ye girerse. Aksi halde JavaScript kullanmanız gerekecek. (FWIW, verdiğim örnek, bugün jQuery'de çalışıyor.) – BoltClock

0

Yararlı:

.tab#tabControl { display:block; } 

.tab:not(:target) { display:none; } 

.tab:target ~ #tabControl { display:none; } 
4

Bu eski bir soru olduğunu biliyorum, ama yine de alakalı ve ben başka bir önerim var:

.tab {display:none} 

.default-tab {display:block} 

:target ~ .default-tab {display:none} 

#tab1:target ~ .tab1, 
#tab2:target ~ .tab2 { 
    display: block 
} 

Bu:

<a href="#tab1">Tab 1</a> 
<a href="#tab2">Tab 2</a> 

<a id="tab1"></a> 
<a id="tab2"></a> 

<div class="tab tab1 default-tab">Some content</div> 
<div class="tab tab2">Some other content</div> 

ve css istediğiniz sekmeleri sipariş etmenize izin verir, ancak dinamik olarak html oluşturuyorsanız, css dy üretmeniz gerekir namically. Veya css'yi yazarken desteklenecek maksimum sayıda sekme seçin. şu anda veya boş # varolmayan ise

location=location.hash||"#updates-list"

Bu sadece geçerli bir karma kullanıcıyı yönlendiriyor:

+0

Son olarak! Bu çalışmayı ilk bulduğum şey. .default-tab yerine #home kullanıyorum ama yine de. Şaşırtıcı. Teşekkür ederim. Bulduğum diğer çözüm kullanıyordu: sonuncusu, ve hiç çalışmıyordu. Yine de, varsayılan sekmenin bitmek zorunda olması sorunu var, ancak yalnızca bir seferde görüntüleniyorsanız, bu bir sorun değil. Teşekkür ederim. – RoboticRenaissance

2

Bu bulabildiğim en kısa cevap gibi görünüyor.

~ Kullanıcıların% 98'i JavaScript'i etkinleştirmiş olduğundan, bir JS çözümü gerçekten sorun olmamalıdır.