CSS'de "basamaklama" nın anlamı nedir?


92

CSS'de "Basamaklı" teriminin tam anlamı nedir? Farklı görüşler alıyorum, bu yüzden burada soruyorum. Bir örnek yardımcı olabilir.


15
Benim gibi bir şeyseniz, "Basamaklı", temel iş mantığınıza odaklanmak yerine, her şeyin "tam olarak doğru" görünmesini sağlamak için div genişliğinizi iki piksel artışıyla ayarlamak için harcayacağınız basamaklı zaman miktarını ifade eder. (Muhtemelen bunu cevabını birkaç negatifleri elde edersiniz, ama sadece o kadar doğrudur)
JohnMetta

Yanıtlar:


117

Bu bağlamda "Basamaklama", birden fazla stil sayfası bildirimi belirli bir HTML parçasına uygulanabileceğinden, hangi özel stil sayfası kuralının hangi HTML parçası için geçerli olduğunu belirlemenin bilinen bir yolu olması gerektiği anlamına gelir.

Kullanılan kural, daha genel bildirimlerden gerekli özel kurala doğru basamaklandırılarak seçilir. En spesifik beyan seçilir.


sınıf / kimlik ve düzen ne zaman devreye girer?
Daniel Springer

2
@AllDani kimlikleri sınıflardan daha özeldir. Bu yüzden, sınıf kuralının daha spesifik id kuralına göre kademeli olduğunu söyleyebilirsiniz. 2 kural aynı önceliğe sahipse (bir öğede çakışan kurallara sahip 2 sınıf gibi), css dosyanızda belirtilen sonuncusu öncelikli olur.
metatron

Öyleyse ID "A" diyorsa ve sınıf "B" diyorsa, sınıf sayfada daha sonra yer alsa bile ID (A) kazanır mı? IE Order yalnızca iki stilin aynı kesinliğe sahip olması durumunda devreye girer mi?
Daniel Springer

2
@DaniSpringer Evet, bu doğru. Kimlik seçici, CSS'deki en spesifik seçicilerden biridir. Gösteri için, "div.blubb: hover" gibi seçicilere karşı bile "kazanır". Yalnızca satır içi stillerin ve! Önemli kuralın daha belirginliği vardır.
marvhock

54

CSS öğretirken, öğrencilere her zaman "basamaklı stil sayfaları" nın " dövüş stil sayfaları" gibi bir anlama geldiğini söylüyorum .

Bir kural H3 etiketinizin kırmızı olduğunu söyler, başka bir kural onun yeşil olduğunu söyler - kurallar birbiriyle çelişir, kim kazanacak !? Stil sayfası ölüm maçı!

Tamam belki bu biraz abartı, ama kodlama yapmayan, programlamayan, çağlayan veya miras kavramından daha yeni başlayan insanlara çok daha uygun.

Elbette onlara stil sayfalarının birbiriyle savaşmasının bir sorun olmadığını, dilin bu şekilde tasarlandığını söylüyorum.


5
Bunun neden reddedildiğinden emin değilim. Yeni öğrenciler için basit bir açıklama gibi görünüyor.
Purus

18
Muhtemelen kimin ve neden kazanacağını açıklamadığı içindir.
Andreas

18
Soru hakkında kafanız karışmış görünüyor. "Özgünlük / kalıtım nedir" veya hangi kuralların uygulandığı vb. Değil, "Basamaklı ne ANLAMI?".
AmbroseChapel

5
Bunun eski bir gönderi olduğunu biliyorum, ama yine de: Bence stil sayfaları ve / veya CSS kuralları "dövüşmek" kötü bir örnek. Yeni öğrenenler için çok daha öğretici (kendi öğretim deneyimime göre), bir öncekini geçersiz kılan bir kuralın hiyerarşisini açıklamaktır. Diyelim ki, bir çalışan H3 etiketini kırmızıya boyar (1. kural), ardından onu geçersiz kılan ve yeşile boyamaya karar veren QA yöneticisine verir (2. kural). Ölüm maçı yok, sadece kurumsal hiyerarşi. CSS kuralları "bununla savaşmaz", daha önceki kararları geçersiz kılan sonraki kararlardan oluşan kesin olarak tanımlanmış bir hiyerarşik sistem aracılığıyla çalışır (kademeli olarak).
Frank van Wensveen

