Media Query Nedir?
Kısa tanım
Media query, CSS'te belirli stillerin yalnızca cihaz veya tarayıcı ortamı bir koşulu sağladığında uygulanmasını sağlayan kuraldır. Koşul; viewport genişliği ve yüksekliği, ekran yönü, işaretçi türü ya da kullanıcının hareket azaltma ve karanlık tema gibi sistem tercihleri olabilir. Responsive tasarımın temel aracıdır ve @media kuralının yanı sıra HTML'deki media niteliğinde ve JavaScript'teki matchMedia() ile de kullanılır.
Diğer adları: @media, medya sorgusu, CSS media queries

Bir media query'nin parçaları
Her media query üç parçadan oluşabilir: isteğe bağlı bir medya türü (screen, print veya varsayılan all), parantez içinde yazılan medya özellikleri ve bunları bağlayan mantıksal operatörler (and, not, or, virgül). Eskiden kullanılan tv, handheld gibi türlerin çoğu artık kullanımdan kaldırılmış durumda.
/* Klasik yazım */
@media screen and (min-width: 48rem) and (max-width: 64rem) { … }
/* Aralık (range) sözdizimi: aynı koşul, daha okunaklı */
@media (48rem <= width <= 64rem) { … }
/* Baskı çıktısı için */
@media print {
nav, .cerez-bandi { display: none; }
}Aralık sözdizimi, min-/max- öneklerinin kafa karıştıran "dahil mi, değil mi" sorusunu ortadan kaldırır: <= sınırı kapsar, < kapsamaz. Güncel tarayıcıların tamamı bu yazımı 2023'ten beri destekliyor.
Ekran boyutunun ötesi: kullanıcı tercihleri
Media query'ler yalnızca genişlik ölçmek için değildir. İşletim sisteminde yapılan erişilebilirlik ve görünüm ayarlarını okuyabilen tek CSS aracıdır:
prefers-reduced-motion: Kullanıcı sistemde animasyonları azaltmayı seçmişsereducedöner. Vestibüler rahatsızlığı olan kişiler için büyük kayma, yakınlaştırma ve paralaks efektleri ciddi sorun yaratabilir.prefers-color-scheme: Açık veya koyu tema tercihi.prefers-contrast: Daha yüksek ya da daha düşük kontrast isteği.hovervepointer: Birincil giriş aracının üzerine gelme (hover) yapıp yapamadığı ve ne kadar hassas olduğu. Dokunmatik ekranda yalnızca hover ile açılan bir menü erişilemez kalır.
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}Bu tür sorgular web erişilebilirliği açısından küçük ama etkili bir adımdır. Hareket tercihi hakkında ayrıntılar MDN'de anlatılıyor.
CSS dışında media query
Aynı koşul dili HTML'de ve JavaScript'te de geçerlidir. <picture> içindeki <source media="(width >= 60rem)"> ile geniş ekranda farklı bir kırpım sunulabilir; bu, duyarlı görseller tekniğinin parçasıdır. <link rel="stylesheet" media="print"> baskı stilini ayrı tutar. JavaScript'te window.matchMedia("(prefers-color-scheme: dark)") bir koşulun o anki durumunu verir ve değişikliği dinlemeye izin verir.
Media query mi, container query mi?
| Soru | Doğru araç |
|---|---|
| Sayfa kaç sütun olsun, menü ne zaman daralsın? | Media query |
| Kullanıcı karanlık tema ya da az hareket istiyor mu? | Media query |
| Bu kart, yerleştirildiği alana göre nasıl dizilsin? | Container query |
Sık yapılan hatalar
- Cihaza göre breakpoint seçmek. "iPhone genişliği" gibi değerler her yıl değişir. Breakpoint'i içeriğin bozulmaya başladığı noktada koymak daha kalıcıdır.
- Viewport meta etiketini unutmak.
<meta name="viewport" content="width=device-width, initial-scale=1">yoksa mobil tarayıcı sayfayı geniş bir sanal pencerede çizer ve genişlik sorguları beklenen değeri görmez. Ayrıntı için viewport maddesine bakılabilir. - Masaüstünden başlayıp her şeyi geri almak.
max-widthsorgularıyla geniş düzeni küçük ekranda tek tek iptal etmek, stil dosyasını şişirir. Mobile-first yaklaşımda temel stil dar ekran içindir,min-widthsorguları yalnızca ekleme yapar. - Piksel yerine
em/remkullanmamak.emtabanlı breakpoint'ler, kullanıcı tarayıcıda yazı boyutunu büyüttüğünde düzenin de buna uyum sağlamasına yardım eder.

