Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> CSS

วิธีป้องกันการยืดภาพด้วย Flexbox

เรียนรู้วิธีป้องกันไม่ให้ Flexbox ของ CSS ยืดรูปภาพของคุณในแนวนอน

Flexbox มีพฤติกรรมเริ่มต้นที่ผิดปกติซึ่งรูปภาพถูกขยายในแนวนอนจนเต็มความกว้างของคอนเทนเนอร์หลัก ดังนั้น หากคุณมีองค์ประกอบหลัก (คอนเทนเนอร์แบบยืดหยุ่น) ที่มี flex-direction: column และองค์ประกอบลูก (flex item) ซึ่งเป็นรูปภาพ แล้ว ความสูงตามธรรมชาติของรูปภาพ ถูกคงไว้ในขณะที่ความกว้างถูกขยายให้กว้างเท่ากับคอนเทนเนอร์หลัก

ลักษณะการทำงานนี้ไม่สอดคล้องกัน ขึ้นอยู่กับสไตล์ชีต CSS เริ่มต้นของเบราว์เซอร์ของคุณ (สไตล์ชีตตัวแทนผู้ใช้)

โชคดีที่วิธีแก้ปัญหานั้นง่าย คุณเพียงแค่ต้องแทนที่ align-self . ของรายการ/flex ของคุณ stretchเริ่มต้นของคุณสมบัติ มีค่าอีกค่าหนึ่ง

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

img {
    align-self: center;
}

ตัวอย่าง

ดูตัวอย่าง CSS ต่อไปนี้โดยที่เรามีองค์ประกอบหลัก 1 รายการ (คอนเทนเนอร์แบบยืดหยุ่น) และองค์ประกอบรูปภาพย่อย 2 รายการ (รายการแบบยืดหยุ่น) ภายใน

  • องค์ประกอบภาพแรกมีค่าเริ่มต้นของเบราว์เซอร์ align-self: stretch ซึ่งทำให้อัตราส่วนภาพเสียหาย
  • ในองค์ประกอบรูปภาพที่สอง ฉันได้เพิ่มคลาสยูทิลิตี้ชื่อ .self-center ด้วย align-self: center ประกาศที่เอาการยืด:

https://codepen.io/StrengthandFreedom/pen/qBBoMOX

รุ่งโรจน์ แก้ปัญหา!

หมายเหตุ:คุณสามารถใช้ top . ได้ เพื่อจัดแนวรูปภาพของคุณในแนวตั้งที่ด้านบนของคอนเทนเนอร์หลัก

img {
    align-self: top; 
}

ทั้งสองวิธีจะลบค่าการยืดออกจากรูปภาพของคุณ แต่คุณควรใช้ top หรือ center ขึ้นอยู่กับว่าคุณต้องการทำอะไรกับรูปภาพของคุณ

นานาน่ารู้

รายการแบบยืดหยุ่นมี align-self . เป็นค่าเริ่มต้น ค่าของ stretch . ดังนั้น ไม่ว่า flex-item (องค์ประกอบย่อย) ของคุณจะเป็นรูปภาพหรือองค์ประกอบ HTML อื่น จะถูกขยายในแนวนอนโดยค่าเริ่มต้น