2012-07-16 8 views
14

Powiedzmy to markup:Wyświetlacz pierwsza litera tylko

<div id="socialMedia"> 
    <a class="Twitter">Twitter</a> 
</div> 

Co chcę tylko być widoczne pierwsza litera tekstu (w tym przypadku, po prostu T)

(Faktycznie Wygrałem „t skończyć używając go, ale jestem ciekaw tego, na pewno może być pomocny później)

Więc to był mój próba:

#socialMedia .Twitter{ 
    display:none; 
} 
#socialMedia .Twitter:first-letter { 
    display: block !important; 
} 

Udało mi się sprawdzić, czy tego nie osiągnie. Pytanie brzmi: dlaczego? i czy jest trochę pracy wokół tego?

-EDIT-

Szukamy IE = + 7/8 wersja zdolne rozwiązania ..

Salut

+0

BTW, jest to pseudo-element o pseudo-klasy czy? –

+0

To, co robisz, jest jak ukrywanie elementu nadrzędnego i próba pokazania jednego z jego potomków, nie zadziała, ponieważ styl nadrzędny nadpisuje go. Element nadrzędny musi również być elementem blokowym, aby działał. Podobnie jak znacznik 'div' lub' p' lub 'display: block' na znaczniku' a'. – sachleen

+0

@sachleen kolor, może?(przezroczysty niestandardowy VS) –

Odpowiedz

17

Edytuj: Disclaimer: to nie działa zgodnie z komentarzami. Nie używaj go tak, jak jest, bez sprawdzania, czy pasuje on do twoich potrzeb.

Jeśli zaznaczysz specyfikację pseudo-elementu :first-letter, zauważysz następujące:

: first-letter pseudo-element musi wybrać pierwszą literę w pierwszym wierszu bloku , jeśli nie jest poprzedzony żadną inną zawartością (taką jak obrazy lub wbudowane tabele) w jej linii.

Ważnym słowem jest tutaj "blok".

Próbujesz użyć pseudo elementu na tagu <a/> z klasą Twitter. Domyślnie znaczniki zakotwiczenia są elementami śródliniowymi (a nie elementami blokowymi).

Dla danego znaczników, jeden rozwiązanie problemu byłoby styl kotwicy w ten sposób:

.Twitter { 
    display:block; 
    visibility:hidden; 
} 

.Twitter:first-letter { 
    visibility:visible; 
}​ 

nie jestem pewien dokładnie, co masz zamiar za, ale to jest wystarczająco dobry do celów doświadczalnych . Sprawdź demo tutaj: http://jsfiddle.net/H7jhF/.

+1

Hej Dzięki za pisanie, to nie działa dla mnie w najnowszej wersji FF ... –

+0

Hm, to dziwne. Spec "widoczność: ukryta" mówi "potomkowie elementu będą widoczne, jeśli mają" widoczność: widoczna "" (http://www.w3.org/TR/CSS2/visufx.html#visibility). Rozejrzę się trochę i zobaczę, czy rozumiem problem. Należy pamiętać, że to wciąż jest głupie rozwiązanie, ponieważ własność 'visibility' nie eliminuje pola elementu. –

+0

To działa w chrome, ale nie IE9 z jakiegoś powodu. Microsoft twierdzi, że jest obsługiwany, ale wydaje się, że tak nie jest. http://msdn.microsoft.com/en-us/library/hh781508(v=vs.85).aspx –

2

Co robisz jest jak ukrywanie elementu nadrzędnego i stara się pokazać jedno z jego dzieci, to nie zadziała, ponieważ styl nadrzędny nadpisuje go. Element nadrzędny musi również być elementem blokowym, aby działał. Podobnie jak znacznik div lub p lub display: block; w znaczniku a.

Oto coś za pomocą koloru:

HTML

<div id="socialMedia"> 
    <a class="Twitter">Twitter</a> 
</div> 

CSS

body { 
    background-color:#FFF; 
} 
.Twitter{ 
    display: block; 
    color:#FFF; 
} 
.Twitter:first-letter { 
    color:#000; 
} 
+1

Właśnie miałem opublikować coś w tym stylu. Oto mała wersja demonstracyjna: http://jsfiddle.net/H7jhF/. Ponadto, do OP, sprawdź specyfikację, gdy uważasz, że coś, co powinno działać, nie działa (w tym przypadku: http://www.w3.org/TR/CSS2/selector.html#first-letter) –

+0

@tjeezy ah tak, patrzyłem na widoczność, ale to nie działało, ale jeszcze nie rozgryzłem bloku wyświetlacza. Powinieneś opublikować to jako odpowiedź, ponieważ jest lepsza niż moja. – sachleen

+0

Twoja odpowiedź była jednak dobra. No cóż, też złożyłem jeden. –

1

Dlaczego nie wystarczy użyć JavaScript i podzielić ciąg do tablicy i użyć pierwszy element tablicy. Lub charAt()

+0

Tak, chciałem wiedzieć, czy jest to możliwe z CSS bez szerokości i tak dalej .. –

9

spróbować czegoś takiego:

.Twitter { 
 
    font-size: 0; 
 
} 
 

 
.Twitter:first-letter { 
 
    font-size: 12px; 
 
}
<div class="Twitter">Twitter</div>

Może nie jest to najlepsze rozwiązanie, ale działa.

+0

Użyłem jsfiddle @ tjeezy (http://jsfiddle.net/H7jhF/89/) i zredagowałem go, aby użyć rozmiaru czcionki, jaki zaproponowałeś, a także ustawił go na wbudowany blok, aby po nim mógł płynąć inny element. W skrócie wolę używać rozmiaru czcionki. – Robert

2

Czyste odpowiedzi na CSS używają widoczności i kolorów, aby ukryć pozostałe litery, ale wciąż są obecne i wpływają na układ. Może to spowodować problemy z układem, np. jeśli chcesz unieść element i umieścić coś obok niego.

Znalazłem zabawny sposób na zrobienie tego bez ukrytych elementów. Sztuczka polega na tym, by całe słowo zredukować do prawie niczego, a następnie wysadzić tylko pierwszą literę. To trochę tak, jak próbował OP, ale działa, ponieważ działa na ciągłym widmie, a nie na display: none, które po prostu zamyka wszystko w środku. (Rodzaju analogowy> Sytuacja cyfrowej.)

Demo

HTML:

<div>Ding Dong</div> and other stuff 

CSS:

div { 
    font-size: 0.0000016px; 
    float: left; 
} 

div::first-letter { 
    color: red; 
    font-size: 10000000em; 
} 

Wynik:

http://i.imgur.com/3WeNZ55.png

2

strzelać zawartości poza stronę i pokazać ten list za pomocą dynamicznej zawartości:


.twitter{ 
    text-indent:-9999px; 
    display:block; 
    position:relative; 
} 
.twitter:before,.twitter::before{ 
    content:"T"; 
    position:absolute; 
    width:10px; 
    height:15px; 
    z-index:100; 
    text-indent:9999px; 
} 

w grę w tym skrzypce:
http://jsfiddle.net/jalbertbowdenii/H7jhF/67/

1

Oto, co zrobić:

.Twitter{ 
     display:block; 
     width:1ch; 
     overflow:hidden; 
     white-space: nowrap; 
    }