Skype Me™! | XMPP: Dostępność na GTalk Status w sieci Jabber/XMPP „...na zawsze pozostaniesz w naszych sercach...”
Maxthon Browser
Zaloguj się

2010-09-03 Wpis 363 - Zgodność z CSS: text-decoration: none; WTF?

Level: 0 | Time: 02:05:37 | Date: 03 września, 2010
Nie myślałem, że Arkusze Kaskadowe Stylów jeszcze kiedykolwiek zaskoczą mnie... a już na pewno nie w taki sposób - elementami, które są podstawą i które znam od wielu, wielu lat.
Pomóżcie, bo nie rozumiem tego totalnie. Wydaje się, że prostą strukturę, którą napisałem, Trident wyświetla poprawnie (wg mojego rozumowania) a ani WebKit, ani Gecko, ani Presto nie potrafią tego zrobić. (Tak, wiem, że to przecież nawet brzmi śmiesznie! Wychodzi na to, że czegoś nie rozumiem.)
Chodzi o text-decoration w poniższym przykładzie:

<style> a, a:link {color: black; text-decoration: none;} a:hover {color: red; text-decoration: underline;} b.hide {display: none;} a:hover b.hide {color: green; text-decoration: none; display: inline;} </style> <a href="http://g.cn"> Odnośnik widoczny <b class="hide"> (część ukryta) </b> </a>
Który daje następujący efekt:

Odnośnik widoczny (część ukryta)

Mam więc niepodkreślony odnośnik - rodzic, który jest widoczny i ma kolor czarny. We wnętrzu mamy dziecko klasy "hide" - dodatkowy element <b> (pierwszy lepszy jaki mi się nasunął) dalsza część odnośnika, niewidoczna (display: none).

Po najechaniu kursorem na link oczywiście rodzic nabywa pseudoklasę :hover zmieniając swoje właściwości: tekst całego linku zmienia kolor na czerwony i dostaje podkreślenie (text-decoration: underline;) oczywiście również czerwone, bo tak działa CSS. Dziecko o klasie hide jest wyświetlane (display: inline), nadawany jest mu INNY kolor - zielony, i usuwane jest podkreślenie ( text-decoration: none;).

Więc dlaczego, do cholery, wszystkie zgodne ze standardami przeglądarki wyświetlają mi to źle! Co prawda wyświetlają pogrubione dziecko <b> o klasie hide, zmieniają jego kolor poprawnie na zielony, ale całkowicie olewają atrybut text-decoration: none;
i na chama wyświetlają czerwone podkreślenie.

Natomiast jedyny Trident wyświetla mi to tak, jak ja chcę, żeby się wyświetlało.
Czyli BEZ podkreślenia w tym elemencie, który kaskadowo dostaje atrybut text-decoration: none;

O co w tym chodzi?

Co prawda rozwiązanie jest dosyć proste i działa na wszystkich silnikach:
<style> a, a:link {text-decoration: none;} a span.visible {color: black; text-decoration: none; } a:hover span.visible {color: red; text-decoration: underline;} b.hide {display: none; } a:hover b.hide {color: green; display: inline; } </style> <span> <a href="http://g.cn"><span class="visible"> Odnośnik widoczny</span> <b class="hide"> (część ukryta) </b> </a> </span>
Tekst - odnośnik, który ma mieć podkreślenie - obejmujemy dodatkowym znacznikiem <span> i to pod nim ustawiamy text-decoration: underline;, podczas najechania kursorem, natomiast na całym linku całkowicie wyłączamy podkreślenie text-decoration: none;

Smutne, ale prawdziwe.

±

Komentarze do wpisu
"2010-09-03 Wpis 363 - Zgodność z CSS: text-decoration: none; WTF?":

1. Modrzew napisał(a):
03 września 2010, 03:01:19

Zapakuj część widoczną w jakiegoś spana i jemu dawaj text-decoration.

Wg mojego rozumowania to Trident źle wyświetla ;)

2. konieckropka napisał(a):
03 września 2010, 03:03:50

