Trik umum untuk elemen pemosisian vertikal adalah dengan menggunakan CSS berikut:
.item {
position:absolute;
top:50%;
margin-top:-8px; /* half of height */
height: 16px;
}
Jika dilihat dalam tampilan metrik seperti di Chrome, inilah yang Anda lihat:
Namun, tidak ada margin visual yang digambarkan saat Anda mengarahkan kursor ke elemen, yaitu margin 'di luar' batas dan dapat divisualisasikan. Tetapi margin negatif tidak muncul. Bagaimana penampilan mereka dan apa yang membuatnya berbeda?
Kenapa margin-top:-8px
tidak sama margin-bottom:8px
?
Jadi, bagaimana cara kerja margin negatif dan apa intuisi di baliknya. Bagaimana mereka 'menabrak' (dalam kasus margin-top < 0
) suatu barang?
onset
danoffset
. Memang benar begitu banyak orang yang selalu menggunakan kataoffset
( negatif ) saat diartikanonset
( positif ). Pesan ini akan hancur dengan sendirinya jika Anda memperbarui jawaban Anda. Bersulang!margin-bottom: -8px;
? Kenapamargin-bottom:-8px
tidak samamargin-top:-8px
?Margin-atas -8px berarti akan menjadi 8px lebih tinggi daripada jika marginnya 0.
Margin-bawah 8px berarti bahwa hal di bawahnya akan menjadi 8px lebih jauh ke bawah jika memiliki 0 margin.
sumber
margin-bottom: -8px;
? Kenapamargin-bottom:-8px
tidak samamargin-top:-8px
?poin bagus sudah dibuat di sini, tetapi meskipun ada banyak informasi tentang bagaimana rendering margin dilakukan oleh browser, alasannya belum cukup dijawab:
yang juga bisa kami tanyakan adalah:
jadi apa yang kita lihat adalah bahwa ada perbedaan dalam rendering margin tergantung pada sisi penerapannya - margin atas (dan kiri) berbeda dari margin bawah (dan kanan).
hal-hal menjadi lebih jelas ketika melihat (disederhanakan) bagaimana gaya diterapkan oleh browser: elemen dirender dari atas ke bawah di viewport, dimulai dari pojok kiri atas (mari tetap dengan rendering vertikal untuk saat ini, dengan mengingat bahwa yang horizontal diperlakukan sama).
perhatikan html berikut:
analog dengan posisi mereka dalam kode, ketiga kotak ini tampak bertumpuk 'top-down' di browser ( menjaga hal-hal sederhana, kami tidak akan menganggap di sini sebagai
order
properti dari modul 'flex-box' css3 ). jadi, setiap kali gaya diterapkan ke kotak 3, posisi elemen sebelumnya (untuk kotak 1 dan 2) telah ditentukan, dan tidak boleh diubah lagi demi kecepatan rendering.sekarang, bayangkan margin atas -10px untuk kotak 3. alih-alih menggeser semua elemen sebelumnya untuk mengumpulkan beberapa ruang, browser hanya akan mendorong kotak 3 ke atas, jadi itu ditampilkan di atas (atau di bawah, tergantung pada z-index ) elemen sebelumnya. bahkan jika kinerja bukan menjadi masalah, memindahkan semua elemen ke atas dapat berarti memindahkannya dari viewport, sehingga posisi pengguliran saat ini harus diubah agar semuanya terlihat lagi.
hal yang sama berlaku untuk margin bawah untuk kotak 3, baik negatif maupun positif: alih-alih memengaruhi elemen yang sudah dievaluasi, hanya 'titik awal' baru untuk elemen mendatang yang ditentukan. sehingga menetapkan margin bawah positif akan menekan elemen berikut ; yang negatif akan mendorong mereka.
sumber
Karena Anda telah menggunakan pemosisian absolut, dan menentukan persentase teratas, hanya margin-top yang akan memengaruhi lokasi objek .item Anda. Jika sebaliknya Anda memposisikannya menggunakan bottom: 50%, maka Anda memerlukan margin-bottom -8px untuk memusatkannya, dan margin-top tidak akan berpengaruh.
Margin memengaruhi batas-batas elemen dalam hal memposisikannya, baik secara absolut seperti dalam kasus Anda, atau relatif terhadap elemen tetangga. Bayangkan margin itu adalah fondasi elemen Anda di mana ia berada. Mereka biasanya memiliki ukuran yang sama, tetapi dapat dibuat lebih besar atau lebih kecil pada salah satu atau semua dari keempat tepinya.
CSS Anda memberi tahu browser untuk memposisikan bagian atas elemen Anda margin pada titik 50% ke bawah halaman. Namun, karena semua elemen bukan satu piksel, browser perlu mengetahui bagian mana yang berbaris 50% ke bawah halaman. Untuk menyejajarkan bagian atas elemen, ini menggunakan margin atas. Secara default, ini sejalan dengan bagian atas elemen, tetapi Anda dapat mengubahnya dengan CSS.
Dalam kasus Anda, 50% teratas akan menghasilkan elemen atas yang dimulai di tengah halaman. Dengan menerapkan margin atas negatif, browser menggunakan titik 8px ke dalam elemen dari atas (yaitu garis di tengahnya) sebagai tempat untuk memposisikan pada 50%.
Jika Anda menerapkan margin positif ke bawah, ini memperluas garis yang digunakan browser untuk memposisikan bagian bawah menjauh dari elemen itu sendiri, memberikan celah antara itu dan elemen yang berdekatan di bawah, atau mempengaruhi di mana ia ditempatkan secara mutlak jika pemosisian didasarkan pada bagian bawah.
sumber
Saya bertanya-tanya apakah pertanyaan ini telah dijawab dengan baik: bagaimana margin css bekerja dan mengapa margin-top itu: -5; tidak sama dengan margin-bottom: 5 ;?
Margin adalah jarak dari sekeliling elemen. margin-top mengatakan "... jarak dari lingkungan seperti yang kita ukur dari 'sisi' atas 'kotak' elemen dan margin-bottom adalah jarak dari 'sisi' bawah 'kotak'". Kemudian margin-top: 5; berkaitan dengan perimeter 'sisi' atas, -5 dalam kasus itu; apa pun yang mendekati dari 'sisi' atas dapat menimpa 'sisi' atas elemen sebesar 5, dan margin-bottom: 5; Berarti jarak antara elemen bawah 'sisi' dan sekitarnya adalah 5.
Pada dasarnya itu tetapi dipengaruhi oleh elemen float'ed dan sejenisnya: http://www.w3.org/TR/CSS2/box.html#margin-properties .
http://coding.smashingmagazine.com/2009/07/27/the-definitive-guide-to-using-negative-margins/
Saya berdiri untuk dikoreksi.
sumber