พิจารณาแกนหลักและแกนไขว้ของเฟล็กซ์คอนเทนเนอร์:
ที่มา: 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 'หมายถึงอะไร คุณคาดหวังว่ามันจะไปที่ไหน (ฉันเห็นการสาธิตในคำตอบหนึ่งข้อที่นี่ แต่ฉันไม่เห็นวิธีที่ชัดเจนว่าจะใช้งานได้โดยทั่วไป)