2012-02-27 11 views
124

W nagłówku HTML, mam to:W jakiej kolejności zastępujesz arkusze stylów CSS?

<head> 
<title>Title</title> 
<link href="styles.css" rel="stylesheet" type="text/css"/> 
<link href="master.css" rel="stylesheet" type="text/css"/> 

styles.css jest mój arkusz strona specyficzne. master.css to arkusz, którego używam na każdym z moich projektów, aby zastąpić domyślne ustawienia przeglądarki. Który z tych arkuszy stylów ma pierwszeństwo? Przykład: pierwszy arkusz zawiera szczegółowe

body { margin:10px; } 

i związane z nimi granice, ale drugi zawiera moje resetuje z

html, body:not(input="button") { 
    margin: 0px; 
    padding: 0px; 
    border: 0px; 
} 

w istocie, czy element kaskadowy pracy CSS to samo pod względem referencji stylesheet jak działa w typowych funkcjach CSS? Czy oznacza to, że ostatnia linia jest wyświetlana?

+0

Właśnie zdałem sobie sprawę, że będzie lepiej pasował do webmasterów. Czy byłoby lepsze miejsce na opublikowanie tego? – ian5v

+8

Tutaj jest dobrze. – Blender

+4

'body: not (input =" button ")' nie jest prawidłowym selektorem przy okazji. Prawdopodobnie chciałeś podzielić go na 'body, input: not ([type =" button "])'. – BoltClock

Odpowiedz

130

Zasady reguły CSS kaskadowe są złożone - zamiast próbować parafrazując je źle, ja po prostu odsyłam do specyfikacji:

http://www.w3.org/TR/2011/REC-CSS2-20110607/cascade.html#cascade

W skrócie: bardziej szczegółowe przepisy zastępują bardziej ogólnego te. Swoistość definiowana jest na podstawie liczby identyfikatorów, klas i nazw elementów, a także tego, czy użyto deklaracji !important. Gdy istnieje wiele reguł o tym samym poziomie "specyficzności", to, który z nich pojawia się jako ostatni, wygrywa.

+1

Nie ma konkretnej reguły dotyczącej kolejności ładowania arkuszy stylów? Rozumiem, jak CSS wyświetla się pod względem specyficzności, ale wtedy założę, że mój arkusz główny zostanie załadowany, chyba że zostanie przesłonięty. – ian5v

+0

Ja * wierzę *, że arkusze stylów są traktowane tak, jakby były ładowane w kolejności, w jakiej są połączone w HTML (nawet jeśli faktycznie wczytują się w systemie), ale nie jestem pewien. – duskwuff

+0

Coś, co przeczytałem wcześniej, sugerowało coś przeciwnego, ale nie mogę powiedzieć tego na pewno. – ian5v

25

najbardziej specyficzny styl jest stosowany:

div#foo { 
    color: blue; /* This one is applied to <div id="foo"></div> */ 
} 

div { 
    color: red; 
} 

Jeśli wszystkie selektorów mają taką samą specyficzność, to najnowsza decleration jest używany:

div { 
    color: red; 
} 

div { 
    color: blue; /* This one is applied to <div id="foo"></div> */ 
} 

w przypadku, body:not([input="button"]) więcej specyficzne, więc używane są jego style.

+1

Zobacz mój komentarz na pytanie dotyczące tego ostatniego selektora. – BoltClock

+1

Reguła specyficzności utrudni, gdy będziemy musieli nadpisać nie edytowalny arkusz stylów! – KeepMove

6

To zależy od kolejności ładowania i specyfiki rzeczywistych reguł stosowanych do każdego stylu. Biorąc pod uwagę kontekst twojego pytania, najpierw chcesz załadować ogólny reset, a następnie stronę. Jeśli nadal nie widzisz zamierzonego efektu, musisz przyjrzeć się specyfice zaangażowanych selektorów, o czym inni już wspomnieli.

21

Zamówienie ma znaczenie. Ostatnia deklarowana wartość wielokrotnego wystąpienia zostanie podjęta. Proszę zobaczyć tę samą jedną wypracowałem: http://jsfiddle.net/Wtk67/

<div class="test">Hello World!!</div> 


<style> 
    .test{ 
     color:blue; 
    } 

    .test{ 
     color:red; 
    } 
</style> 

Jeśli zamienić kolejność od .test{}, następnie można zobaczyć HTML przyjmuje wartość ostatniego zgłoszonemu CSS

+2

Powinieneś więc dodać najbardziej precyzyjny CSS na końcu. –

6

