เหตุใด Bootstrap 3 จึงเปลี่ยนไปใช้ box-sizing: border-box


98

ฉันกำลังย้ายธีม Bootstrap ของฉันจาก v2.3.2 เป็น v3.0.0 และสิ่งหนึ่งที่ฉันสังเกตเห็นคือมิติข้อมูลจำนวนมากถูกคำนวณแตกต่างกันเนื่องจากสไตล์ต่อไปนี้ใน bootstrap.css

*,
*:before,
*:after {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

ใครช่วยอธิบายได้ไหมว่าทำไม Bootstrap ถึงเปลี่ยนขนาดกล่องขององค์ประกอบทั้งหมดเป็น border-box ฉันสงสัยว่ามันเกี่ยวข้องกับระบบกริดใหม่ที่เป็นเปอร์เซ็นต์ แต่ตัวเลือกด้านบนไม่ได้ใช้กับองค์ประกอบกริดเท่านั้น

ดูเหมือน imho ที่รุนแรงไปหน่อย :-)

ใครสนใจให้ข้อมูลเชิงลึกบ้าง?


11
ขอบคุณสำหรับข้อมูลโค้ด CSS มันคือสิ่งที่ฉันต้องการเพื่อนำสิ่งนี้ไปใช้กับโครงการที่ไม่ใช่ bootstrap :)
berto

มีใครรู้บ้างว่าทำไมต้องใช้ *: before และ *: after?
limscoder

2
@limscoder *:beforeและ*:afterจำเป็นต้องใช้โมเดลกล่องนี้กับองค์ประกอบ:beforeและ:afterหลอก
buschtoens

1
ตัวเลือก * ทำให้นักพัฒนาใช้ content-box หรือ padding-box ที่อื่นใน CSS ได้ยาก แนวทางปฏิบัติที่ดีที่สุดในการเริ่มโครงการใหม่ตั้งแต่ต้นคือ html { box-sizing: border-box; } *, *:before, *:after { box-sizing: inherit; }
Jarek Przygódzki

คำตอบ:


103

บันทึกประจำรุ่นบอกคุณ: ( http://blog.getbootstrap.com/2013/08/19/bootstrap-3-released/ )

โมเดลกล่องที่ดีขึ้นโดยค่าเริ่มต้น ทุกสิ่งใน Bootstrap ได้รับการปรับขนาดกล่อง: border-box ทำให้ตัวเลือกการปรับขนาดง่ายขึ้นและระบบกริดที่ปรับปรุงแล้ว

โดยส่วนตัวฉันคิดว่าผลประโยชน์ส่วนใหญ่ไปที่ระบบกริด ใน Bootstrap ของ Twitter กริดทั้งหมดเป็นของเหลว คอลัมน์ถูกกำหนดเป็นเปอร์เซ็นต์ของความกว้างทั้งหมด แต่รางน้ำมีความกว้างคงที่เป็นพิกเซล โดยค่าเริ่มต้นช่องว่าง 15px ทั้งสองด้านของคอลัมน์ การรวมกันของความกว้างเป็นพิกเซลและเปอร์เซ็นต์อาจซับซ้อน ด้วยborder-boxการคำนวณนี้เป็นเรื่องง่ายเนื่องจากborder-boxค่า (ตรงข้ามกับค่าเริ่มต้นของกล่องเนื้อหา) ทำให้กล่องที่แสดงผลขั้นสุดท้ายเป็นความกว้างที่ประกาศไว้และเส้นขอบและช่องว่างภายในกล่องจะถูกตัดออก ( http://css-tricks.com/box-sizing/ )

อ่านเพิ่มเติม: http://www.paulirish.com/2012/box-sizing-border-box-ftw/


57
ตัวอย่างง่ายๆลองวางเส้นขอบ 1 พิกเซลบนกว้าง div 100% content-boxด้วย ตอนนี้คุณมีบางอย่างที่มีขนาด 100% + 2 พิกเซล ด้วยborder-boxคุณไม่มีปัญหานั้นยังคง 100%
emptywalls

1
การอภิปรายเพิ่มเติมและเหตุผลที่ดีในปัญหานี้
yuvilio

1
นอกจากนี้ควรสังเกตว่าแนวทางปฏิบัติที่ดีที่สุดในการปรับขนาดกล่องได้รับการอัปเดตเพื่อไม่ให้รบกวนไลบรารีของบุคคลที่สาม ฉันไม่แน่ใจว่า Bootstrap มีแผนจะอัปเดตหรือไม่ แต่ควร: css-tricks.com/…
jbyrd

2
ส่วนตัวไม่เคยเปลี่ยนรุ่นกล่องเลยตั้งแต่ IE6 นั่นเป็นสิ่งเดียวที่ IE รู้ดีกว่า และใช่วันนี้คุณมี calc () เพื่อแก้ไขปัญหาเหล่านั้น 100% บวก 2 พิกเซล แต่วิถีของซามูไรมักจะเป็นกรอบชายแดนที่มีเส้นขอบและช่องว่างภายในรวมอยู่ด้วย นั่นคือวิธีที่สมองของมนุษย์จินตนาการถึงกล่อง ฉันชอบที่จะเห็น "เทรนด์ใหม่" นี้ฉันมีเครื่องดื่มต้อนรับสำหรับพวกเขา
dkellner
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.