W nagłówku HTML mam to:
<head>
<title>Title</title>
<link href="styles.css" rel="stylesheet" type="text/css"/>
<link href="master.css" rel="stylesheet" type="text/css"/>
styles.css
to mój arkusz specyficzny dla strony. master.css
to arkusz, którego używam w każdym z moich projektów, aby zastąpić ustawienia domyślne przeglądarki. Który z tych arkuszy stylów ma pierwszeństwo? Przykład: pierwszy arkusz zawiera konkretne
body { margin:10px; }
I powiązane obramowania, ale druga zawiera moje resetowania
html, body:not(input="button") {
margin: 0px;
padding: 0px;
border: 0px;
}
Zasadniczo, czy element kaskadowy CSS działa tak samo pod względem odniesień do arkuszy stylów, jak w typowych funkcjach CSS? Czyli to ostatnia linia jest wyświetlana?
css
overriding
stylesheet
ian5v
źródło
źródło
body:not(input="button")
Nawiasem mówiąc, nie jest prawidłowym selektorem. Prawdopodobnie chciałeś to podzielić nabody, input:not([type="button"])
.master.css
powinien załadować się jako pierwszy, a potem łatwiej będzie go zmienić mistrzowskie style w twoimstyles.css
.Odpowiedzi:
Zasady kaskadowania reguł CSS są złożone - zamiast próbować je źle parafrazować, po prostu skieruję Cię do specyfikacji:
http://www.w3.org/TR/2011/REC-CSS2-20110607/cascade.html#cascade
Krótko mówiąc: bardziej szczegółowe zasady zastępują bardziej ogólne. Specyfika jest definiowana na podstawie liczby identyfikatorów, klas i nazw elementów, a także tego, czy
!important
użyto deklaracji. Jeśli istnieje wiele reguł o tym samym „poziomie szczegółowości”, wygrywa ta, która pojawi się jako ostatnia.źródło
!important
uczestniczy bezpośrednio w kaskadzie i nie ma nic wspólnego ze specyfiką. Specyfika jest związana z selektorami, podczas gdy!important
jest używana z deklaracjami właściwości. (Więc masz rację mówiąc, że zasady są skomplikowaneStosowany jest najbardziej specyficzny styl:
Jeśli wszystkie selektory mają tę samą specyfikę, używana jest najnowsza dekleracja:
W twoim przypadku
body:not([input="button"])
jest bardziej specyficzny, więc używane są jego style.źródło
Porządek ma znaczenie. Zostanie przyjęta ostatnia zadeklarowana wartość wielokrotnego wystąpienia. Zobacz ten sam, który opracowałem: http://jsfiddle.net/Wtk67/
Jeśli zmienisz kolejność
.test{}
, zobaczysz, że HTML przyjmuje wartość ostatniego zadeklarowanego w CSSźródło
Ostatnim ładowanym CSS jest MASTER, który nadpisze wszystkie css z tymi samymi ustawieniami css
Przykład:
reset.css
master.css
Dane wyjściowe dla znacznika h1 będą miały rozmiar czcionki: 30px;
źródło
.css
jest ładowany jako ostatni. Czy są stosowane w kolejności, w jakiej są ładowane, czy w kolejności, w jakiej zostały zdefiniowane?Spróbujmy uprościć regułę kaskadowania na przykładzie. Zasady odnoszą się bardziej do ogólnych.
Oto kod css i html;
Oto styl CSS
Oto wynik. Bez względu na kolejność plików stylów lub deklarację stylu,
id="important"
obowiązuje na końcu (zwróć uwagę naclass="deadline"
zadeklarowany jako ostatni, ale nie ma żadnego efektu).<article>
Element zawiera<aside>
element, jednak ostatni zadeklarował styl wejdą w życie, w tym przypadkuarticle h2 { .. }
na trzeci element h2.Oto wynik w IE11: (Za mało praw do publikowania obrazu) DarkBlue: Houston Chronicle News, DarkGreen: Najnowsze osiągnięcia w Twoim mieście, Purple: Houston Local Advertisement Section, Black: Następna sekcja
źródło
Zależy to zarówno od kolejności wczytywania, jak i specyfiki rzeczywistych reguł stosowanych w każdym stylu. Biorąc pod uwagę kontekst twojego pytania, chcesz najpierw załadować ogólny reset, a następnie konkretną stronę. Następnie, jeśli nadal nie widzisz zamierzonego efektu, musisz przyjrzeć się specyfice zaangażowanych selektorów, jak inni już zauważyli.
źródło
Tak, działa tak samo, jak gdyby były w jednym arkuszu, jednak:
Ładuj kolejność ma znaczenie!
W powyższym kodzie nie ma gwarancji, że
master.css
załaduje się późniejstyles.css
. W związku z tym, jeślimaster.css
zostanie szybko załadowany istyles.css
zajmie to trochę czasu,styles.css
stanie się drugim arkuszem stylów, a wszelkie reguły o tej samej specyficzności zmaster.css
zostaną nadpisane.Przed wdrożeniem najlepiej umieścić wszystkie reguły w jednym arkuszu (i zminimalizować).
źródło
master.css
i pozwalając nastyles.css
pełne załadowanie. Następnie pozwoliłemmaster.css
załadować. Styl „overlapping” byłmaster.css
nadal stosowany - a renderowanie zostało zablokowane do momentumaster.css
wczytania i przeanalizowania. Uwaga : próbowałemrel=preload
namaster.css' (no halting) and that apparently alters its _declaration_ order by hoisting it above
styles.css.Najlepszym sposobem jest maksymalne wykorzystanie klas. Mimo wszystko unikaj selektorów ID (#). Kiedy piszesz selektory z pojedynczymi klasami, dziedziczenie CSS jest o wiele łatwiejsze.
Aktualizacja: Przeczytaj więcej o specyfice CSS w tym artykule: https://css-tricks.com/specifics-on-css-specificity/
źródło
Podejrzewam na podstawie twojego pytania, że masz zduplikowane wybory, zestaw wzorcowy, który dotyczy wszystkich stron, i bardziej szczegółowy zestaw, który chcesz zastąpić wartości wzorcowe dla każdej strony. Jeśli tak jest, to Twoje zamówienie jest prawidłowe. Master jest ładowany jako pierwszy, a reguły w kolejnym pliku będą miały pierwszeństwo (jeśli są identyczne lub mają taką samą wagę). Bardzo zalecany opis wszystkich reguł znajduje się na tej stronie http://vanseodesign.com/css/css-specificity-inheritance-cascaade/ Kiedy zaczynałem z programowaniem front-end, ta strona wyjaśniła wiele pytań.
źródło
To kaskada określa pierwszeństwo deklaracji. Mogę polecić oficjalną specyfikację; ta część jest dobrze czytelna.
https://www.w3.org/TR/css-cascade-3/#cascading
Następujące elementy mają wpływ na sortowanie w malejącej kolejności według priorytetów.
Połączenie pochodzenia i ważności:
Transition
deklaracje!important
!important
!important
style
atrybutemAnimation
deklaracjestyle
atrybutemJeśli dwie deklaracje mają to samo pochodzenie i znaczenie, to przy obliczaniu punktacji w grę wchodzi specyfika, czyli to, jak jasno zdefiniowany jest element.
#x34y
).level
)li
):hover
wykluczający pseudoelement ( ):not
Na przykład selektor
main li + .red.red:not(:active) p > *
ma swoistość 24.Kolejność wygląd odgrywa jedynie rolę jeśli dwie definicje mają to samo pochodzenie, znaczenie i specyfikę. Późniejsze definicje poprzedzają wcześniejsze definicje w dokumencie (w tym import).
źródło
Uważam, że podczas wykonywania kodu jest on czytany od góry do dołu, co oznacza, że ostatni link CSS zastąpiłby podobne style w dowolnym arkuszu stylów nad nim.
Na przykład, jeśli utworzyłeś dwa arkusze stylów
w obu ustawisz kolor tła body na dwa różne kolory - priorytet będzie miał kolor body w style2.css.
Możesz uniknąć problemu z priorytetem stylizacji, używając
!IMPORTANT
wewnątrz stylu klasowego, który chciałbyś mieć priorytet, lub ewentualnie zmieniając<link>
kolejność.źródło