Spróbujmy uproszczenie kaskadowy rządzić na przykładzie. Zasady są bardziej szczegółowe dla ogólnych.

  1. Obowiązuje zasada jeden identyfikator pierwszy (na klasy i/lub elementów niezależnie od kolejności)
  2. artykule dotyczą zajęcia nad elementami, niezależnie od kolejności
  3. W przypadku braku klasy lub id, stosuje te generycznych
  4. Powoduje zastosowanie ostatniego stylu w kolejności (kolejność deklaracji na podstawie kolejności ładowania pliku) dla tej samej grupy/poziomu.

Oto kod css i html;

<style> 
    h2{ 
     color:darkblue; 
    } 
    #important{ 
     color:darkgreen; 
    } 
    .headline { 
     color:red; 
    } 
    article { 
     color:black; 
     font-style:italic; 
    } 
    aside h2 { 
     font-style:italic; 
     color:darkorange; 
    } 
    article h2 { 
     font-style: normal; 
     color: purple; 
    } 
</style> 

Oto stylu CSS

<body> 
<section> 
    <div> 
     <h2>Houston Chronicle News</h2> 
     <article> 
      <h2 class="headline" id="important">Latest Developments in your city</h2> 
      <aside> 
       <h2>Houston Local Advertisement Section</h2> 
      </aside> 
     </article> 
    </div> 

    <p>Next section</p> 
</section> 

Oto wynik. Bez względu na kolejność plików stylu lub deklarację stylu, na końcu obowiązuje numer id="important" (uwaga na ostatnią deklarację class="deadline", ale nie ma ona żadnego efektu).

Element <article> zawiera <aside> elementu, jednak ostatni zadeklarował stylu wejdą w życie, w tym przypadku article h2 { .. } na trzeci element h2.

Oto wynik na IE11: (Nie ma wystarczającej liczby praw do publikowania wizerunku) DARKBlue: Houston Chronicle Aktualności, DarkGreen: Najnowsze osiągnięcia w Twoim mieście, fioletowy: Houston lokalny Reklama Sekcji Czarny: Następny rozdział

enter image description here

7

ostatni ładowanie CSS jest panem, który zastąpi wszystkie css z tymi samymi ustawieniami css

Przykład:

<head> 
    <link rel="stylesheet" type="text/css" href="css/reset.css"> 
    <link rel="stylesheet" type="text/css" href="css/master.css"> 
</head> 

reset.css

h1 { 
    font-size: 20px; 
} 

master.css

h1 { 
    font-size: 30px; 
} 

wyjście dla znacznika h1 będzie czcionki, rozmiar: 30px;

+1

Witam. W moim przypadku pierwszy zdefiniowany ".css" jest wczytany jako ostatni. Czy są one stosowane w kolejności, w jakiej są ładowane lub w kolejności, w jakiej zostały zdefiniowane? –

0

Najlepszym sposobem jest korzystanie z zajęć w jak największym stopniu. W każdym razie unikaj selektorów ID (#). Podczas pisania selektorów za pomocą tylko jednej klasy, dziedziczenie CSS jest łatwiejsze do naśladowania.

Update: Więcej o CSS swoistością w tym artykule: https://css-tricks.com/specifics-on-css-specificity/

+0

Interesująca uwaga, ale jest to raczej komentarz niż odpowiedź ... – AFract

+0

To jest świetny artykuł o specyfice CSS: https://css-tricks.com/specifics-on-css-specificity/ –

0

podejrzewam ze swoim pytaniu, że masz zduplikowane pozycje, zestaw nadrzędnego, który odnosi się do wszystkich stron, a bardziej konkretnego zestawu, który chcesz przesłonić wartości wzorcowe dla każdej pojedynczej strony. W takim przypadku twoje zamówienie jest poprawne. Master jest ładowany jako pierwszy, a reguły w kolejnym pliku mają pierwszeństwo (jeśli są identyczne lub mają taką samą wagę). Istnieje wysoce zalecany opis wszystkich zasad na tej stronie internetowej. http://vanseodesign.com/css/css-specificity-inheritance-cascaade/ Kiedy zacząłem z rozwojem frontowym, strona ta wyjaśniła wiele pytań.

0

Tak, to działa tak samo, jak gdyby były w jednym arkuszu, jednak: Sprawy

obciążenia zamówienie!

<link href="styles.css" rel="stylesheet" type="text/css"/> 
<link href="master.css" rel="stylesheet" type="text/css"/> 

W powyższym kodzie, nie ma gwarancji, że master.css załaduje po styles.css. Dlatego, jeśli master.css zostanie załadowany szybko, a styles.css chwilę potrwa, styles.css stanie się drugim arkuszem stylów, a wszelkie reguły o tej samej specyfice od master.css zostaną nadpisane.

Najlepiej umieścić wszystkie swoje reguły w jednym arkuszu (i minąć) przed wdrożeniem.

Powiązane problemy