CSS Media Query digunakan sebagai cara untuk mengubah tampilan dan perilaku sebuah website atau aplikasi berdasarkan serangkaian kondisi tertentu.
Teknik media query akan menerapkan custom style yang bisa kita tentukan hanya jika kondisi tertentu benar, misalnya kita ingin mengubah ukuran font hanya ketika lebar layar perangkat diatas 1000px, maka kita bisa melakukannya dengan
@media screen and (min-width: 1000px) {
/* custom style */
h1 {
font-size: 24px;
}
}
Properti CSS di atas akan diterapkan hanya pada layar perangkat yang memiliki lebar 1000 pixel atau lebih.
Kita juga bisa mengubah style pada element-element lainnya agar tetap terlihat sempurna ketika diakses melalui perangkat apapun, atau dengan kata lain website kita akan tampak responsif.
Cara tersebut lebih difungsikan pada konsep Responsive Design yaitu bagaimana membangun sebuah aplikasi web yang memiliki perilaku berbeda ketika dihadapkan pada kondisi tertentu, seperti ketika diakses melalui smartphone, tablet, desktop dan perangkat lainnya.
Kita bisa menuliskan CSS Media Query menggunakan @media
rule seperti berikut:
@media [media-type] and ([media-feature]) {
/* custom style */
element {
/* style */
}
}
PERHATIKAN!
dalam penulisan Media Query antara media-type dengan media-feature harus selalu dihubungkan dengan and
.
Kenapa? karena pada dasarnya @media
rule itu sendiri merupakan sebuah operator logika yang menyatakan bahwa "jika" media-type
dan media-feature
cocok, maka terapkan custom style.
Media type merupakan jenis media yang dijadikan sebuah target pada @media
rule.
Ada beberapa media type diantaranya:
screen
: media dengan layar seperti komputer, tablet, smartphone dll.print
: media yang memecah halaman menjadi dokumen untuk dicetak seperti printerspeech
: media yang membaca halaman dengan suara seperti screen readerall
: semua media (default)
Setelah menentukan Media type, ada Media feature yang memberi detail yang lebih spesifik untuk menentukan fitur pada media query.
height
: menentukan tinggi viewportwidth
: menentukan lebar viewportmin-height
: menentukan minimal tinggi viewportmin-width
: menentukan minimal lebar viewportmax-height
: menentukan maksimal tinggi viewportmax-width
: menentukan maksimal lebar viewport
Ada banyak sekali media feature yang bisa digunakan, tetapi dalam ranah Responsive Design hanya ada beberapa yang seringkali digunakan. Kamu bisa lihat disini untuk lengkapnya.
Ketika kita ingin membuat sebuah desain website yang mampu beradaptasi dengan beragam jenis perangkat, maka di sinilah cara yang bisa dilakukan oleh CSS Media Query.
Misal, kita punya properti CSS seperti berikut:
body {
width: 100%;
height: 100vh;
background-color: lightgreen;
margin: 0 auto;
}
Bagaimana cara mengubah value
width
hanya jika lebar layarnya 768px atau kurang?
Jika ingin melakukan hal ini, kita bisa menentukan screen
pada media type dan max-width
pada media feature
@media screen and (max-width: 768px) {
body {
/* Misal, kita ingin mengubah `width` ke 80% */
width: 80%;
}
}
Hasilnya, ketika lebar screen ≤ 768px, maka lebar element body akan menjadi 80%
Bagaimana cara mengubah value
height
hanya jika lebar layarnya 480px atau lebih?.
Kita bisa menggunakan min-width
untuk media feature, lalu ubah nilainya dengan 480px;
@media screen and (min-width: 480px) {
body {
/* Misal, kita ingin mengubah `height` ke 80vh */
height: 80vh;
}
}
Hasilnya, ketika lebar screen ≥ 480px, maka tinggi element body akan menjadi 80vh
Bagaimana cara mengubah value
background-color
jika lebar layarnya antara 480px hingga 768px.
Pada kasus ini, kita bisa menggunakan operator and
untuk menghubungkan 2 kondisi pada media feature, seperti menargetkan range lebar layar. Kemudian gunakan min-width
dan max-width
untuk kedua media feature tersebut.
/* Jika lebar screen adalah 480px s/d 768px, maka terapkan style berikut */
@media screen and (min-width: 480px) and (max-width: 768px) {
body {
/* Misal, kita mengubah `background-color` dengan Salmon */
background-color: salmon;
}
}
Hasilnya, warna background akan berubah ketika lebar screen berada di 480px s/d 768px. Selain daripada itu, warna background akan kembali seperti semula.
Selain mengubah value pada properti CSS, bisa juga untuk menyembunyikan (hidden) element tertentu, contohnya seperti:
@media screen and (max-width: 320px) {
body {
display: none;
}
}
Hasilnya, ketika lebar screen di bawah 320px, maka element body akan menghilang.
Kita tau bahwa ukuran layar dari berbagai perangkat tentu sangatlah bervariasi, kita tidak mungkin menerapkan style css untuk semua jenis perangkat yang ada.
Tetapi, ada beberapa Breakpoints tertentu yang biasanya menjadi 'patokan' agar lebih mudah dalam mendesain website yang responsif.
Xtra Small (xs) | Small (sm) | Medium (md) | Large (lg) | XtraLarge (xl) |
---|---|---|---|---|
< 557px | ≥ 557px | ≥ 768px | ≥ 1024px | ≥ 1280px |
Pada implementasinya, kita bisa gunakan teknik seperti berikut:
/* Xtra Small (xs) - Small Phone */
element {
/* styles */
}
element-2 {
/* styles */
}
/* Small screen (sm) - Phone */
@media screen and (min-width: 557px) {
/* Custom Styles */
element {
/* styles */
}
element-2 {
/* styles */
}
}
/* Medium screen (md) - Tablet */
@media screen and (min-width: 768px) {
/* Custom Styles */
element {
/* styles */
}
element-2 {
/* styles */
}
}
/* Large screen (lg) - Laptop */
@media screen and (min-width: 1024px) {
/* Custom Styles */
element {
/* styles */
}
element-2 {
/* styles */
}
}
/* Xtra Large screen (xl) - PC Monitor */
@media screen and (min-width: 1280px) {
/* Custom Styles */
element {
/* styles */
}
element-2 {
/* styles */
}
}
Teknik diatas merupakan cara untuk membuat desain website yang mendahulukan versi mobile sebelum ke versi desktop, atau istilah dalam Web Desain adalah Mobile First.