2012-05-22 10 views
27

Jakie są powody, dla których ludzie preferują takie techniki, jak SMACSS do wyświetlania nazw, w stosunku do rzeczywistej wersji css namespaces?Czy ktoś faktycznie używa przestrzeni nazw css?

Zrobiłem to przez trochę, ale nie udało mi się wymyślić żadnych dobrych zasobów. (Martwi mnie, że albo mój google-fu jest bzdurą (bardzo prawdopodobne), albo specyfikacja przestrzeni nazw css jest bezużyteczna (mniej prawdopodobne))

+3

ja nawet nie zobaczyć go na [Kiedy mogę używać?] (Http: //caniuse.com/) i nie sądzę, żeby jakakolwiek przeglądarka choć częściowo ją wspierała ... –

+1

@DominicBarnes - Jest w statusie Rekomendacji, co oznacza, że ​​muszą istnieć co najmniej dwie niezależne implementacje tej przeglądarki. – Quentin

+2

@ Dominic Barnes: Właściwie każda nowoczesna przeglądarka obsługuje to, w tym IE9 +. Ostatnio odpowiedziałem na pytanie dotyczące przestrzeni nazw CSS, które zawiera kod, którego można użyć do sprawdzenia, czy działa: http: // stackoverflow.com/questions/9490155/trouble-getting-declaration-namespaces-to-work/9491691 # 9491691 Głównym powodem, dla którego podejrzewam, że przestrzenie nazw CSS nie pojawiają się w tej witrynie, jest fakt, że w dzisiejszym Branża internetowa, ponieważ HTML5 jest teraz fajną nowością, która w żaden sposób nie wykorzystuje przestrzeni nazw. – BoltClock

Odpowiedz

24

Obejmują one całkowicie różne przypadki użycia.

Przestrzenie nazw CSS służą do stosowania CSS do dokumentów XML, które mieszają elementy z różnych przestrzeni nazw XML. na przykład dzięki czemu możesz kierować reklamy na: <foo:p> i <bar:p> bez zamieszania.

SMACSS obejmuje techniki pisania solidnych arkuszy CSS, które nie kolidują z innymi częściami strony. na przykład więc .title w kodzie HTML książki adresowej nie zostaje pomieszane z .title w liście HTML publikacji.


Dalsze szczegóły z spec:

UWAGA: HTML, atrybut xmlns ma absolutnie żadnego wpływu. To w zasadzie talizman. Dozwolone jest jedynie ułatwianie migracji do iz XHTML. Podczas analizy parsera HTML atrybut kończy się brakiem przestrzeni nazw, a nie przestrzenią nazw "http://www.w3.org/2000/xmlns/", jak atrybuty deklaracji przestrzeni nazw w XML-ie.

+0

nie tylko xml, ale także html – xiaoyi

+3

@ xiaoyi - HTML nie ma przestrzeni nazw. – Quentin

+0

HTML ma przestrzenie nazw. Podobnie jak przy użyciu embed svg i innych przypadków użycia. – xiaoyi

4

Przestrzenie nazw mają raczej paskudny składni w CSS, ponieważ „:” znaków nazw muszą być uciekł przez wiodącego backslashem do odróżnienia go od pseudo-klasy:

html\:img { 
    border: 2px solid black; 
} 
html\:a:visited html\:img { 
    border-color: grey; 
} 

to tylko naprawdę użyteczne podczas osadzania HTML w dokumencie XML. Podczas dodawania przestrzeni nazw HTML elementy z przestrzeni nazw HTML są poprawnie wyświetlane, tak jak pojawiałyby się w HTML, pozwalały na dostęp do funkcji, które nie zostały jeszcze dostarczone przez CSS.

<story xmlns:HTML="http://www.w3.org/Profiles/XHTML-transitional"> 
    ... 
    <restaurant> 
    <name>Red Apple Inn</name> 
    <logo> 
     <HTML:A href="javascript:alert('Visit the Red Apple Inn!')"> 
     <HTML:IMG src="red-apple.gif" height="50" width="200"/> 
     </HTML:A> 
    </logo> 
    ... 

W kontekście HTML5 nie mogę wymyślić żadnych przypadków, w których będzie to potrzebne. Jedyne miejsce, w którym dotychczas widziałem przestrzenie nazw w CSS, to domyślny CSS Webkita dla SVG lub MathML i używają innej reguły: @namespace.

Na przykład, jest to kod z WebKit/webkit/blob/master/Source/WebCore/css/mathml.css:

@namespace "http://www.w3.org/1998/Math/MathML"; 

math { 
    -webkit-line-box-contain: glyphs replaced; 
    text-indent: 0; 
    direction: ltr; 
} 
mtext { 
    line-height: 1.0; 
} 

... 

Jest to kod z WebKit/webkit/blob/master/Source/WebCore/css/svg.css:

@namespace "http://www.w3.org/2000/svg"; 
@namespace html "http://www.w3.org/1999/xhtml"; 

svg:not(:root), symbol, image, marker, pattern, foreignObject { 
    overflow: hidden 
} 

svg:root { 
    width: 100%; 
    height: 100% 
} 

text, foreignObject { 
    display: block 
} 

... 
Powiązane problemy