Medya sorguları

Tasarımcılar, tasarımlarını kullanıcılara uygun olacak şekilde ayarlayabilir. Bunun en net örneği, kullanıcının cihazının form faktörüdür (cihazın genişliği, cihaz en boy oranı vb.). Tasarımcılar, medya sorgularını kullanarak bu farklı form faktörlerine yanıt verebilir.

Medya sorguları, @media anahtar kelimesiyle (CSS at-kuralı) başlatılır ve çeşitli kullanım alanları için kullanılabilir.

Farklı çıkış türlerini hedefleme

Web siteleri genellikle ekranlarda gösterilir ancak CSS, web sitelerine diğer çıkışlar için stil vermek amacıyla da kullanılabilir. Web sayfalarınızın ekranda bir şekilde, yazdırıldığında ise farklı görünmesini isteyebilirsiniz. Medya türlerini sorgulayarak bunu yapabilirsiniz.

Bu örnekte arka plan rengi gri olarak ayarlanmıştır. Ancak sayfa basılı olacaksa arka plan rengi şeffaf olmalıdır. Bu sayede kullanıcının yazıcı mürekkebi tasarrufu sağlanır.

body {
  color: black;
  background-color: grey;
}

@media print {
  body {
    background-color: transparent;
  }
}

Stil sayfanızda @media at-kuralı bu şekilde kullanabilir veya ayrı bir stil sayfası oluşturup link öğesinde media özelliğini kullanabilirsiniz:

<link rel="stylesheet" href="global.css">
<link rel="stylesheet" href="print.css" media="print">

CSS'niz için herhangi bir medya türü belirtmezseniz otomatik olarak all medya türü değeri olur. Bu iki CSS bloğu eşdeğerdir:

body {
  color: black;
  background-color: white;
}
@media all {
   body {
     color: black;
     background-color: white;
   }
}

Aşağıdaki iki HTML satırı da eşdeğerdir:

<link rel="stylesheet" href="global.css">
<link rel="stylesheet" href="global.css" media="all">

Sorgu koşulları

Medya türlerine koşul ekleyebilirsiniz. Bunlara medya sorguları denir. CSS yalnızca medya türü eşleştiğinde ve koşul da doğru olduğunda uygulanır. Bu koşullara medya özellikleri denir.

Medya sorgularının söz dizimi şu şekildedir:

@media type and (feature)

Stilleriniz ayrı bir stil dosyasındaysa link öğesinde medya sorgularını kullanabilirsiniz:

<link rel="stylesheet" href="specific.css" media="type and (feature)">

Tarayıcı penceresinin yatay modda (görüntü alanı genişliği yüksekliğinden büyük) veya dikey modda (görüntü alanı yüksekliği genişliğinden büyük) olmasına bağlı olarak farklı stiller uygulamak istediğinizi varsayalım. Bunu test etmek için kullanabileceğiniz orientation adlı bir medya özelliği vardır:

@media all and (orientation: landscape) {
   // Styles for landscape mode.
}
@media all and (orientation: portrait) {
   // Styles for portrait mode.
}

Ayrı stil sayfaları kullanmayı tercih ederseniz:

<link rel="stylesheet" href="landscape.css" media="all and (orientation: landscape)">
<link rel="stylesheet" href="portrait.css" media="all and (orientation: portrait)">

Bu durumda medya türü all'tür. Varsayılan değer olduğu için isterseniz bu değeri atlayabilirsiniz:

@media (orientation: landscape) {
   // Styles for landscape mode.
}
@media (orientation: portrait) {
   // Styles for portrait mode.
}

Ayrı stil sayfaları da kullanabilirsiniz:

<link rel="stylesheet" href="landscape.css" media="(orientation: landscape)">
<link rel="stylesheet" href="portrait.css" media="(orientation: portrait)">

print gibi farklı medya türleri için ayrı stil sayfaları kullanmak uygun olsa da her medya sorgusu için ayrı bir stil sayfası kullanmak muhtemelen iyi bir fikir değildir. Bunun yerine @media at-rules kullanın.

Stilleri görüntü alanı boyutuna göre ayarlama

Duyarlı tasarım için en kullanışlı medya özelliklerinden biri, tarayıcı görüntü alanının boyutlarını içerir. Tarayıcı penceresi belirli bir genişlikten daha geniş olduğunda stilleri uygulamak için min-width öğesini kullanın.

@media (min-width: 400px) {
  // Styles for viewports wider than 400 pixels.
}

Belirli bir genişliğin altındaki stilleri uygulamak için max-width medya özelliğini kullanın:

@media (max-width: 400px) {
  // Styles for viewports narrower than 400 pixels.
}

Medya sorgularınızda herhangi bir CSS uzunluk birimini kullanabilirsiniz. İçeriğiniz çoğunlukla görsel tabanlıysa pikseller en uygun seçenek olabilir. İçeriğiniz çoğunlukla metin tabanlıysa em veya ch gibi metin boyutuna dayalı bir göreceli birim kullanmak daha mantıklı olabilir:

