ปัญหาสามารถแก้ไขได้ด้วยแบบสอบถามสื่อและคณิตศาสตร์บางอย่าง นี่เป็นวิธีแก้ปัญหาสำหรับการวางแนว portait:
@media (max-device-aspect-ratio: 3/4) {
height: calc(100vw * 1.333 - 9%);
}
@media (max-device-aspect-ratio: 2/3) {
height: calc(100vw * 1.5 - 9%);
}
@media (max-device-aspect-ratio: 10/16) {
height: calc(100vw * 1.6 - 9%);
}
@media (max-device-aspect-ratio: 9/16) {
height: calc(100vw * 1.778 - 9%);
}
เนื่องจาก vh จะเปลี่ยนเมื่อแถบ url หายไปคุณต้องกำหนดความสูงอีกวิธีหนึ่ง โชคดีที่ความกว้างของวิวพอร์ตคงที่และอุปกรณ์มือถือมีอัตราส่วนที่ต่างกันเพียงเล็กน้อยเท่านั้น หากคุณสามารถกำหนดความกว้างและอัตราส่วนภาพได้คณิตศาสตร์ขนาดเล็กจะให้ความสูงวิวพอร์ตตรงตามที่ vh ควรทำงาน นี่คือกระบวนการ
1) สร้างชุดการสืบค้นสื่อสำหรับอัตราส่วนภาพที่คุณต้องการกำหนดเป้าหมาย
ใช้อุปกรณ์อัตราส่วนภาพแทนอัตราส่วนกว้างยาวเพราะหลังจะปรับขนาดเมื่อแถบ URL หายไป
ฉันเพิ่ม 'สูงสุด' ลงในอัตราส่วนภาพของอุปกรณ์เพื่อกำหนดเป้าหมายอัตราส่วนภาพใด ๆ ที่เกิดขึ้นเพื่อติดตามระหว่างความนิยมสูงสุด พวกเขาจะไม่แม่นยำ แต่จะมีไว้สำหรับผู้ใช้ส่วนน้อยเท่านั้นและจะยังคงใกล้เคียงกับ vh ที่เหมาะสม
จำคำค้นหาสื่อโดยใช้แนวนอน / แนวตั้งดังนั้นสำหรับการถ่ายคุณจะต้องพลิกตัวเลข
2) สำหรับแต่ละเคียวรี่สื่อบันทึกคูณเปอร์เซ็นต์ของความสูงในแนวดิ่งที่คุณต้องการให้องค์ประกอบอยู่ใน vw ด้วยการย้อนกลับของอัตราส่วนกว้างยาว
- เมื่อคุณทราบความกว้างและอัตราส่วนของความกว้างต่อความสูงคุณเพียงแค่คูณ% ที่คุณต้องการ (100% ในกรณีของคุณ) ด้วยอัตราส่วนของความสูง / ความกว้าง
3) คุณต้องกำหนดความสูงของแถบ URL และลบจากความสูง ฉันไม่พบการวัดที่แน่นอน แต่ฉันใช้ 9% สำหรับอุปกรณ์มือถือในแนวนอนและดูเหมือนว่าจะทำงานได้ดีพอสมควร
นี่ไม่ใช่วิธีการแก้ปัญหาที่หรูหรามาก แต่ตัวเลือกอื่น ๆ ก็ไม่ได้ดีมากนักเนื่องจากเป็น:
การมีเว็บไซต์ของคุณดูเหมือนจะเป็นเรื่องยากสำหรับผู้ใช้
มีองค์ประกอบที่มีขนาดไม่ถูกต้องหรือ
การใช้จาวาสคริปต์สำหรับพื้นฐานบางอย่างสไตล์
ข้อเสียเปรียบคืออุปกรณ์บางอย่างอาจมีความสูงของแถบ URL หรืออัตราส่วนภาพที่แตกต่างจากความนิยมสูงสุด อย่างไรก็ตามการใช้วิธีนี้หากมีอุปกรณ์เพียงเล็กน้อยเท่านั้นที่ได้รับการเพิ่ม / ลบพิกเซลไม่กี่พิกเซลซึ่งดูเหมือนว่าดีกว่าฉันมากสำหรับทุกคนที่มีเว็บไซต์ที่ปรับขนาดเมื่อทำการรูด
เพื่อให้ง่ายขึ้นฉันยังได้สร้าง SASS mixin:
@mixin vh-fix {
@media (max-device-aspect-ratio: 3/4) {
height: calc(100vw * 1.333 - 9%);
}
@media (max-device-aspect-ratio: 2/3) {
height: calc(100vw * 1.5 - 9%);
}
@media (max-device-aspect-ratio: 10/16) {
height: calc(100vw * 1.6 - 9%);
}
@media (max-device-aspect-ratio: 9/16) {
height: calc(100vw * 1.778 - 9%);
}
}