Zagadka CSS #2
Druga zagadka z serii CSS riddles.
Zasady niezmienne takie jak w pierwszej zagadce CSS. Ponadto dodałem punk 5, który wyjaśnia wątpliwości niektórych osób.
Zasady zagadek CSS
- Kod zawiera błąd
- Kod zawiera dokładnie jeden błąd
- Nie chodzi o ewentualną różnicę w interpretacji różnych przeglądarek jak Opera czy Firefox ani nawet programu Internet Explorer
- Odpowiedzi piszemy w komentarzach do postu zagadki. Kto pierwszy ten lepszy.
- Są to style do XHTML-a
Zagadka nr 2:
<style type="text/css" media="screen">
html, body {
color:#333;background:#fff
}
/**{ margin:0;padding:*1em
}\*/
samp {
display:block;
text-align:center;
content:"Hello from CSS!"
}
.p {
font-size:90%;<!--text-align--> /**:left*/padding:1em /*0*/ 0
}
h2 {
display:run-in;
padding:10px 17px 5px .0
}
</style>
Kto wie gdzie jest błąd ? ;)
Odpowiedź na zagadkę nr 2:
dodano 23.10.2006
Błąd w kodzie CSS polegał na braku pseudo-elementu :before lub :after do selektora samp.
samp {
display:block;
text-align:center;
content:"Hello from CSS!"
}
Według specyfikacji własność content możemy stosować tylko do selektorów posiadających pseudo-element :before lub :after.
W przyszłości (CSS3) będzie możliwa konstrukcja typu:
span {
content:"CSS!"
}
Taka też:
span::before {
content:"from "
}
Co ciekawe taka też:
span::before::before {
content:"Hello "
}
Co w efekcie da nam Hello from CSS!, miłe prawda?
W kodzie CSS możemy używać komentarzy /* tu komentarz */. Jednak jeśli CSS-y znajdują się w dokumencie XHTML pomiędzy znacznikami <style /> to możemy używać komentarzy <!-- tu komentarz -->.
Dobrym zwyczajem jest używać tylko komentarzy slash gwiazdka. Nie trudno wyobrazić sobie przypadek przeniesienia kodu CSS do odrębnego pliku w którym te komentarze wygenerują błąd.
Różne przeglądarki różnie interpretują XHTML-owe komentarze w kodzie CSS, co może nam przysporzyć tylko więcej pracy. Użyłem ich tylko by odwrócić uwagę od prawdziwego błędu.
Jako pierwszy prawidłowej odpowiedzi udzielił psz.
Thursday, 19 October 2006, 11:25 pm by zwierz
Jak dla mnie - to jest dużo łatwiejsze niż pierwsza zagadka.
Thursday, 19 October 2006, 11:41 pm by psz
Generowaną treść można używać tylko w pseudoklasach :before i :after.
Friday, 20 October 2006, 10:30 am by mdx
chyba tak nie można komentować cssów?
Friday, 20 October 2006, 10:30 am by mdx
chodzilo o text-align
Friday, 20 October 2006, 12:09 pm by Wojciech Bednarski
@mdx, co Twoim zdaniem jest nie tak z text-align ?
Friday, 20 October 2006, 1:30 pm by lockoom
Hmm, wydaje mi się, że komentarze HTML nie mogą się znajdować wewnątrz {}, ale nie mogę znaleźć odpowiedniej informacji w specyfikacji, która mówi jedynie, że:
“CSS also allows the SGML comment delimiters (”“) in certain places, but they do not delimit CSS comments. They are permitted so that style rules appearing in an HTML source document (in the STYLE element) may be hidden from pre-HTML 3.2 user agents. See the HTML 4.0 specification ([HTML40]) for more information.”
Może ja nie do końca to rozumiem, ale te “certain places” są jakby nie do końca zdefiniowane :) Co prawda dalszy ciąg sugeruje właściwie tylko jedno możliwe użycie komentarzy SGML, ale w kontekście pierwszego zdania to mi nie pasuje. Opera zgłasza błąd jedynie gdy komentrze są wewnątrz danej reguły css, jeśli są pomiędzy regułami - błędu brak…
Friday, 20 October 2006, 5:07 pm by mdx
@Wojciech Bednarski
Zawzsze wydawało mi się, że w css komentować mozna tylko za pomocą /**/ Ale to był mój błąd, za w3c:
“Traditionally, UAs have silently ignored unknown tags. As a result, old UAs will ignore the ‘STYLE’ element, but its content will be treated as part of the document body, and rendered as such. During a transition phase, ‘STYLE’ element content may be hidden using SGML comments”
Sam juz nie wiem ;)
Friday, 20 October 2006, 10:37 pm by psz
Właściwość “content” można używać tylko w pseudoklasach :before i :after (za: http://www.w3.org/TR/CSS21/generate.html#propdef-content).
Saturday, 21 October 2006, 1:08 am by Big_Z
Robocza wersja CSS 3 dopuszcza content dla chyba dowolnego obiektu. Robocza wersja to w sumie też wersja.
W xhtml komentarze powinny być chyba automatycznie wycięte przez parsowaniem strony, więc teoretycznie podczas analizy arkusza już go tam nie będzie. Zastanawiam się jednak, czy przypadkiem nie pozostanie po nim …
Osobiście powiedziałbym, że błąd jest dla tagu h2. Obiekty run-in nie posiadają własnych pudełek (są umieszczne w pudełku sąsiada), więc nie posiadają paddingów, marginesów i obramowań.
h2 {
display:run-in;
padding:10px 17px 5px .0
}
Saturday, 21 October 2006, 1:10 am by Big_Z
Wycieło mi kilka tagów…
W xhtml wycinane są komentarze <!– –>. Nie wiem tylko, czy nic po nich nie pozostaje, czy też może pozostaje <!>. Zakładam jednak, że nic.
Sunday, 22 October 2006, 5:31 pm by Całek
@Big_Z:
Jednak elementom inline spokojnie można nadawać padding (z czego wielokrotnie korzystam), więc.. dlaczego by nie można tego samego zrobić przy run-in?
Biorąc pod uwagę, że w pierwszej zagadce chodziło o CSS2, więc zapewne sprawa dotyczy owego content.
Swoją drogą - Opera dziwnie interpretuje te komentarze, a dokładniej ma problem z regułką, która występuje bezpośrednio po nich.
Thursday, 26 October 2006, 1:33 am by lockoom
Eee tam taki błąd nie-błąd. Moim zdaniem powinieneś dokładniej zdefiniować warunki. Owszem CSS3 nie jest jeszcze oficjalnym standardem, ale przecież wiele jego elementów od dawna funkcjonuje w świadomości webmasterów (selektory CSS3, “opacity”, czy właśnie “content” dla dowolnego elementu), a więc jest już de facto standardem i to częściowo zaimplementowanym.
Pierwsza zagadka może nie była trudna, ale jej charakter bardziej mi odpowiadał. Niemniej czekam na kolejną :)