bu gerçekten iyi bir cevap lütfen daha fazla açıklayın! Basit bir örnek vererek kim kazanacak! @AmbroseChapel
eirenaios



4

Bunu dışarıdan içeriden düşünmelisiniz. Gövde etiketinde bulunan bir kuralınız varsa, her alt etiket boyunca "kademeli" olacaktır. Gövde içindeki herhangi bir etikete bir kural koyarsanız, bu kuralı benimser ve bu böyle devam eder. Bu nedenle, kural, gömülü bir etiketten bir kural tarafından kesintiye uğratılmadığı sürece tüm içerik boyunca kademeli olarak değişir.


Bu, neyin öncelikli olduğu anlamına gelmez. Belirsiz mi?
Daniel Springer

2

CSS işlemeyi bir şelalenin birkaç basamaklı olduğu gibi ele alabilirsiniz. İşte yukarıdan aşağıya sırayla şu kademeler: (Aşağıdakiler, daha yüksek olan aynı özelliği geçersiz kılabilir.)

  1. kullanıcı aracısı bildirimleri
  2. kullanıcı normal beyanları
  3. normal bildirimler yazar
  4. önemli bildirimler yazar
  5. önemli kullanıcı beyanları

Spesifikasyonda daha fazlasını görün

Basamaklı birden kökenleri doğru değeri seçmek. Ama sıralamadan farklı . Sadece sırayla olmayan bir şeyi sıralamamız gerekir. Ancak CSS'de bu kökenlerin önceliği sabittir. Ve bu nedenle sözde kod aşağıdaki gibi görünebilir:

  1. değer dizisini başlatmak;
  2. değerleri 1. başlangıç ​​noktasından uygulayın;
  3. 2. başlangıçtaki değerleri uygulayın, değer varsa geçersiz kılın;
  4. ...
  5. değerleri N. başlangıç ​​noktasından uygulayın, değerler mevcutsa geçersiz kılın;

Sözde koddan, birkaç kademeli bir şelaleye benzediğini görebilirsiniz.


2

Yardımcı olabilecek bir açıklama. İki stil sayfası eklerseniz ve her birinde aynı belirginliğe sahip bir kural varsa, son kazananları içeren bir kural vardır. IE, kademedeki sonuncu en fazla etkiye sahiptir.

(Bu, aynı sayfada iki kurala sahip olmanın bir varyasyonudur - diğer tüm şeyler eşitse sonuncusu kazanır.)

Örneğin, verilen

body {
    background:blue;
}

body {
    background:green;
}

arka plan yeşil olur.


1

Bu cevap, yeni başlayanlar içindir. Bu cevaba genel bir bakış istiyorsanız, lütfen ikinci cevabımı okuyun.

Basamaklama, farklı stil sayfalarını birleştirme ve belirli bir öğeye birden fazla kural uygulandığında farklı CSS kuralları ve bildirimleri arasındaki çatışmaları çözme işlemidir . Çünkü muhtemelen zaten bildiğiniz gibi, yazı tipi boyutu gibi belirli bir stil özelliği için bir bildirim birkaç stil sayfasında ve ayrıca tek bir stil sayfasında birkaç kez görünebilir.

Basamaklamayı anlamak için CSS ayrıştırma aşamasından başlamalısınız çünkü ayrıştırma aşamasında ilk adım çakışan CSS bildirimlerini çözmek ve ikinci adım son CSS değerlerini işlemektir.

Artık CSS farklı kaynaklardan da gelebilir. En yaygın olanı, biz geliştiricilerin yazdığı CSS'dir. Stil sayfalarımıza koyduğumuz bu bildirimlere yazar bildirimleri denir. Diğer bir kaynak, kullanıcıdan gelen CSS olan kullanıcı bildirimleri olabilir. Örneğin, kullanıcı tarayıcıdaki varsayılan yazı tipi boyutunu değiştirdiğinde bu kullanıcı CSS'sidir ve son olarak, ancak en önemlisi varsayılan tarayıcı bildirimleri vardır.

