Laman » Pengekodan » CSS - marginauto; - Bagaimana ia berfungsi

    CSS - marginauto; - Bagaimana ia berfungsi

    Menggunakan margin: auto untuk memusatkan elemen blok secara mendatar adalah teknik yang terkenal. Tetapi adakah anda pernah tertanya-tanya mengapa atau bagaimana ia berfungsi? Untuk menjawabnya, kita perlu melihat bagaimana margin: kerja auto. Juga dalam campuran adalah apa auto boleh dilakukan dengan margin, jika ia berfungsi untuk menegak menegak, dan beberapa isu lain.

    Tetapi pertama, Apakah auto sebenarnya lakukan?

    Takrifan auto berbeza dengan unsur-unsur, jenis elemen dan konteks. Dalam margin, auto boleh bermaksud salah satu daripada dua perkara: mengambil ruang yang ada atau 0 px. Kedua-duanya akan tentukan susun atur yang berlainan untuk elemen.

    "auto" Mengambil Ruang Tersedia

    Inilah margin penggunaan yang paling biasa auto kita sering berjumpa. Dengan memberi auto ke margin kiri dan kanan elemen, mereka mengambil ruang mendatar yang ada di dalam bekas elemen sama - dan oleh itu unsur menjadi berpusat.

    Walau bagaimanapun, ini akan berfungsi untuk margin mendatar sahaja (lebih banyak pada kenapa kemudian), dan juga tidak akan berfungsi dengan terapung dan elemen dalam baris dan dengan sendirinya, ia juga tidak boleh berfungsi dalam mutlak dan elemen kedudukan tetap (kita akan lihat bagaimana membuat mereka bekerja).

    Faux Float By Take Up Available Space

    Sejak auto di kedua-dua margin kanan dan kiri mengambil ruang "tersedia" sama, apa yang anda fikir akan berlaku apabila nilai itu auto diberikan kepada hanya satu daripada mereka?

    Lebar kiri atau kanan dengan auto akan mengambil semua ruang "tersedia" yang membuat elemen kelihatan seperti telah dibuang ke kanan atau ke kiri.

    “auto” Dikira dengan 0px

    Seperti yang dinyatakan sebelum ini, auto tidak akan berfungsi dalam unsur-unsur yang terapung, sebaris dan mutlak. Semua elemen ini sudah ada memutuskan susun atur mereka, jadi tidak ada gunanya menggunakan auto untuk margin dan mengharapkan ia menjadi berpusat sama seperti itu.

    Itu akan mengalahkan tujuan awal menggunakan sesuatu seperti terapung. Oleh itu auto akan mempunyai nilai 0px dalam elemen tersebut.

    auto juga tidak akan berfungsi pada elemen blok tipikal jika ia tidak mempunyai lebar. Semua contoh yang saya menunjukkan kepada anda setakat ini mempunyai lebar.

    Lebar nilai auto pasti akan 0px margin. Lebar elemen blok biasanya meliputi bekasnya apabila ia berlaku auto atau 100% dan dengan itu margin auto akan dikira 0px dalam kes sedemikian.

    Apa yang Berlaku kepada Margin Menegak Dengan Nilai auto?

    auto di kedua-dua margin atas dan bawah sentiasa dihitung dengan 0px (kecuali unsur-unsur mutlak). W3C spec mengatakan ia seperti ini:

    “Jika “margin-top” atau “margin-bottom” adalah “auto”, nilai yang digunakan adalah 0 "

    Kenapa, baik yang setakat ini, misteri. Ia mungkin disebabkan oleh aliran halaman menegak biasa, di mana saiz halaman meningkatkan tinggi ketinggian. Oleh itu, memusatkan unsur secara menegak dalam bekasnya tidak akan menjadikannya kelihatan berpusat, berbanding dengan halaman itu sendiri, tidak seperti ketika ia dilakukan secara mendatar (dalam kebanyakan kes).

    Dan mungkin kerana sebab yang sama, mereka memutuskan untuk menambah pengecualian untuk elemen mutlak yang boleh dipusatkan secara menegak di sepanjang ketinggian keseluruhan halaman.

    Ia juga boleh disebabkan oleh kesan keruntuhan margin (kejatuhan elemen bersebelahan” margin) yang merupakan pengecualian lain untuk margin menegak.

    Walau bagaimanapun, yang terakhir ini seolah-olah menjadi tidak mungkin - kerana unsur-unsur yang tidak meruntuhkan margin mereka - seperti Float, dan unsur-unsur dengan limpahan Selain itu boleh dilihat, masih menetapkan margin menegak 0px untuk auto.

    Memusatkan Elemen Posisi Posisi

    Oleh kerana itu berlaku pengecualian untuk elemen yang benar-benar diposisikan, kita”akan digunakan auto nilai untuk memusatkan satu secara menegak dan mendatar. Tetapi sebelum itu, kita perlu mengetahui bila akan margin: auto sebenarnya berfungsi seperti yang kita mahu dalam unsur yang benar-benar diposisikan.

    Di sinilah spesifikasi W3C yang lain ada dalam:

    "Jika ketiga-tiga “ditinggalkan”, “lebar”, dan “betul” adalah “auto”: Pertama tetapkan apa-apa “auto” nilai untuk “margin-left” dan “margin-right” ke 0 ... "

    "Kalau tidak ada yang ketiga “auto”: Jika kedua-duanya “margin-left” dan “margin-right” adalah “auto”, menyelesaikan persamaan di bawah kekangan tambahan bahawa dua margin mendapat nilai yang sama "

    Itu cukup banyak mengatakan bahawa untuk mendatar auto margin untuk merebut ruang yang sama, nilai untuk ditinggalkan, lebar dan betul tidak boleh auto , nilai lalai mereka. Jadi apa yang perlu kita lakukan adalah memberi mereka nilai dalam elemen yang benar-benar diposisikan. ditinggalkan dan betul sepatutnya nilai yang sama untuk sentuhan sempurna.

    Spesifikasi itu juga menyebut sesuatu yang serupa untuk margin menegak.

    “Jika ketiga-tiga “atas”, “ketinggian”, dan “bawah” adalah auto, tetapkan “atas” ke kedudukan statik ... ”

    “Sekiranya tiada satu daripada tiga “auto”: Jika kedua-duanya “margin-top” dan “margin-bottom” adalah “auto”, menyelesaikan persamaan di bawah kekangan tambahan bahawa kedua margin mendapat nilai yang sama ... ”

    Oleh itu, untuk elemen mutlak menjadi berpusat secara menegak, nya atas, ketinggian, dan bawah nilai tidak seharusnya auto.

    Sekarang dengan menggabungkan semua ini, inilah yang kita”akan mendapat:

    Kesimpulannya

    Sekiranya anda ingin memadam elemen pada halaman anda ke kanan atau kiri tanpa unsur-unsur berikut membungkusnya (seperti apa yang berlaku dengan terapung), ingat ada pilihan untuk digunakan auto untuk margin.

    Menukar satu elemen kepada mutlak supaya ia boleh berpusat secara menegak mungkin bukan idea yang bagus. Terdapat pilihan lain seperti flexbox dan transform CSS yang lebih sesuai untuk mereka.