CSS medya sorgusu çakışmasının kuralları nelerdir?
Çağlayan.
@media
kurallar kademeye şeffaftır, bu nedenle iki veya daha fazla @media
kural aynı anda eşleştiğinde, tarayıcı eşleşen tüm kurallarda stilleri uygulamalı ve kademeyi buna göre çözmelidir. 1
Destekleyen tüm tarayıcılarda tam olarak 20em ve 45em'de ne olacak?
Tam olarak 20em genişliğinde, birinci ve ikinci medya sorgunuzun her ikisi de eşleşecektir. Tarayıcılar stilleri hem @media
kurallara uygulayacak hem de buna göre basamaklandıracaklardır, bu nedenle geçersiz kılınması gereken çelişkili kurallar varsa, en son bildirilen kazanır (belirli seçicileri hesaba katarak !important
, vb.). Aynı şekilde, görüntü alanı tam olarak 45em genişliğinde olduğunda ikinci ve üçüncü medya sorgusu için.
Örnek kodunuzu göz önünde bulundurarak, bazı gerçek stil kuralları eklenmiş:
@media (max-width: 20em) {
.sidebar { display: none; }
}
@media (min-width: 20em) and (max-width: 45em) {
.sidebar { display: block; float: left; }
}
Tarayıcı görüntü alanı tam olarak 20em genişliğinde olduğunda, bu medya sorgularının her ikisi de doğru olarak dönecektir. Basamaklama ile display: block
geçersiz kılınır display: none
ve float: left
sınıftaki herhangi bir öğeye uygulanır .sidebar
.
Bunu, sanki medya sorguları orada değilmiş gibi, kuralları uygulamak olarak düşünebilirsiniz:
.sidebar { display: none; }
.sidebar { display: block; float: left; }
Bir tarayıcı iki veya daha fazla medya sorgusuyla eşleştiğinde kademenin nasıl gerçekleştiğine dair başka bir örnek bu diğer cevapta bulunabilir .
Bununla birlikte, her iki kuralda da çakışmayan bildirimleriniz varsa @media
, tüm bu kuralların geçerli olacağı konusunda uyarılmalıdır . Burada olan şey , her iki kuraldaki beyannamelerin birleşmesidir , @media
sadece ikincisinin birinciyi tamamen geçersiz kılması değil ...
Çakışmayı önlemek için medya sorgularını nasıl doğru bir şekilde aralıklandırırız?
Çakışmayı önlemek istiyorsanız, sadece birbirini dışlayan medya sorguları yazmanız yeterlidir.
min-
Ve max-
ön eklerinin "minimum kapsayıcı" ve "maksimum kapsayıcı" anlamına geldiğini unutmayın ; Bu araçlar (min-width: 20em)
ve (max-width: 20em)
hem tam 20em geniş değerinde bir görünüme eşleşir.
Görünüşe göre zaten bir örneğiniz var, bu da bizi son sorunuza getiriyor:
İnsanların kullandığını gördüm: 799px ve ardından 800px gibi şeyler, peki ya 799,5 piksel ekran genişliği? (Belli ki normal bir ekranda değil, retinada mı?)
Bundan tam olarak emin değilim; CSS'deki tüm piksel değerleri mantıksal piksellerdir ve bir görüntü alanı genişliği için kesirli bir piksel değeri bildirecek bir tarayıcı bulmakta zorlandım. Bazı iframe'leri denemeyi denedim, ancak hiçbir şey bulamadım.
İOS ikisinden biri sağlamak için tüm fraksiyonel piksel değerlerini yuvarlar benim deneylerden, Safari gibi görünüyor max-width: 799px
ve min-width: 800px
maç olacak viewport (görünüşte eski eşleşir) gerçekten 799.5px olsa bile.
1 Bunların hiçbiri ne Koşullu Kurallar modülünde ne de Basamaklama modülünde açıkça belirtilmese de (sonuncusu şu anda yeniden yazma için planlanmıştır), teknik özellik herhangi bir şeye stilleri uygulamayı söylediği için kademenin normal şekilde gerçekleşmesi ima edilir. ve @media
tarayıcı veya medyayla eşleşen tüm kurallar.