Saya perlu bantuan untuk menumpangkan satu orang div
ke orang laindiv
.
Kode saya terlihat seperti ini:
<div class="navi"></div>
<div id="infoi">
<img src="info_icon2.png" height="20" width="32"/>
</div>
Sayangnya saya tidak bisa bersarang div#infoi
atau img
, di dalam yang pertamadiv.navi
.
Itu harus dua div
s terpisah seperti yang ditunjukkan, tetapi saya perlu tahu bagaimana saya bisa menempatkan di div#infoi
atas div.navi
dan ke sisi paling kanan dan berpusat di atas div.navi
.
overflow: hidden
, gunakanoverflow: visible
sebagai gantinya.Jawaban:
Saya akan menyarankan belajar tentang
position: relative
dan elemen anak denganposition: absolute
.sumber
absolute
Elemen yang diposisikan diposisikan relatif terhadapposition:absolute|relative|fixed
elemen induk terdekat yang diposisikan secara eksplisit ( ). hanya klarifikasi lebih lanjut ... jsfiddle.net/p5jkc8gzSolusi yang diterima bekerja dengan baik, tetapi IMO tidak memiliki penjelasan mengapa itu bekerja. Contoh di bawah ini diringkas menjadi dasar-dasar dan memisahkan CSS penting dari CSS styling yang tidak relevan. Sebagai bonus, saya juga menyertakan penjelasan terperinci tentang cara kerja pemosisian CSS.
TLDR; jika Anda hanya menginginkan kode, gulir ke bawah ke Hasil .
Masalah
Ada dua terpisah, saudara, unsur-unsur dan tujuannya adalah untuk posisi elemen kedua (dengan
id
dariinfoi
), agar muncul dalam elemen sebelumnya (yang denganclass
darinavi
). Struktur HTML tidak dapat diubah.Solusi yang Diusulkan
Untuk mencapai hasil yang diinginkan, kita akan memindahkan, atau memposisikan, elemen kedua, yang akan kita panggil
#infoi
sehingga muncul di dalam elemen pertama, yang akan kita panggil.navi
. Secara khusus, kami ingin#infoi
diposisikan di sudut kanan atas.navi
.Pengetahuan yang Diperlukan Posisi CSS
CSS memiliki beberapa properti untuk elemen penentuan posisi. Secara default, semua elemen adalah
position: static
. Ini berarti elemen akan diposisikan sesuai dengan urutannya dalam struktur HTML, dengan beberapa pengecualian.Yang lain
position
nilai-nilairelative
,absolute
,sticky
, danfixed
. Dengan menyetel elemenposition
ke salah satu dari nilai-nilai lain ini sekarang mungkin untuk menggunakan kombinasi dari empat properti berikut untuk memposisikan elemen:top
right
bottom
left
Dengan kata lain, dengan mengatur
position: absolute
, kita dapat menambahkantop: 100px
ke posisi elemen 100 piksel dari bagian atas halaman. Sebaliknya, jika kita mengaturbottom: 100px
elemen akan diposisikan 100 piksel dari bagian bawah halaman.Di sinilah banyak pendatang CSS tersesat -
position: absolute
memiliki kerangka referensi. Dalam contoh di atas, kerangka acuan adalahbody
elemen.position: absolute
dengantop: 100px
cara elemen diposisikan 100 piksel dari bagian atasbody
elemen.Kerangka posisi referensi, atau konteks posisi, dapat diubah dengan mengatur
position
elemen induk ke nilai apa pun selainposition: static
. Artinya, kita dapat membuat konteks posisi baru dengan memberikan elemen induk:position: relative;
position: absolute;
position: sticky;
position: fixed;
Misalnya, jika
<div class="parent">
elemen diberikanposition: relative
, elemen anak mana pun menggunakan<div class="parent">
konteks posisi mereka. Jika elemen anak diberikanposition: absolute
dantop: 100px
, elemen akan diposisikan 100 piksel dari bagian atas<div class="parent">
elemen, karena<div class="parent">
sekarang adalah konteks posisi.Faktor lain yang harus diperhatikan adalah susunan tumpukan - atau bagaimana elemen ditumpuk dalam arah-z. Yang harus diketahui di sini adalah susunan elemen, secara default, ditentukan oleh kebalikan dari urutannya dalam struktur HTML. Perhatikan contoh berikut:
Dalam contoh ini, jika dua
<div>
elemen diposisikan di tempat yang sama pada halaman,<div>Top</div>
elemen tersebut akan menutupi<div>Bottom</div>
elemen tersebut. Sejak<div>Top</div>
muncul setelah<div>Bottom</div>
dalam struktur HTML memiliki urutan susun yang lebih tinggi.Tampilkan cuplikan kode
Urutan susun dapat diubah dengan CSS menggunakan properti
z-index
atauorder
.Kita dapat mengabaikan urutan penumpukan dalam masalah ini karena struktur HTML alami dari elemen berarti elemen yang ingin kita tampilkan
top
muncul setelah elemen lainnya.Jadi, kembali ke masalah yang ada - kita akan menggunakan konteks posisi untuk menyelesaikan masalah ini.
Solusinya
Seperti yang dinyatakan di atas, tujuan kami adalah memposisikan
#infoi
elemen sehingga muncul di dalam.navi
elemen. Untuk melakukan ini, kami akan membungkus.navi
dan#infoi
elemen dalam elemen baru<div class="wrapper">
sehingga kami dapat membuat konteks posisi baru.Kemudian buat konteks posisi baru dengan memberikan
.wrapper
aposition: relative
.Dengan konteks posisi baru ini, kita dapat memposisikan
#infoi
dalam.wrapper
. Pertama, beri#infoi
aposition: absolute
, yang memungkinkan kita untuk memposisikan secara#infoi
mutlak.wrapper
.Kemudian tambahkan
top: 0
danright: 0
posisikan#infoi
elemen di sudut kanan atas. Ingat, karena#infoi
elemen menggunakan.wrapper
konteks posisinya, elemen akan berada di kanan atas.wrapper
elemen.Karena
.wrapper
hanyalah wadah untuk.navi
, memposisikan#infoi
di sudut kanan atas.wrapper
memberikan efek diposisikan di sudut kanan atas.navi
.Dan begitulah,
#infoi
sekarang tampaknya berada di sudut kanan atas.navi
.Hasil
Contoh di bawah ini diringkas ke dasar-dasarnya, dan berisi beberapa gaya minimal.
Tampilkan cuplikan kode
Solusi Alternatif (Kotak)
Inilah solusi alternatif menggunakan CSS Grid untuk memposisikan
.navi
elemen dengan#infoi
elemen di paling kanan. Saya telah menggunakangrid
properti verbose untuk membuatnya sejelas mungkin.Tampilkan cuplikan kode
Solusi Alternatif (Tanpa Pembungkus)
Jika kami tidak dapat mengedit HTML apa pun, artinya kami tidak dapat menambahkan elemen pembungkus, kami masih dapat mencapai efek yang diinginkan.
Alih-alih menggunakan
position: absolute
pada#infoi
elemen, kita akan menggunakanposition: relative
. Ini memungkinkan kami untuk memposisikan ulang#infoi
elemen dari posisi default di bawah.navi
elemen. Denganposition: relative
kita dapat menggunakantop
nilai negatif untuk memindahkannya dari posisi default, danleft
nilai100%
minus beberapa piksel, menggunakanleft: calc(100% - 52px)
, untuk memposisikannya di dekat sisi kanan.Tampilkan cuplikan kode
sumber
Dengan menggunakan
div
gaya withz-index:1;
danposition: absolute;
Anda dapat overlaydiv
pada yang laindiv
.z-index
menentukan urutan div mana 'stack'. Sebuah div dengan yang lebih tinggiz-index
akan muncul di depan div dengan yang lebih rendahz-index
. Perhatikan bahwa properti ini hanya berfungsi dengan elemen yang diposisikan .sumber
Spesifikasi Grid CSS baru memberikan solusi yang jauh lebih elegan. Penggunaan
position: absolute
dapat menyebabkan masalah tumpang tindih atau penskalaan sementara Grid akan menyelamatkan Anda dari peretasan CSS yang kotor.Contoh Hamparan Kotak paling minimal:
HTML
CSS
Itu dia. Jika Anda tidak membuat untuk Internet Explorer, kode Anda kemungkinan besar akan berfungsi.
sumber
Berikut ini solusi sederhana 100% berdasarkan CSS. "Rahasia" adalah dengan menggunakan
display: inline-block
elemen pembungkus. Gambarvertical-align: bottom
di dalam adalah hack untuk mengatasi padding 4px yang ditambahkan beberapa browser setelah elemen.Saran : jika elemen sebelum pembungkus inline mereka dapat berakhir bersarang. Dalam hal ini Anda dapat "membungkus pembungkus" di dalam wadah dengan
display: block
- biasanya yang baik dan lamadiv
.sumber
Inilah yang Anda butuhkan:
sumber
Saya bukan seorang pembuat kode atau ahli dalam CSS, tetapi saya masih menggunakan ide Anda dalam desain web saya. Saya telah mencoba resolusi yang berbeda juga:
Tentu saja akan ada pembungkus di sekitar keduanya. Anda dapat mengontrol lokasi div menu yang akan ditampilkan di dalam header header dengan margin kiri dan posisi teratas. Anda juga dapat mengatur menu div untuk mengapung tepat jika Anda mau.
sumber
Berikut adalah contoh sederhana untuk membawa efek overlay dengan ikon memuat di atas div lain.
Coba di sini: http://jsbin.com/fotozolucu/edit?html,css ,output
sumber