Örneğin, bir bağlantı için HTML'mize bir bağlantı etiketi koyarsak ve sonra onu hiç biçimlendirmezsek, genellikle mavi metinle ve altı çizili olarak oluşturulur. Bu, kullanıcı aracısı CSS olarak adlandırılır çünkü tarayıcı tarafından ayarlanır. Dolayısıyla, basamaklama, tüm bu farklı kaynaklardan gelen CSS bildirimlerini birleştirir, ancak birden fazla kural uygulandığında, basamaklama aslında çatışmaları nasıl çözer?

Yaptığı şey, önemine, seçici özgüllüğüne bakmak ve hangisinin öncelikli olduğunu belirlemek için birbiriyle çelişen bildirimlerin sırasını sağlamaktır ve işte bu nasıl çalışır. Öncelikle çağlayan, kaynağında nerede beyan edildiklerine bağlı olarak farklı öneme sahip çelişkili beyanlar vermekle başlar. En önemli bildirimler, önemli anahtar sözcük ile işaretlenmiş kullanıcı bildirimleridir.

İkinci en önemli bildirimler, önemli ile işaretlenmiş yazar bildirimleridir. Üçüncüsü, normal yazar bildirimleri, sonra normal kullanıcı bildirimleri ve son olarak en önemsiz olanlar, varsayılan tarayıcı bildirimleridir, bu da aslında tarayıcıdan varsayılan olarak gelen bu bildirimlerin üzerine kolayca yazabileceğimizi çok daha mantıklı hale getirir.

görüntü açıklamasını buraya girin

Şimdi çoğu zaman yazar stil sayfalarımızda önemli bir anahtar kelime olmadan bir dizi çelişen kural olacaktır. Aslında en yaygın senaryo budur ve bu durumda tüm beyanlar aynı öneme sahiptir. Şimdi, bu durumda ne olur? Durum böyleyse, kaskadın yaptığı şey, bildirim seçicilerinin özelliklerini hesaplamak ve karşılaştırmaktır ve bu şekilde çalışır.

görüntü açıklamasını buraya girin

Satır içi stiller en yüksek özgüllüğe ve ardından kimliklere, ardından sınıflara, sözde sınıflara ve öznitelik seçicilere ve son olarak en az belirli öğe ve sözde öğe seçiciye sahiptir. Dolayısıyla, son slaytta gördüğümüzle aynı öneme sahip çelişkili bildirimlerimiz olduğunda, seçici özgüllüğünü size az önce gösterdiğim önceliklere göre hesaplıyoruz, ama özellikleri küçük bir örnekle gerçekte nasıl hesapladığımızı görelim, bu her zaman en iyisidir.

görüntü açıklamasını buraya girin

Yukarıdaki örnekten, tüm bu bildirimler aynı öneme sahiptir çünkü hepsi yazar beyanlarıdır. Öyleyse, arka plan renginin mavi, yeşil, mor veya sarı olup olmayacağını öğrenmek için seçici özelliklerini hesaplayalım ve biz bunu böyle yapıyoruz. Özgünlük aslında sadece bir sayı değil, size daha önce gösterdiğim dört kategorinin her biri için bir sayıdır. Satır içi stiller, kimlikler, sınıflar, sözde öğeler ve öznitelikler ve son olarak öğeler ve bunların her biri için seçicideki oluşumların sayısını sayarız.

Yani burada birinci seçicide, elbette herhangi bir satır içi stilimiz yok, çünkü burada bir satır içi stil HTML'de yazılmalıdır, burada durum böyle değil, bu yüzden sıfırdır. Ayrıca burada kimliğimiz yok, bu yüzden yine sıfır, ancak bir sınıfımız var, düğme sınıfı. Yani sınıflar kategorisi için bir tane var ve son olarak, burada hiç eleman seçici yok, bu yüzden onun için de sıfır ve hepsi bu. Seçici özgüllüğü sıfır, sıfır, bir, sıfırdır.

Şimdi bunu diğerleriyle karşılaştıralım. Sonraki stil de satır içi stil değildir, bu nedenle ilk stil için sıfırdır. Şimdi burada aslında nav ID için bir ID seçicimiz var, yani bu ID için bir tane. Ayrıca sağa doğru açılan iki sınıfımız var, bu yüzden sınıflar kategorisi için bir iki ve son olarak, burada iki öğe seçici de var. Nav öğesi ve div öğesi, yani öğeler kategorisi için de iki tane olduğu anlamına gelir. Son olarak seçicinin özgüllüğü sıfır, bir, iki, iki, ki bu aslında oldukça özel bir seçicidir.

