Apakah ada cara untuk memiliki DIV anak di dalam wadah induk DIV yang lebih luas dari induknya. Anak DIV harus memiliki lebar yang sama dari viewport browser.
Lihat contoh di bawah ini:
DIV anak harus tetap sebagai anak dari div induk. Saya tahu saya dapat mengatur margin negatif sewenang-wenang pada div anak untuk membuatnya lebih luas tetapi saya tidak tahu bagaimana dasarnya membuatnya 100% lebar browser.
Saya tahu saya bisa melakukan ini:
.child-div{
margin-left: -100px;
margin-right: -100px;
}
Tetapi saya membutuhkan anak untuk memiliki lebar yang sama dengan browser yang dinamis.
Memperbarui
Terima kasih atas jawaban Anda, sepertinya jawaban terdekat sejauh ini adalah membuat posisi DIV anak: absolut, dan setel properti kiri dan kanan ke 0.
Masalah berikutnya yang saya miliki adalah bahwa induk memiliki posisi: relatif, yang berarti bahwa properti kiri dan kanan masih relatif terhadap div induk dan bukan browser, lihat contoh di sini: jsfiddle.net/v2Tja/2
Saya tidak dapat menghapus posisi relatif dari orang tua tanpa mengacaukan segalanya.
position: relative
? Apa yang Anda butuhkanposition: relative
? Saya kira yang saya tanyakan adalah: apa yang Anda coba lakukan?Jawaban:
Gunakan posisi absolut
sumber
position:fixed
. mengapa itu tidak berfungsi dengan baik?Berikut adalah solusi umum yang membuat elemen turunan dalam aliran dokumen:
Kami mengatur
width
elemen anak untuk mengisi seluruh lebar viewport, lalu kami membuatnya memenuhi tepi layar dengan memindahkannya keleft
jarak setengah viewport, minus 50% dari lebar elemen induk.Demo:
Dukungan browser untuk vw dan untuk calc () umumnya dapat dilihat sebagai IE9 dan yang lebih baru.
Catatan: Ini mengasumsikan model kotak diatur ke
border-box
. Tanpaborder-box
, Anda juga harus mengurangi bantalan dan batas, membuat solusi ini berantakan.Catatan: Sebaiknya sembunyikan limpahan horizontal wadah gulir Anda, karena browser tertentu dapat memilih untuk menampilkan bilah gulir horizontal meskipun tidak ada limpahan.
sumber
position: relative
orangtua!Saya telah mencari solusi untuk masalah ini sejak lama. Idealnya kita ingin memiliki anak lebih besar dari orang tua, tetapi tanpa mengetahui kendala dari orang tua sebelumnya.
Dan akhirnya saya menemukan jawaban umum yang brilian di sini . Menyalinnya kata demi kata:
sumber
90vw
. Juga, tampaknyamargin-right
tidak berpengaruh dalam hal apa pun.Berdasarkan saran asli saran Anda (pengaturan margin negatif), saya telah mencoba dan menghasilkan metode serupa menggunakan satuan persentase untuk lebar browser dinamis:
HTML
CSS:
Margin negatif akan membuat konten mengalir keluar dari DIV Induk. Oleh karena itu saya mengatur
padding: 0 100%;
untuk mendorong konten kembali ke batas asli DIV Chlid.Margin negatif juga akan membuat lebar total .child-div meluas dari viewport browser, menghasilkan gulir horizontal. Oleh karena itu kita perlu memotong lebar ekstrusi dengan menerapkan
overflow-x: hidden
ke DIV kakek-nenek (yang merupakan induk dari Div Induk):Ini JSfiddle
Saya mencoba Nils Kaspersson
left: calc(-50vw + 50%)
; itu bekerja dengan sangat baik di Chrome & FF (belum yakin tentang IE) sampai saya tahu browser Safari tidak melakukannya dengan benar. Semoga mereka memperbaikinya segera setelah saya benar-benar menyukai metode sederhana ini.Ini juga dapat menyelesaikan masalah Anda di mana elemen DIV Induk harus
position:relative
2 kelemahan dari metode penyelesaian masalah ini adalah:
Harap beri tahu saya jika ada masalah dengan metode ini;). Semoga ini bisa membantu.
sumber
Flexbox dapat digunakan untuk membuat anak lebih luas dari induknya dengan tiga baris CSS.
Hanya anak
display
,margin-left
danwidth
perlu diatur.margin-left
tergantung pada anakwidth
. Rumusnya adalah:Variabel CSS dapat digunakan untuk menghindari penghitungan margin kiri secara manual.
Demo # 1: Perhitungan manual
Demo # 2: Menggunakan variabel CSS
sumber
Saya menggunakan ini:
HTML
CSS
sumber
Anda dapat mencoba posisi: absolut. dan beri lebar dan tinggi, atas: 'sumbu y dari atas' dan kiri: 'sumbu x'
sumber
Saya punya masalah serupa. Konten elemen anak seharusnya tetap di elemen induk sementara latar belakang harus memperluas lebar viewport penuh.
Saya mengatasi masalah ini dengan membuat elemen turunan
position: relative
dan menambahkan elemen pseudo (:before
) ke dalamnyaposition: absolute; top: 0; bottom: 0; width: 4000px; left: -1000px;
. Elemen pseudo tetap berada di belakang anak yang sebenarnya sebagai elemen latar belakang semu. Ini berfungsi di semua browser (bahkan IE8 + dan Safari 6+ - tidak memiliki kemungkinan untuk menguji versi yang lebih lama).Contoh biola kecil: http://jsfiddle.net/vccv39j9/
sumber
overflow-x: hidden
.Menambahkan ke solusi Nils Kaspersson, saya memutuskan untuk lebar scrollbar vertikal juga. Saya menggunakan
16px
sebagai contoh, yang dikurangi dari lebar view-port. Ini akan menghindari bilah gulir horizontal muncul.sumber
16px
yang perlu Anda kurangi karena menyebabkan scrollbar horizontal adalah margin default / padding browser, alih-alih mengurangkannya, gunakan saja inihtml, body{ margin:0; padding:0 }
sehingga Anda tidak perlu membuat perhitungan tambahan untuk16px
Dengan asumsi orang tua memiliki lebar tetap, misalnya
#page { width: 1000px; }
dan berpusat#page { margin: auto; }
, Anda ingin anak tersebut sesuai dengan lebar viewport browser yang bisa Anda lakukan:sumber
Untuk membuat div anak selebar konten, coba ini:
sumber
sumber
Saya tahu ini sudah tua tetapi bagi siapa pun yang datang untuk jawaban ini Anda akan melakukannya seperti ini:
Overflow disembunyikan pada elemen yang mengandung elemen induk, seperti tubuh.
Berikan elemen anak Anda lebar lebih lebar dari halaman Anda, dan posisikan absolutnya hingga -100%.
Inilah sebuah contoh:
Juga ada JS Fiddle: http://jsfiddle.net/v2Tja/288/
sumber
Maka solusinya adalah sebagai berikut.
HTML
CSS
sumber
Saya mencoba beberapa solusi Anda. Yang ini :
sejauh ini yang terbaik, karena kita tidak perlu css tambahan untuk layar yang lebih kecil. Saya membuat codePen untuk menunjukkan hasilnya: Saya menggunakan div induk dengan gambar latar belakang, dan div div anak dengan konten dalam.
https://codepen.io/yuyazz/pen/BaoqBBq
sumber