@media (min-width: 25em) {
  // Styles for viewports wider than 25em.
}

Birden fazla koşul uygulamak için medya sorgularını da birleştirebilirsiniz. Medya sorgularınızı birleştirmek için and kelimesini kullanın:

@media (min-width: 50em) and (max-width: 60em) {
  // Styles for viewports wider than 50em and narrower than 60em.
}

İçeriğe göre ara verme noktalarını seçme

Bir medya özelliği koşulunun doğru olduğu noktaya kesme noktası denir. Popüler cihaz boyutları her teknoloji sürüm döngüsünde değiştiğinden, kesme noktalarınızı popüler cihaz boyutlarına göre değil, içeriğinize göre seçmeniz önerilir.

Bu örnekte, 50em metin satırlarının rahatsız edici şekilde uzunlaştığı noktadır. Bu nedenle, arayüzü daha okunaklı hale getirmek için bir kesme noktası oluşturulur. column-count özelliği kullanılarak metin, bu noktadan itibaren iki sütuna bölünür.

@media (min-width: 50em) {
  article {
    column-count: 2;
  }
}

Kombinasyonlar

Yalnızca genişliğe değil, görüntü alanının yüksekliğine göre medya sorguları kullanabilirsiniz. Bu, "ekranın üst kısmı"ndaki arayüz içeriğini optimize etmek için yararlı olabilir. Önceki örnekte, okuyucular geniş ancak kısa bir tarayıcı penceresi kullanıyorsa ikinci sütunun üst kısmına ulaşmak için bir sütun aşağı, ardından tekrar yukarı kaydırmaları gerekir. Sütunları yalnızca görüntü alanı hem yeterince geniş hem de yeterince yüksek olduğunda uygulamak daha güvenlidir.

Medya sorgularını, stillerin yalnızca tüm koşullar doğru olduğunda geçerli olacak şekilde birleştirebilirsiniz. Bu örnekte, sütun stillerinin uygulanabilmesi için görüntü alanı en az 50em genişliğinde ve 30em yüksekliğinde olmalıdır. Bu durma noktaları, içerik miktarına göre seçilmiştir.

@media (min-width: 50em) and (min-height: 30em) {
  article {
    column-count: 2;
  }
}

Bu örneklerde, tasarımları kullanıcının cihazının form faktörüne uyarlamak için medya sorgularının nasıl kullanılabileceği gösterilmektedir ancak bu örnekler, olasılıkların sadece bir kısmını göstermektedir. Medya sorguları, genişlik ve yüksekliğin çok ötesine geçerek erişilebilirlik özellikleri ve tema renkleri için kullanıcı tercihlerine erişebilir. Düzen ayarlamaları yapmak için medya sorgularını kullanmak, bu özelliklerin ve daha fazlasının temelini oluşturan duyarlı tasarıma mükemmel bir başlangıçtır.

Öğrendiklerinizi test etme

Duyarlı medya sorguları hakkındaki bilginizi test edin.

Medya sorguları yalnızca ekran boyutu için mi var?

true
Tekrar deneyin. Baskı, koyu ve açık sistem tercihi gibi birçok şey için medya sorguları.
yanlış
🎉

Web içeriğinin tüketildiği veya görüntülendiği tek yer ekranlar mı?

true
Tekrar deneyin. Bir web sitesi kağıda basılabilir, arama motoru örümcekleri tarafından taranabilir, ekran okuyucu teknolojileri tarafından sesli olarak okunabilir veya hatta bir asistan aracılığıyla bot'lar tarafından kullanıcılara okunabilir.
yanlış
🎉

Varsayılan medya türü nedir?

screen
Tekrar deneyin. screen varsayılan tür değildir.
none
Tekrar deneyin. none geçerli bir medya türü değil.
all
🎉
some
Tekrar deneyin. some geçerli bir medya türü değil.
landscape
Tekrar deneyin. landscape geçerli bir medya türü değil.

Tarayıcının mobil cihazlarda bir tasarımı ölçeklendirmesini önlemek için neyi kullanırsınız?

width: 100%
Tekrar deneyin.
font-size: 200%
Tekrar deneyin.
<meta name="viewport" content="width=device-width, initial-scale=1">
🎉
Medya sorguları
Tekrar deneyin.
HTML5
Tekrar deneyin.

Tarayıcı penceresi 720px'nin üstünde olduğunda hangi medya sorgusunun geçerli olacağı.

@media (width: 720px)
Tekrar deneyin. Bu medya sorgusu yalnızca tarayıcı penceresi 720px'e eşit olduğunda geçerlidir.
@media (max-width: 720px)
Tekrar deneyin. Bu medya sorgusu, tarayıcı penceresi 720px'ün altında olduğunda kullanılır.
@media (min-width: 720px)
🎉 Tarayıcı penceresi en az 720px olduğu için bunu okuyabilirsiniz.
@media (clamp-width: 720px)
Tekrar deneyin. clamp-width, geçerli bir medya sorgusu özellik koşulu değil.