พิจารณาแกนหลักและแกนไขว้ของเฟล็กซ์คอนเทนเนอร์:
ที่มา: W3C
ในการจัดแนวไอเท็มแบบเฟล็กซ์ตามแกนหลักมีหนึ่งคุณสมบัติ:
ในการจัดแนวไอเท็มแบบเฟล็กซ์ตามแนวแกนข้ามมีคุณสมบัติสามอย่าง:
ในภาพด้านบนแกนหลักเป็นแนวนอนและแกนไขว้เป็นแนวตั้ง นี่เป็นทิศทางเริ่มต้นของ flex container
อย่างไรก็ตามทิศทางเหล่านี้สามารถเปลี่ยนได้อย่างง่ายดายด้วยflex-direction
คุณสมบัติ
/* main axis is horizontal, cross axis is vertical */
flex-direction: row;
flex-direction: row-reverse;
/* main axis is vertical, cross axis is horizontal */
flex-direction: column;
flex-direction: column-reverse;
(แกนไขว้จะตั้งฉากกับแกนหลักเสมอ)
ประเด็นของฉันในการอธิบายวิธีการทำงานของแกนคือดูเหมือนจะไม่มีอะไรพิเศษเกี่ยวกับทิศทางใดทิศทางหนึ่ง แกนหลักแกนไขว้พวกเขาทั้งสองมีความสำคัญเท่าเทียมกันและflex-direction
ทำให้สามารถสลับไปมาได้ง่าย
เหตุใดแกนไขว้จึงได้รับคุณสมบัติการจัดตำแหน่งสองแบบเพิ่มเติม
ทำไมalign-content
และถูกalign-items
รวมเข้าในคุณสมบัติเดียวสำหรับแกนหลัก?
ทำไมแกนหลักไม่ได้รับjustify-self
คุณสมบัติ?
สถานการณ์ที่คุณสมบัติเหล่านี้มีประโยชน์:
วางสิ่งของแบบยืดหยุ่นไว้ที่มุมของภาชนะบรรจุแบบยืดหยุ่น
#box3 { align-self: flex-end; justify-self: flex-end; }
การจัดกลุ่มของรายการ flex จัดชิดขวา (
justify-content: flex-end
) แต่มีการจัดเรียงรายการแรกทางซ้าย (justify-self: flex-start
)พิจารณาส่วนหัวที่มีกลุ่มของรายการ nav และโลโก้ ด้วย
justify-self
โลโก้ที่สามารถจัดชิดซ้ายในขณะที่รายการ nav อยู่ไกลและสิ่งทั้งหมดปรับอย่างราบรื่น ("งอ") ขนาดหน้าจอที่แตกต่างกันในแถวของสามไอเท็มเฟล็กซ์ติดไอเท็มกลางเข้ากับกึ่งกลางของคอนเทนเนอร์ (
justify-content: center
) และจัดเรียงไอเท็มที่อยู่ติดกันกับขอบคอนเทนเนอร์ (justify-self: flex-start
และjustify-self: flex-end
)โปรดทราบว่าค่า
space-around
และspace-between
ในjustify-content
สถานที่ให้บริการจะไม่ให้รายการกึ่งกลางเกี่ยวกับภาชนะถ้ารายการที่อยู่ติดกันมีความกว้างที่แตกต่างกัน
ขณะที่เขียนนี้มีการกล่าวถึงไม่มีjustify-self
หรือjustify-items
ในflexbox ข้อมูลจำเพาะ
อย่างไรก็ตามในCSS Box Alignment Moduleซึ่งเป็นข้อเสนอที่ยังไม่เสร็จของ W3C เพื่อสร้างชุดคุณสมบัติการจัดตำแหน่งทั่วไปสำหรับการใช้งานในทุกรุ่นของกล่องมี:
ที่มา: W3C
คุณจะพบว่าjustify-self
และjustify-items
มีการพิจารณา ... แต่ไม่ได้สำหรับ flexbox
ฉันจะจบด้วยการย้ำคำถามหลัก:
เหตุใดจึงไม่มีคุณสมบัติ "ปรับรายการ" และ "จัดชิดขอบ"
justify-content: flex-start
ดังนั้นรายการจะแออัดในตอนเริ่มต้นเช่น | abcd |. คุณคาดหวังว่ามันจะทำอะไรถ้าคุณใส่justify-self: [anything]
รายการ 'b' ที่นั่น?)
justify-self
จะทำงานกับรายการ flex ได้อย่างไร ฉันจะบอกว่าไม่แตกต่างจากauto
ระยะขอบที่ใช้กับไอเท็มเฟล็กซ์แล้ว ในตัวอย่างที่สองของคุณjustify-self: flex-end
ในรายการ d จะย้ายไปที่ขอบไกล ในตัวมันเองจะเป็นคุณสมบัติที่ยอดเยี่ยมซึ่งauto
ระยะขอบสามารถทำได้ ฉันโพสต์คำตอบด้วยการสาธิต
justify-content
และjustify-self
มีการระบุไว้เพื่อให้กรณีที่มีความขัดแย้ง (เช่นสถานการณ์ที่ผมถูกถามเกี่ยวกับ) ชัดเจนและสมเหตุสมผล ดังที่ฉันได้กล่าวไว้ในคำตอบของฉันนี่{justify|align}-self
คือการจัดเรียงรายการภายในกล่องขนาดใหญ่ซึ่งมีขนาดเป็นอิสระจาก{justify|align}-self
ค่า - และไม่มีกล่องดังกล่าวในแกนหลักสำหรับรายการยืดหยุ่นที่จะจัดตำแหน่ง
justify-self
และjustify-content
จะโต้ตอบในกรณีที่พวกเขาขัดแย้งกัน (เช่นสถานการณ์ที่ฉันวางไว้) ระยะขอบอัตโนมัติก็ไม่ได้โต้ตอบกับมันjustify-content
เลย - พวกมันขโมยพื้นที่บรรจุทั้งหมดก่อนที่จะjustify-content
ได้รับโอกาสใช้งาน ดังนั้นมาร์จิ้นอัตโนมัติไม่ได้เป็นแบบอะนาล็อกที่ดีสำหรับการทำงาน
justify-self
จะทำงานให้กับรายการดิ้นได้อย่างไร สมมติว่าคุณมีรายการ a, b, c, d ที่มีพื้นที่เพิ่มเติมเพื่อกระจายไปรอบ ๆ พวกมันและที่เก็บของแบบยืดหยุ่นjustify-content: space-between
ดังนั้นพวกมันจึงจบลงเช่น | abcd | การเพิ่มเช่นjustify-self: center
หรือ 'ปรับตัวเอง: flex-end` ไปยังรายการ' b 'หมายถึงอะไร คุณคาดหวังว่ามันจะไปที่ไหน (ฉันเห็นการสาธิตในคำตอบหนึ่งข้อที่นี่ แต่ฉันไม่เห็นวิธีที่ชัดเจนว่าจะใช้งานได้โดยทั่วไป)