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

  • obatherbalalami

    thanks buat tuts2nya :p

  • 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.