Üç numaralı seçici çok basit. Bu sadece bir eleman seçicidir ve dolayısıyla özgüllük sıfır, sıfır, sıfır, birdir.

Şimdi sonuncusu, dört numaralı seçici. İlk olarak yine nav kimliğine sahibiz, yani bu kimlik için bir tane. Daha sonra, bir sınıfımız, düğme sınıfımız ve ayrıca bir sözde sınıfımız var, bu da onu toplamda sınıflar kategorisi için iki yapıyor. Ayrıca bir öğe seçici olduğu için, nihai özgüllük sıfır, bir, iki, birdir.

Şimdi, seçicilerden hangisinin geçerli olduğunu bulmak için bu sayıları gerçekte nasıl kullanacağımızı öğrenelim. En spesifik kategori olan satır içi stillerden başlayarak soldan sağa sayılara bakmaya başlarız. Satır içi stiller için birine sahip bir seçici varsa, diğer tüm seçicilere karşı kazanır, çünkü bu en spesifik kategoridir. Pekala, burada durum böyle değil, o yüzden kimliklere geçelim. İki ve dördüncü seçicilerin burada bir tane olduğunu ve diğerlerinin sıfır olduğunu görüyoruz, bu yüzden sıfır olanların oyun dışı kaldığını, çünkü kimlikleri olan iki ve dördüncü seçicilerden daha az spesifik olduklarını görüyoruz.

Şimdi, her iki seçicinin de ID kategorisinde bir tane olduğu için, devam etmemiz ve sınıfları kontrol etmemiz gerekiyor. Her ikisinin de bu kategoride iki tane var ve aralarında hala bir bağ var ve son olarak, elemanlar kategorisinde, ikinci seçicide iki, seçici dörtte yalnızca bir tane var ve bu yüzden burada bir kazananımız var. İki numaralı seçici, hepsinin en spesifik seçicisidir ve bu nedenle düğmemize yeşil bir arka plan verir.34 Kazanan beyanın değeri, kademeli değer olarak adlandırılır çünkü bu, kademenin sonucudur.

Bu durumda, bir grup beyan edilmiş değerle başlıyoruz, mavi, yeşil, mor ve sarı bunlardan biri kazanır ve örneğimizde yeşil olan basamaklı değer olur.

Şimdi dördüncü sektörün de iki unsuru olduğunu hayal edin, o zaman hem iki hem de dört seçici aynı özgüllüğe sahip olur, doğru. Öyleyse bu durumda ne olacak ve size söz veriyorum neredeyse şimdi bitti, tamam. Bu noktada hala bir bağ varsa, o zaman kodda yazılan son CSS bildirimi geçerli olacaktır. Yine, her şey eşitse, tüm bildirim seçicileri aynı özgüllüğe sahipse, o zaman bu, seçilen öğeyi biçimlendirmek için kullanılacak olan son bildirimdir.


0

Stil sayfası şartnamesindeki uyuşmazlıkları çözmek için kullanılan bir işlemdir.

Bu, öncelikle CSS'de belirtilen önceliklere göre yapılan uyuşmazlık çözme sürecidir.


0

CSS, Basamaklı Stil Sayfası anlamına gelir. Doğası gereği, daha aşağıda basamaklı bir stil sayfası, daha üstteki eşdeğer stilleri geçersiz kılar (daha üstteki stiller daha spesifik olmadıkça). Bu nedenle, tasarımımızın tüm sürümleri için geçerli olan bir stil sayfasının başında temel stilleri belirleyebilir ve ardından belgenin ilerleyen kısımlarında medya sorguları ile ilgili bölümleri geçersiz kılabiliriz.


0

Basamaklama, adım adım dökmek veya adım adım eklemek anlamına gelir. Stil sayfaları, bir html öğesini şekillendirmek için kodlar içerir. Ve kodların stil sayfasında yazılma şekli, basamaklı moddadır. Ya da basitçe, stil sayfasındaki bir html sayfasının her html öğesi için katmanlar halinde arka arkaya kodlar, basamaklı stil sayfasını oluşturur.


0

Basamaklama, her stil kuralına ağırlık atayan bir algoritmadır. Birkaç kural geçerli olduğunda, en büyük ağırlığa sahip olan öncelik kazanır.


