Mecha versi 2.6.3 sudah dirilis!

Membuat Agar Tinggi Kontainer Mengikuti Tinggi Latar Gambarnya yang Responsif/Adaptif

Tabel Konten
  1. Rasio Ukuran Tinggi Proporsional 
  2. Menambahkan Konten ke dalam Kontainer 
    1. HTML 
    2. CSS 
Problem in Fluid Container with Fluid Background Image

Saya agak kesulitan untuk menemukan istilah yang tepat untuk menyatakan “latar gambar yang ukurannya bisa menyesuaikan diri dengan kontainer setiap kali ukuran kontainer berubah”, jadi Saya sebut saja sebagai ‘responsif’ atau ‘adaptif’, meskipun istilah tersebut sebenarnya kurang tepat. Istilah fluid lebih tepat.

Ketika kita ingin membuat sebuah gambar menjadi fluid, kita bisa mengeset lebar gambar tersebut ke dalam satuan persen dan tinggi gambar sebagai auto untuk menjaga agar ukuran tingginya tetap proporsional:

img {
  width:100%;
  height:auto;
}

Lihat Demo

Bagaimana dengan latar gambar? Kita bisa menggunakan properti background-size dengan nilai cover atau 100% auto. Hanya saja, di sini masalahnya adalah kita tidak bisa membuat tinggi kontainer mengikuti tinggi latar gambar setiap kali lebar kontainer berubah:

div {
  background:transparent url('path/to/image.jpg') no-repeat 50% 0;
  background-size:100% auto;
  height:615px;
}

Lihat Demo

Rasio Ukuran Tinggi Proporsional 

Ada sebuah metode yang bisa digunakan untuk membuat tinggi kontainer gambar bisa mengikuti tinggi latar gambar yang ada di dalamnya (di belakangnya), yaitu dengan cara mengeset ukuran tinggi kontainer menjadi 0 dan menentukan nilai sebuah sisi padding vertikal dalam satuan persen untuk menciptakan ukuran tinggi kontainer palsu. Nilainya berupa hasil perbandingan antara tinggi gambar dengan lebar gambar dalam bentuk persen. Perhitungannya seperti ini:

Rasio = (Tinggi / Lebar * 100) + '%';

Atau jika diterjemahkan ke dalam bahasa yang sederhana adalah: “Tinggi proporsional X adalah sama dengan sekian persen dari lebarnya.”

Saya menggunakan gambar dengan ukuran lebar 800 piksel dan tinggi 615 piksel pada halaman demo, jadi:

Rasio Tinggi = (615 / 800 * 100) + '%';
Rasio Tinggi = 76.875%;
div {
  background:transparent url('path/to/image.jpg') no-repeat 50% 0;
  background-size:100% auto;
  height:0; /* Set tinggi kontainer menjadi `0` */
  padding-bottom:76.875%; /* Gunakan `padding` untuk menciptakan dimensi tinggi */
}

Lihat Demo

Catatan: Jika Anda telah menerapkan CSS Universal Box-Sizing, Saya sarankan Anda untuk menambahkan properti box-sizing dengan nilai content-box pada kontainer untuk mengembalikan logika box-model ke keadaan semula. Meskipun ketika Saya coba tanpa menambahkan properti itu sebenarnya tidak ada masalah. Ini cuma untuk memantapkan saja:

div {
  background:transparent url('path/to/image.jpg') no-repeat 50% 0;
  background-size:100% auto;
  height:0;
  padding-bottom:76.875%;
  box-sizing:content-box;
}

Menambahkan Konten ke dalam Kontainer 

Anda memerlukan sebuah elemen tambahan untuk diposisikan sebagai elemen absolute karena kontainer yang sekarang sudah tidak memiliki ruang lagi (tinggi kontainer sekarang adalah 0 piksel):

HTML 

<div class="container">
  <div class="container-content">Konten di sini…</div>
</div>

CSS 

.container {
  background:transparent url('path/to/image.jpg') no-repeat 50% 0;
  background-size:100% auto;
  height:0;
  padding-bottom:76.875%;
  box-sizing:content-box;
  position:relative;
}

.container-content {
  position:absolute;
  top:0;
  right:0;
  bottom:0;
  left:0;
  overflow:auto;
}

Lihat Demo

16 Komentar

Unknown

berarti bisa dong di terapkan pada bagian komentar, oke dah terima kasih mas..... mo di praktek in...

Rdk

ok mas, terima kasih tutorialnya ...

you

Ini juga bisa diterapkan buat img didalam posting blog kan mas. Saya terapkan dan berhasil.

Arlina

kalau saya biasa pakai ini

#sample img {background-size:cover;background-position:center center;background-attachment:fixed;}

David

Menurut saya yang responsiv adaptiv itu ga boleh content-box musti tetap border-box; Bagaimana jika element itu diset padding 9999px. Mungkin bakal horizontal scroll, kan udah nge-lawan judulnya yang bilang responsif adaptif

Taufik Nurrohman

Satuan piksel tidak memakai rasio, satuan piksel tidak adaptif, satuan piksel tidak fluid. Mungkin yang kamu maksud itu ada di kasus yang lain seperti: kolom responsif sama tinggi.

Randy

ulasan yang bagus bang, saya suka ketmu masalah begini btw klau misalnya lebarnya bukan 800 dan tingginya bukn 615 apa harus diganti lagi paddingnya? maksudnya apa harus dibuat media handle nya?

Unknown

pusing bang lihat kodenya...
maklum lagi belajar....

Arlina

ini solusi untuk image lightbox yang saya gunakan, makasih sudah berbagi

Anonim

wah ternyata begitu toh caranya, makasih Mas Taufik tutorialnya, sangat membantu \o/

Unknown

wah, kayaknya bagus juga untuk diterapkan.
terimakasih mas udah mau ngeshare tutor bermanfaat seperti ini.
salam kenal juga ya mas!! :D

Unknown

MenarikMas Tutorialnya sangat bermanfaat

Unknown

masih belum tertalu memamhami secara mendetail mas..

Unknown

makasih buat artikelnya sungguh bermanfaat saya masih belajarr

Unknown

makaih mas, izin belajar di blog ini. :)

Komentar telah ditutup.