Saya mencoba mencari tahu mengapa salah satu kelas css saya tampaknya menimpa yang lain (dan bukan sebaliknya)
Di sini saya memiliki dua kelas css
.smallbox {
background-color: white;
height: 75px;
width: 150px;
font-size:20px;
box-shadow: 0 0 10px #ccc;
font-family: inherit;
}
.smallbox-paysummary {
@extend .smallbox;
font-size:10px;
}
dan dalam pandangan saya, saya menelepon
<pre class = "span12 pre-scrollable smallbox-paysummary smallbox ">
Font (Elemen yang tumpang tindih) muncul sebagai 10px, bukan 20 - dapatkah seseorang menjelaskan mengapa hal ini terjadi?
@extend .smallbox;
, yang terlihat seperti cSS non-standar.@extend
- jika itu melakukan apa yang saya pikirkan - dan menggunakan kedua penyeleksi pada elemen yang sama..smallbox-paysummary
), dan secara opsional membuat deklarasi CSS lebih jelas spesifik (tanpa bergantung pada urutan tampilan dalam file CSS) dengan menggunakan.smallbox.smallbox-paysummary { font-size: 10px; }
.smallbox-paysummary
memiliki font yang lebih kecil, mengapa Anda membuatnya lebih kecil?Jawaban:
Ada beberapa aturan (diterapkan dalam urutan ini):
!important
selalu diutamakan.Dalam kasus Anda, aturan 3 yang berlaku.
Kekhususan untuk penyeleksi tunggal dari yang tertinggi hingga terendah:
#main
pilih<div id="main">
).myclass
), penyeleksi atribut (ex .:[href=^https:]
) dan pseudo-kelas (ex .::hover
)div
) dan pseudo-elemen (ex .:::before
)Untuk membandingkan kekhususan dua selektor gabungan, bandingkan jumlah kemunculan selektor tunggal dari masing-masing kelompok kekhususan di atas.
Contoh: bandingkan
#nav ul li a:hover
dengan#nav ul li.active a::after
#nav
):hover
dan.active
)ul li a
) untuk yang pertama dan 4 untuk yang kedua (ul li a ::after
), jadi pemilih gabungan kedua lebih spesifik.Artikel bagus tentang kekhususan pemilih css .
sumber
:hover
bukanlah pemilih kelas , tetapi pemilih kelas semu .Berikut adalah kompilasi urutan gaya CSS dalam diagram, di mana aturan CSS memiliki prioritas lebih tinggi dan lebih diutamakan daripada yang lainnya:
Penafian : Saya dan tim saya mengerjakan bagian ini bersama-sama dengan sebuah posting blog ( https://vecta.io/blog/definitive-guide-to-css-styling-order ) yang menurut saya akan berguna untuk semua front-end pengembang.
sumber
Apa yang kita lihat di sini disebut kekhususan seperti yang dinyatakan oleh Mozilla :
Saya suka penjelasan 0-0-0 di https://specifishity.com :
Gambaran
!important
instruksi yang cukup deskriptif ! Namun terkadang itu satu-satunya cara untuk menggantistyle
atribut inline . Jadi, praktik terbaik adalah mencoba menghindari keduanya.sumber
Pertama-tama, berdasarkan
@extend
arahan Anda , sepertinya Anda tidak menggunakan CSS murni, tetapi preprocessor seperti SASS os Stylus.Sekarang, ketika kita berbicara tentang "urutan prioritas" di CSS, ada aturan umum yang terlibat: aturan apa pun yang ditetapkan setelah aturan lain (dengan cara top-down) diterapkan. Dalam kasus Anda, hanya dengan menentukan
.smallbox
setelah.smallbox-paysummary
Anda akan dapat mengubah prioritas aturan Anda.Namun, jika Anda ingin melangkah lebih jauh, saya sarankan membaca ini: Spesifikasi CSS cascade W3C . Anda akan menemukan bahwa presedensi aturan didasarkan pada:
sumber
AS adalah keadaan di W3: W3 Cascade CSS
Orden bahwa style sheet berbeda diterapkan adalah sebagai berikut (kutipan dari bagian berjenjang W3):
deklarasi agen pengguna
deklarasi normal pengguna
penulis deklarasi normal
penulis deklarasi penting
Informasi lebih lanjut tentang ini di dokumen W3 yang dirujuk
sumber
Urutan kemunculan kelas dalam elemen html tidak menjadi masalah, yang penting adalah urutan munculnya blok di style sheet.
Dalam kasus Anda
.smallbox-paysummary
ditentukan setelah.smallbox
itu diutamakan 10px.sumber
Css sebaris (atribut gaya html) menggantikan aturan css dalam tag gaya dan file css
Pemilih yang lebih spesifik lebih diutamakan daripada yang kurang spesifik.
Aturan yang muncul nanti dalam kode akan menggantikan aturan sebelumnya jika keduanya memiliki kekhususan yang sama.
sumber
Yang juga penting untuk diperhatikan adalah ketika Anda memiliki dua gaya pada elemen HTML dengan prioritas yang sama, browser akan mendahulukan gaya yang ditulis ke DOM terakhir ... jadi jika di DOM:
... lebar div akan menjadi 50px
sumber