โฮมเพจ » การเข้ารหัส » CSS - marginauto; - มันทำงานอย่างไร

    CSS - marginauto; - มันทำงานอย่างไร

    การใช้ margin: อัตโนมัติ การจัดวางองค์ประกอบบล็อกในแนวนอนเป็นศูนย์กลางเป็นเทคนิคที่รู้จักกันดี แต่คุณเคยสงสัยบ้างไหมว่าทำไมหรือได้ผลอย่างไร ในการตอบคำถามนี้ก่อนอื่นเราต้องมาดูวิธีการทำงานของ margin: auto นอกจากนี้ในการผสมคืออะไร รถยนต์ อาจทำในระยะขอบถ้ามันใช้งานได้สำหรับการจัดกึ่งกลางแนวตั้งและปัญหาอื่น ๆ.

    แต่แรก, อะไรนะ รถยนต์ ทำจริง?

    ความหมายของ รถยนต์ แตกต่างกันไปด้วย องค์ประกอบ, ประเภทองค์ประกอบ และ บริบท. ในระยะขอบ, รถยนต์ อาจหมายถึงหนึ่งในสองสิ่ง: ใช้พื้นที่ว่างหรือ 0 px ทั้งสองจะ กำหนดเค้าโครงที่แตกต่างกันสำหรับองค์ประกอบ.

    "auto" สละพื้นที่ว่าง

    นี่คือการใช้มาร์จิ้นโดยทั่วไป รถยนต์ เราเจอกันบ่อยครั้ง โดยการมอบหมาย รถยนต์ ไปทางซ้ายและขวาขององค์ประกอบพวกเขาใช้พื้นที่แนวนอนที่มีอยู่ในภาชนะขององค์ประกอบอย่างเท่าเทียมกัน - และองค์ประกอบจึงเป็นศูนย์กลาง.

    อย่างไรก็ตามสิ่งนี้จะใช้ได้กับระยะขอบแนวนอนเท่านั้น (เพิ่มเติมใน ทำไม ในภายหลัง) และมันยัง จะไม่ทำงานกับการลอย และ องค์ประกอบแบบอินไลน์ และด้วยตัวมันเอง ไม่สามารถทำงานได้ ใน แน่นอน และ องค์ประกอบตำแหน่งคงที่ (อย่างไรก็ตามเราจะดูวิธีการทำงานเหล่านั้น).

    มารยาทลอยโดยการใช้พื้นที่ว่าง

    ตั้งแต่ รถยนต์ ในระยะขอบซ้ายและขวาใช้พื้นที่ "ว่าง" เท่า ๆ กันคุณคิดว่าจะเกิดอะไรขึ้นเมื่อมูลค่า รถยนต์ มอบให้กับหนึ่งในนั้นเท่านั้น?

    ระยะขอบซ้ายหรือขวาด้วย รถยนต์ จะใช้พื้นที่ทั้งหมด "พร้อมใช้งาน" ทำให้องค์ประกอบดูเหมือนว่าล้างไปทางซ้ายหรือขวา.

    “รถยนต์” คำนวณเป็น 0px

    ดังที่ได้กล่าวมาก่อน, รถยนต์ จะไม่ทำงานในองค์ประกอบที่ลอยอยู่แบบอินไลน์และแบบสัมบูรณ์ องค์ประกอบทั้งหมดเหล่านี้มีอยู่แล้ว ตัดสินใจเกี่ยวกับรูปแบบของพวกเขา, ดังนั้นจึงไม่มีประโยชน์ในการใช้ รถยนต์ สำหรับระยะขอบและคาดหวังว่าจะได้รับการเป็นศูนย์กลางเช่นเดียวกับที่.

    ที่จะเอาชนะวัตถุประสงค์เริ่มต้นของการใช้สิ่งที่ชอบ ลอย. ด้วยเหตุนี้ รถยนต์ จะมีค่า 0px ในองค์ประกอบเหล่านั้น.

    รถยนต์ จะไม่ทำงานกับองค์ประกอบบล็อกทั่วไปหากมันไม่มีความกว้าง ตัวอย่างทั้งหมดที่ฉันแสดงให้คุณเห็นนั้นมีความกว้าง.

    ความกว้างของค่า รถยนต์ จะมี 0px อัตรากำไรขั้นต้น. โดยทั่วไปความกว้างขององค์ประกอบบล็อกจะครอบคลุมถึงคอนเทนเนอร์เมื่อเป็น รถยนต์ หรือ 100% และด้วยเหตุนี้อัตรากำไรขั้นต้น รถยนต์ จะถูกคำนวณเป็น 0px ในกรณีเช่นนี้.

    สิ่งที่เกิดขึ้นกับระยะขอบในแนวตั้งด้วยมูลค่า รถยนต์?

    รถยนต์ ในระยะขอบทั้งบนและล่างถูกคำนวณเป็น 0px เสมอ (ยกเว้นองค์ประกอบที่แน่นอน) ข้อมูลจำเพาะของ W3C บอกว่ามันเป็นอย่างนี้:

    “ถ้า “ขอบด้านบน” หรือ “ขอบล่าง” คือ “รถยนต์”, ค่าที่ใช้คือ 0 "

    สาเหตุที่ดีจนถึงตอนนี้เป็นเรื่องลึกลับ อาจเป็นเพราะการไหลของหน้าในแนวดิ่งทั่วไป ขนาดหน้าเพิ่มความสูงฉลาด. ดังนั้นการจัดองค์ประกอบให้อยู่กึ่งกลางในแนวตั้งในคอนเทนเนอร์จะไม่ทำให้มันอยู่กึ่งกลางเมื่อเทียบกับหน้าตัวเองซึ่งแตกต่างจากเมื่อทำในแนวนอน (ในกรณีส่วนใหญ่).

    และอาจเป็นเพราะเหตุผลเดียวกันนี้พวกเขาตัดสินใจเพิ่มข้อยกเว้นสำหรับองค์ประกอบแบบสัมบูรณ์ซึ่งสามารถจัดกึ่งกลางแนวตั้งตามความสูงของหน้าทั้งหมด.

    อาจเป็นเพราะเอฟเฟกต์การยุบขอบ (การยุบขององค์ประกอบที่อยู่ติดกัน” ระยะขอบ) ซึ่งเป็นข้อยกเว้นอื่นสำหรับระยะขอบแนวตั้ง.

    อย่างไรก็ตามหลังดูเหมือนจะเป็นกรณีที่ไม่น่า - เนื่องจากองค์ประกอบที่ไม่ยุบระยะขอบของพวกเขา - เหมือนลอยและองค์ประกอบ ล้น นอกเหนือจากนี้ มองเห็นได้, ยังคงกำหนดระยะขอบแนวตั้ง 0px สำหรับ รถยนต์.

    การจัดองค์ประกอบองค์ประกอบให้อยู่กึ่งกลาง

    เนื่องจากมีข้อยกเว้นสำหรับองค์ประกอบที่มีตำแหน่งแน่นอนเรา”จะใช้ รถยนต์ ค่าไปยังศูนย์หนึ่งในแนวตั้งและแนวนอน แต่ก่อนหน้านั้นเราต้องรู้ว่าเมื่อไร margin: อัตโนมัติ ใช้งานได้จริงเหมือนที่เราต้องการในองค์ประกอบที่มีตำแหน่งแน่นอน.

    นี่คือที่มาของสเป็ค W3C อื่น:

    "ถ้าทั้งสาม “ซ้าย”, “ความกว้าง”, และ “ขวา” เป็น “รถยนต์”: ชุดแรกใด ๆ “รถยนต์” ค่าสำหรับ “ขอบซ้าย” และ “ขอบขวา” เป็น 0 ... "

    "ถ้าไม่มีสามอย่างนี้ “รถยนต์”: ถ้าทั้งคู่ “ขอบซ้าย” และ “ขอบขวา” เป็น “รถยนต์”, แก้สมการภายใต้ข้อ จำกัด พิเศษที่ระยะขอบทั้งสองได้รับค่าเท่ากัน "

    ที่สวยมากบอกว่าสำหรับ ตามแนวนอน รถยนต์ อัตรากำไรขั้นต้น เพื่อยึดช่องว่างที่เท่ากัน, ค่าสำหรับ ซ้าย, ความกว้าง และ ขวา ไม่ควรจะเป็น รถยนต์ , ค่าเริ่มต้นของพวกเขา ดังนั้นสิ่งที่เราต้องทำคือการให้คุณค่ากับพวกเขาในองค์ประกอบที่มีตำแหน่งแน่นอน. ซ้าย และ ขวา ควรมี ค่าที่เท่าเทียมกันสำหรับการอยู่ตรงกลางที่สมบูรณ์แบบ.

    ข้อมูลจำเพาะยังกล่าวถึงสิ่งที่คล้ายกันสำหรับระยะขอบแนวตั้ง.

    “ถ้าทั้งสาม “ด้านบน”, “ความสูง”, และ “ด้านล่าง” เป็นอัตโนมัติตั้งค่า “ด้านบน” ไปยังตำแหน่งคงที่ ... ”

    “หากไม่มีสามในนั้น “รถยนต์”: ถ้าทั้งคู่ “ขอบด้านบน” และ “ขอบล่าง” เป็น “รถยนต์”, แก้สมการภายใต้ข้อ จำกัด พิเศษที่ระยะขอบทั้งสองได้รับค่าเท่ากัน ... ”

    ดังนั้นสำหรับองค์ประกอบที่แน่นอนที่จะ ศูนย์กลางในแนวตั้ง, ของมัน ด้านบน, ความสูง, และ ด้านล่าง ค่าไม่ควรเป็น รถยนต์.

    ตอนนี้ด้วยการรวมสิ่งเหล่านี้เข้าด้วยกัน”จะได้รับ:

    ข้อสรุป

    หากคุณต้องการล้างองค์ประกอบในหน้าของคุณไปทางขวาหรือซ้ายโดยไม่ต้องห่อองค์ประกอบต่อไปนี้ (เช่นเกิดอะไรขึ้นกับโฟลต) จำไว้ว่ามีตัวเลือกให้ใช้ รถยนต์ สำหรับกำไร.

    การแปลงองค์ประกอบให้เป็นสัมบูรณ์เพียงเพื่อให้สามารถอยู่กึ่งกลางแนวตั้งได้อาจไม่ใช่ความคิดที่ดี มีตัวเลือกอื่น ๆ เช่น flexbox และการแปลง CSS ซึ่งเหมาะสมกว่าสำหรับตัวเลือกเหล่านั้น.