0

Aynı öğeye bir veya daha fazla stil uygulandığında, CSS, uygulanan iki stilin Özgüllüğünün gücünü değerlendiren ve kazananı, yani daha fazla ağırlığa sahip olan stil kuralı kazandıran basamaklama adı verilen bir dizi kuralı gerçekleştirir. İki kural varsa aynı ağırlık daha sonra uygulanan kural son kazanır.


0

Basamaklı ve Özgünlük bilmeniz gerekenler:

  1. Önemli ile işaretlenmiş CSS bildirimi en yüksek önceliğe sahiptir.

  2. Ancak son kaynak olarak yalnızca! Doğru özellikleri kullanmak daha iyidir. daha sürdürülebilir kod!

  3. Satır içi stillerin her zaman harici stil sayfalarındaki stillere göre önceliği olacaktır.

  4. 1 ID içeren bir seçici, 1000 sınıflı olandan daha spesifiktir.

  5. 1 sınıf içeren bir seçici, 1000 öğeli olandan daha belirgindir.

  6. Evrensel seçicinin * özgüllük değeri yoktur (0,0,0)

  7. Seçicilerin sırasından çok özgünlüğe güvenin.

  8. Ancak 3. taraf stil sayfalarını kullanırken sıraya güvenin - yazar stil sayfanızı her zaman en son koyun.


0

Bir HTML öğesine hangi CSS stillerinin uygulanacağını seçerken, özgünlük , stiller arasındaki çatışmaları gideren basamaklı bir kurallar kümesine göre genelliği geçersiz kılar :

  1. CSS olmadan, HTML tarayıcının varsayılan stillerine göre görüntülenecektir.
  2. CSS etiketi seçicileri (HTML etiketiyle eşleşen), tarayıcı varsayılanlarını geçersiz kılar.
  3. CSS sınıfı seçicileri (. İle) etiket referanslarını geçersiz kılar.
  4. CSS kimliği seçicileri (# ile) sınıf referanslarını geçersiz kılar.
  5. ÇizgideKimlik, sınıf ve etiket CSS'sini geçersiz kılan bir HTML etiketine kodlanmış CSS.
  6. Ekleme ! ÖnemliBir CSS stiline değeri diğer her şeyi geçersiz kılar.
  7. CSS seçicileri aynıysa, tarayıcı özelliklerini birleştirir. Ortaya çıkan CSS özellikleri çakışırsa, tarayıcı kodda daha sonra veya en son görünen özellik değerini seçer.

Daha spesifik bir etiket, sınıf ve / veya kimlik kombinasyonuyla eşleşen bir CSS seçici öncelikli olacaktır. Aşağıdaki örneklerden ilki, CSS'deki görünüm sıralarına bakılmaksızın ikinciye göre öncelikli olacaktır:

ol#identity li.firstname { color: red; }
#identity .firstname { color: blue; }

-2
CSS doc    
p{font-size: 12pt;}
p{font-size: 14pt;}

<p>My Headline<p>

p'yi 14pt yazı tipinde oluşturur çünkü gerçek öğeye "daha yakın" (harici stil sayfaları dosyanın üstünden dosyanın altına yüklenir). Bağlantılı bir stil sayfası kullanırsanız ve ardından harici CSS belgesine bağladıktan sonra belgenizin başına biraz CSS eklerseniz , "başlığın içinde" bildirimi kazanacaktır çünkü tanımlanan öğeye daha da yakındır. Bu yalnızca eşit ağırlıklı seçiciler için geçerlidir. Check out http://www.stuffandnonsense.co.uk/archives/css_specificity_wars.html verilen bir seçicinin ağırlığı iyi bir açıklama için.

Tüm bunlar, tüm pratik amaçlar için 'mirası' kademenin bir parçası olarak da düşünebilirsiniz. Nesneler, içeren öğelerden "kademeli" hale gelir.


Bu, verilen öğeye yönlendirilmese bile, stillerin madde arasına yerleştirildiği anlamına gelir. Takip edersem bu yanlış.
Daniel Springer

Görünüşe göre bu düzenlenmiş. Her halükarda, bunun soruyu nasıl yanıtladığını anlamıyorum.
Daniel Springer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.