นี่คือเทคนิคองค์ประกอบแบบอินไลน์ชิดภายในเป็นผู้ปกครอง , แนวนอนและแนวตั้งในเวลาเดียวกัน:
การจัดตำแหน่งแนวตั้ง
1)ในวิธีการนี้เราสร้างinline-block
หลอก) องค์ประกอบเป็นครั้งแรก (หรือที่ผ่านมา) เด็กของ ( พ่อแม่และการตั้งค่าของheight
คุณสมบัติการ100%
ที่จะใช้ทั้งหมดความสูงของพ่อแม่
2)นอกจากนี้การเพิ่มvertical-align: middle
จะช่วยให้องค์ประกอบแบบอินไลน์ (-block) อยู่ตรงกลางของพื้นที่บรรทัด ดังนั้นเราเพิ่มการประกาศ CSS นั้นลงในลูกคนแรกและองค์ประกอบของเรา ( ภาพ ) ทั้งคู่
3)ในที่สุดเพื่อที่จะลบตัวอักษร white space ระหว่างองค์ประกอบinline (-block)เราสามารถกำหนดขนาดตัวอักษรของparentเป็นศูนย์font-size: 0;
ได้
หมายเหตุ:ฉันใช้เทคนิคการแทนที่รูปภาพของ Nicolas Gallagher ในเรื่องต่อไปนี้
ประโยชน์คืออะไร
- ภาชนะ ( ผู้ปกครอง ) สามารถมีมิติแบบไดนามิก
ไม่จำเป็นต้องระบุขนาดขององค์ประกอบรูปภาพอย่างชัดเจน
เราสามารถใช้วิธีการนี้ในการจัด<div>
องค์ประกอบในแนวตั้งเช่นกัน; ซึ่งอาจมีเนื้อหาแบบไดนามิก (ความสูงและ / หรือความกว้าง) แต่โปรดทราบว่าคุณต้องตั้งค่าfont-size
คุณสมบัติของdiv
เพื่อแสดงข้อความภายในอีกครั้ง สาธิตออนไลน์
<div class="container">
<div id="element"> ... </div>
</div>
.container {
height: 300px;
text-align: center; /* align the inline(-block) elements horizontally */
font: 0/0 a; /* remove the gap between inline(-block) elements */
}
.container:before { /* create a full-height inline block pseudo=element */
content: ' ';
display: inline-block;
vertical-align: middle; /* vertical alignment of the inline element */
height: 100%;
}
#element {
display: inline-block;
vertical-align: middle; /* vertical alignment of the inline element */
font: 16px/1 Arial sans-serif; /* <-- reset the font property */
}
ผลลัพธ์
คอนเทนเนอร์ที่ตอบสนอง
ส่วนนี้จะไม่ตอบคำถามเนื่องจาก OP ทราบวิธีสร้างคอนเทนเนอร์ที่ตอบสนองแล้ว อย่างไรก็ตามฉันจะอธิบายวิธีการทำงาน
เพื่อที่จะทำให้ความสูงขององค์ประกอบคอนเทนเนอร์เปลี่ยนไปตามความกว้างของมัน(เทียบกับอัตราส่วนภาพ) เราสามารถใช้ค่าเปอร์เซ็นต์สำหรับpadding
คุณสมบัติด้านบน / ล่าง
ค่าเปอร์เซ็นต์ด้านบน padding / ล่างหรืออัตรากำไรขั้นต้นจะสัมพันธ์กับความกว้างของบล็อกที่มี
ตัวอย่างเช่น
.responsive-container {
width: 60%;
padding-top: 60%; /* 1:1 Height is the same as the width */
padding-top: 100%; /* width:height = 60:100 or 3:5 */
padding-top: 45%; /* = 60% * 3/4 , width:height = 4:3 */
padding-top: 33.75%; /* = 60% * 9/16, width:height = 16:9 */
}
นี่คือการสาธิตออนไลน์ แสดงความคิดเห็นออกจากด้านล่างและปรับขนาดแผงเพื่อดูผลกระทบ
นอกจากนี้เรายังสามารถใช้padding
คุณสมบัตินี้กับเด็กจำลองหรือองค์ประกอบ:before
/ :after
หลอกเพื่อให้ได้ผลลัพธ์เดียวกัน แต่โปรดทราบว่าในกรณีนี้ค่าเปอร์เซ็นต์padding
จะสัมพันธ์กับความกว้างของ.responsive-container
ตัวเอง
<div class="responsive-container">
<div class="dummy"></div>
</div>
.responsive-container { width: 60%; }
.responsive-container .dummy {
padding-top: 100%; /* 1:1 square */
padding-top: 75%; /* w:h = 4:3 */
padding-top: 56.25%; /* w:h = 16:9 */
}
สาธิต # 1
การสาธิต # 2 (การใช้:after
องค์ประกอบหลอก)
การเพิ่มเนื้อหา
การใช้padding-top
คุณสมบัติที่ทำให้เกิดช่องว่างขนาดใหญ่ที่ด้านบนหรือด้านล่างของเนื้อหาภายในภาชนะ
เพื่อที่จะแก้ไขปัญหาที่เรามีห่อเนื้อหาโดยองค์ประกอบห่อหุ้มเอาองค์ประกอบที่มาจากกระแสปกติเอกสารโดยใช้ตำแหน่งแน่นอนและในที่สุดก็ขยายเสื้อคลุม (bu ใช้top
, right
, bottom
และleft
คุณสมบัติ) เพื่อเติมเต็มพื้นที่ทั้งหมดของแม่ภาชนะ
ไปเลย:
.responsive-container {
width: 60%;
position: relative;
}
.responsive-container .wrapper {
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
}
นี่คือการสาธิตออนไลน์
รวมเข้าด้วยกัน
<div class="responsive-container">
<div class="dummy"></div>
<div class="img-container">
<img src="http://placehold.it/150x150" alt="">
</div>
</div>
.img-container {
text-align:center; /* Align center inline elements */
font: 0/0 a; /* Hide the characters like spaces */
}
.img-container:before {
content: ' ';
display: inline-block;
vertical-align: middle;
height: 100%;
}
.img-container img {
vertical-align: middle;
display: inline-block;
}
นี่คือการทำงาน DEMO
เห็นได้ชัดว่าคุณสามารถหลีกเลี่ยงการใช้::before
องค์ประกอบหลอกสำหรับความเข้ากันได้ของเบราว์เซอร์และสร้างองค์ประกอบเป็นลูกคนแรกของ.img-container
:
<div class="img-container">
<div class="centerer"></div>
<img src="http://placehold.it/150x150" alt="">
</div>
.img-container .centerer {
display: inline-block;
vertical-align: middle;
height: 100%;
}
อัปเดตเดโม
การใช้max-*
คุณสมบัติ
ในการเก็บภาพไว้ในกล่องในความกว้างต่ำกว่าคุณสามารถตั้งค่าmax-height
และmax-width
คุณสมบัติในภาพ:
.img-container img {
vertical-align: middle;
display: inline-block;
max-height: 100%; /* <-- Set maximum height to 100% of its parent */
max-width: 100%; /* <-- Set maximum width to 100% of its parent */
}
นี่คือการสาธิตการปรับปรุง