Bagaimana Anda membuat elemen diposisikan mutlak menghormati padding induknya? Saya ingin div bagian dalam merentangkan lebar induknya dan diletakkan di bagian bawah induknya, pada dasarnya footer. Tetapi anak harus menghormati bantalan orang tua dan itu tidak melakukan itu. Anak itu ditekan tepat ke tepi orangtua.
Jadi saya menginginkan ini:
tapi saya mendapatkan ini:
<html>
<body>
<div style="background-color: blue; padding: 10px; position: relative; height: 100px;">
<div style="background-color: gray; position: absolute; left: 0px; right: 0px; bottom: 0px;">css sux</div>
</div>
</body>
</html>
Saya dapat mewujudkannya dengan margin di sekitar div batin, tetapi saya lebih suka tidak harus menambahkan itu.
css
padding
css-position
d512
sumber
sumber
style="background-color: gray; position: absolute; left: 10px; right: 10px; bottom: 10px;"
?left:
danright:
pada anak (posisi absolut), masalah Anda terpecahkan. Saya menambahkan ini b / c itu jawaban orang lain dengan masalah yang sama cenderung mencari.Jawaban:
Pertama, mari kita lihat mengapa ini terjadi.
Alasannya adalah, secara mengejutkan, ketika sebuah kotak memiliki
position: absolute
kotak yang berisinya adalah kotak padding orang tua (yaitu, kotak di sekitar padding-nya). Hal ini mengejutkan karena biasanya (yaitu, bila menggunakan statis atau posisi relatif) kotak yang berisi adalah orangtua konten kotak.Berikut adalah bagian yang relevan dari spesifikasi CSS :
Pendekatan paling sederhana - seperti yang disarankan dalam jawaban Winter - adalah untuk digunakan
padding: inherit
pada posisi yang mutlakdiv
. Ini hanya berfungsi, jika Anda tidak ingin yang benar-benar diposisikandiv
memiliki bantalan tambahan sendiri. Saya pikir solusi tujuan umum (di mana kedua elemen dapat memiliki padding independen mereka sendiri) adalah:Tambahkan posisi ekstra yang relatif
div
(tanpa bantalan) di sekitar posisi benar-benardiv
. Yang barudiv
akan menghormati bantalan induknya, dan yang diposisikan benar-benardiv
akan mengisinya.Kelemahannya, tentu saja, adalah bahwa Anda mengacaukan HTML hanya untuk tujuan presentasi.
Ulangi bantalan (atau tambahkan ke dalamnya) pada elemen yang benar-benar diposisikan.
Kelemahannya di sini adalah Anda harus mengulangi nilai-nilai dalam CSS Anda, yang rapuh jika Anda menulis CSS secara langsung. Namun, jika Anda menggunakan alat pra-pemrosesan suka
SASS
atauLESS
Anda dapat menghindari masalah itu dengan menggunakan variabel. Ini adalah metode yang saya gunakan secara pribadi.sumber
position: absolute
? Mengejutkan bahwa kotak yang berisi adalah kotak bantalan, tetapi pasti ada alasan untuk itu, sama seperti saya yakin ada alasan mengapa (tanpabox-sizing
)width
&height
tidak termasuk padding atau perbatasan.box-sizing
properti ini, pada orang tua atau anak. Ini karena itu mempengaruhi ukuran , seperti pada lebar / tinggi, tetapi bukan kotak yang berisi, meskipun saya akui itu akan lebih masuk akal jika itu mempengaruhi keduanya.padding: inherit
berfungsi dengan baik jika benar-benar diposisikandiv
tidak perlu padding sendiri, dan saya telah menambahkan menyebutkan teknik itu. Ini kurang fleksibel, karena Anda tidak dapat menambahkan bantalan tambahan ke posisi yang benar-benardiv
(yaitu Anda tidak bisa mengatakanpadding: inherit + 5px
). Itu sebabnya saya lebih suka teknik yang saya sebutkan di sini.position:absolute
elemen anak memang bekerja jika Anda hanya mencari anak untuk menghormati padding orang tua. Namun, jika Anda ingin menambahkan padding tambahan pada anak Anda harus menjaga rasio paddings dalam memeriksa kode Anda. Tidak ada cara bersih untuk melakukannya hanya dengan CSS.Satu hal yang bisa Anda coba adalah menggunakan css berikut:
Ini memungkinkan elemen anak mewarisi padding dari orang tua, maka anak dapat diposisikan untuk mencocokkan lebar dan padding orang tua.
Juga, saya menggunakan
box-sizing: border-box;
elemen yang terlibat.Saya belum menguji ini di semua browser, tetapi tampaknya berfungsi di Chrome, Firefox dan IE10.
sumber
Yah, ini mungkin bukan solusi yang paling elegan (semantik), tetapi dalam beberapa kasus ini akan bekerja tanpa kekurangan: Alih-alih bantalan, gunakan perbatasan transparan pada elemen induk. Elemen anak diposisikan mutlak akan menghormati perbatasan dan itu akan diberikan persis sama (kecuali Anda menggunakan perbatasan elemen induk untuk styling).
sumber
Gunakan margin alih-alih mengisi dalam div induk: http://blog.vjeux.com/2012/css/css-absolute-position-taking-into-account-padding.html
sumber
Ini tembakan terbaik saya. Saya menambahkan Div lain dan membuatnya merah dan mengubah tinggi orangtua Anda menjadi 200px hanya untuk mengujinya. Idenya adalah anak sekarang menjadi cucu dan orang tua menjadi kakek-nenek. Jadi orang tua menghormati orang tuanya. Semoga Anda mendapatkan ide saya.
Edit:
Saya pikir apa yang Anda coba lakukan tidak dapat dilakukan. Posisi absolut berarti bahwa Anda akan memberikannya koordinasi yang harus dihormati. Bagaimana jika orang tua memiliki padding 5px. Dan Anda benar-benar memposisikan anak di atas: -5px; kiri: -5px . Bagaimana seharusnya menghormati orang tua dan Anda pada saat yang sama ??
Solusi saya
Jika Anda ingin itu menghormati orangtua, jangan benar-benar memposisikannya.
sumber
1.) Anda tidak dapat menggunakan batas besar pada orang tua - jika Anda ingin memiliki batas tertentu
2.) Anda tidak dapat menambahkan margin - jika orang tua Anda adalah bagian dari beberapa wadah lain dan Anda ingin orang tua Anda untuk mengambil penuh lebar grand parent itu.
Satu-satunya Solusi yang harus diterapkan adalah untuk membungkus anak-anak Anda di wadah lain sehingga orang tua Anda menjadi kakek-nenek dan kemudian menerapkan bantalan ke Pembungkus / Orangtua anak-anak baru. Atau Anda bisa langsung mengaplikasikan padding pada anak-anak.
Dalam kasus Anda:
sumber
Bisa dengan mudah dilakukan dengan menggunakan level ekstra Div.
Demo: https://jsfiddle.net/soxv3vr0/
sumber
tambahkan padding: mewarisi di posisi absolut Anda
sumber