Nie... No ja wiem, jak sobie z tym poradzić (wpadłem na to jeszcze przed napisaniem wpisu, ale że nie byłem pewny czy zadziała, skodziłem go przed chwilą - działa). Nie mniej, tym bardziej jest to dziwne. Za raz wrzucę kod działający. Pozostaje pytanie: Dlaczego? Mozesz uargumentować swoje zdanie "to Trident źle wyświetla" (ale inny niż: 'Microsoft śmierdzi' okej?). Bo skoro WebKit już pakuje ten underline pod b, to dlaczego zmienia mu kolor?

3. Modrzew napisał(a):
03 września 2010, 03:06:23

Spójrzmy w kod.

b miał być zielony i nie mieć podkreślenia. Jest zielony? Jest. Nie ma podkreślenia? Nie ma. (cicho, już wyjaśniam)

a miał być czerwony i dostać podkreślenie. Jest czerwony? Jest. Jest podkreślenie? Również jest, tak długie jak całe a (a więc obejmujące również to nieszczęsne b).
To, co bierzesz za text-decoration b, jest tak naprawdę text-decorationem a i raczej nie ma rady żeby się go w ten sposób pozbyć ;)

4. konieckropka napisał(a):
03 września 2010, 03:10:35

Hm, no w zasadzie to ma sens co mówisz. Tylko dlaczego w takim razie b jest zielone, skoro "a miał być czerwony"? (wiem, b jest dzieckiem i dziecko nie dziedziczy w tym momencie atrybutu po tatusiu, bo ma swój własny, więc to samo powinno być z underlinem). Ok, ale rozumiem, kwestia kolejności.. .chociaż jak dla mnie w tym wypadku nadal Trident jest mądrzejszy (olaboga, co ja mówię!).
Powinno być coś w stylu tabelkowych "border-collapse:collapse;".

5. Modrzew napisał(a):
03 września 2010, 03:14:12

Text-decoration nie dziedziczy, bo ma własny - "none". To tatuś wtrynia się ze swoim podkreśleniem.
Zapewne gdybyś jednak dał b jakieś podkreślenie, byłoby ono w kolorze zielonym ;)

6. konieckropka napisał(a):
03 września 2010, 03:14:57

Ahh...! Czyli chodzi o warstwy. Ale żal.

7. Modrzew napisał(a):
03 września 2010, 03:15:39

Nie warstwy, tylko DOM ;)
I czemu żal?

8. konieckropka napisał(a):
03 września 2010, 03:17:27

No wiesz, cebula ma warstwy i DOM też ma warstwy. Gdyby dać, tak jak mówisz podkreślenie pod b koloru tła to wydawałoby się, że go nie ma. Żal, że CSS olewa dzieci ;)

9. Crozin napisał(a):
03 września 2010, 07:27:18

Nie czytałem komentarzy ale:
http://www.w3.org/TR/CSS21/text.html#lining-striking-props

Inherited: no (see prose)

Zażalenia do W3C proszę słać :D

10. riddle napisał(a):
03 września 2010, 11:25:37

http://twitter.com/riddle/status/17569403282

11. Grzegorz napisał(a):
03 września 2010, 12:08:46

Zamiast podkreślenia (text-decoration: underline) zastosuj dolne obramowanie (border-bottom), i będziesz mógł cudować z kolorami ;)

12. konieckropka napisał(a):
03 września 2010, 12:30:01

No tak, ale border, to border a underline to underline. Tak samo W3C upierało się, żeby nie używać tabel do ukłądania layoutu strony bo nie po to są te znaczniki, tak jak nie po to są text-underline-style i text-underline-color, żeby z nich nie skorzystać.

@riddle, @Crozin, dzięki za linki ;]

Dodaj komentarz:

Formatowanie komentarzy: Markdown
Aby sformatować komentarz, uzyj znaczników Markdown:
*tekst* emfaza
**tekst** silna emfaza
odnośnik <http://example.com/>
odnośnik2 [Tekst](http://example.com/)

« Wróć

Details:

  • Artist: konieckropka
  • Time: 02:05:37
  • Date: 03 września
  • Year: 2010
  • Level: 0

Genre:

Komentarz

RSS

Miniblog

?| Google "on fly" search

Inspirujące, ale na ile przydatne?

Źródło: neowin.net

?| Hide And Seek


Imogen Heap - Hide & Seek

?| Firefox Tab Candy

O Firefoxie - wyjątkowo -
nie negatywnie:

?| Karma...

...is a word. Like "love". A way of saying "what I am here to do."