วิธีการตรวจจับการวางแนวอุปกรณ์โดยใช้คิวรี่สื่อ CSS?


159

ใน JavaScript โหมดการวางแนวสามารถตรวจจับได้โดยใช้:

if (window.innerHeight > window.innerWidth) {
    portrait = true;
} else {
    portrait = false;
}

อย่างไรก็ตามมีวิธีตรวจจับทิศทางโดยใช้ CSS เท่านั้นหรือไม่

เช่น. สิ่งที่ต้องการ:

@media only screen and (width > height) { ... }

คำตอบ:


435

CSS เพื่อตรวจจับการวางแนวหน้าจอ:

 @media screen and (orientation:portrait) {  }
 @media screen and (orientation:landscape) {  }

นิยาม CSS ของเคียวรีสื่อบันทึกอยู่ที่http://www.w3.org/TR/css3-mediaqueries/#orientation


66
หมายเหตุ: ค่านี้ไม่สอดคล้องกับการวางแนวอุปกรณ์จริง การเปิดคีย์บอร์ดอ่อนบนอุปกรณ์ส่วนใหญ่ในแนวตั้งจะทำให้วิวพอร์ตกว้างกว่าที่เป็นสูงจึงทำให้เบราว์เซอร์ใช้สไตล์แนวนอนแทนที่จะเป็นแนวตั้ง
Johann Combrink

9
@JohannCombrink สำคัญมากที่คุณพูดถึงเรื่องนี้ การเปิดแป้นพิมพ์จะทำให้การออกแบบแย่ลง ดีที่คุณชี้เรื่องนี้
lowtechsun

การอ้างอิงสำหรับความคิดเห็นของ @ JohannCombrink: stackoverflow.com/q/8883163/363448
ndequeker

4
อาจไม่ใช่เรื่องดีที่จะใช้สไตล์ที่แตกต่างเมื่อแป้นพิมพ์โผล่ขึ้นมาเนื่องจากพื้นที่ที่มองเห็นนั้นเหมาะสมกว่าสำหรับสไตล์ที่ใช้กับโหมดแนวนอน ดังนั้นอาจไม่ใช่คนเกียจคร้าน
มูฮัมหมัดบินยุสรัตน์

ฉันชอบความคิดเห็นของ Muhammad: หากแป้นพิมพ์ซอฟต์แวร์ทำให้วิวพอร์ตสั้นกว่าความกว้างดังนั้นวิวพอร์ตจึงเป็นแนวนอน (แม้ว่าคุณจะถืออุปกรณ์ทางกายภาพตามปกติ) CSS ทำงานได้ตามที่ตั้งใจไว้ในความคิดของฉัน
Benny

36
@media all and (orientation:portrait) {
/* Style adjustments for portrait mode goes here */
}

@media all and (orientation:landscape) {
  /* Style adjustments for landscape mode goes here */
}

แต่ดูเหมือนว่าคุณต้องทำการทดสอบ


1
การวางแนวขึ้นอยู่กับอุปกรณ์ แท็บเล็ตบางรุ่นรายงานการวางแนว = 0 เมื่ออยู่ในโหมดแนวนอน iPhone รายงานแตกต่างจาก Samsung Galaxies
BlackMagic

21

ฉันคิดว่าเราต้องเขียนข้อความค้นหาสื่อเฉพาะเจาะจงมากขึ้น ตรวจสอบให้แน่ใจว่าคุณเขียนข้อความค้นหาสื่อหนึ่งรายการควรไม่ส่งผลกระทบต่อมุมมองอื่น (Mob, Tab, โต๊ะทำงาน) มิฉะนั้นอาจเป็นปัญหาได้ ฉันอยากจะแนะนำให้เขียนข้อความค้นหาสื่อพื้นฐานหนึ่งข้อความสำหรับอุปกรณ์ที่เกี่ยวข้องซึ่งครอบคลุมทั้งข้อความค้นหาและสื่อบันทึกการปฐมนิเทศหนึ่งรายการที่คุณสามารถระบุรหัสเพิ่มเติมเกี่ยวกับมุมมองการปฐมนิเทศเพื่อการปฏิบัติที่ดี เราไม่จำเป็นต้องเขียนข้อความค้นหาการวางแนวสื่อทั้งสองในเวลาเดียวกัน คุณสามารถดูตัวอย่างด้านล่างของฉัน ฉันขอโทษถ้าการเขียนภาษาอังกฤษของฉันไม่ค่อยดีนัก Ex:

สำหรับมือถือ

@media screen and (max-width:767px) {

..This is basic media query for respective device.In to this media query  CSS code cover the both view landscape and portrait view.

}


@media screen and (min-width:320px) and (max-width:767px) and (orientation:landscape) {


..This orientation media query. In to this orientation media query you can specify more about CSS code for landscape view.

}

สำหรับแท็บเล็ต

@media screen and (max-width:1024px){
..This is basic media query for respective device.In to this media query  CSS code cover the both view landscape and portrait view.
}
@media screen and (min-width:768px) and (max-width:1024px) and (orientation:landscape){

..This orientation media query. In to this orientation media query you can specify more about CSS code for landscape view.

}

เดสก์ทอป

ทำให้ตามความต้องการของคุณสนุกกับการออกแบบ ... (:

ขอบคุณ Jitu


4

ฉันต้องการอัตราส่วนภาพมันมีความเป็นไปได้มากขึ้น

/* Exact aspect ratio */
@media (aspect-ratio: 2/1) {
    ...
}

/* Minimum aspect ratio */
@media (min-aspect-ratio: 16/9) {
    ...
}

/* Maximum aspect ratio */
@media (max-aspect-ratio: 8/5) {
    ...
}

ทั้งการวางแนวและอัตราส่วนกว้างยาวขึ้นอยู่กับขนาดที่แท้จริงของวิวพอร์ตและไม่มีอะไรที่ต้องทำกับการวางแนวอุปกรณ์

อ่านเพิ่มเติม: https://dev.to/ananyaneogi/useful-css-media-query-features-o7f


0

ใน Javascript มันจะดีกว่าที่จะใช้และscreen.width screen.heightค่าทั้งสองนี้มีอยู่ในเบราว์เซอร์สมัยใหม่ทั้งหมด มันให้มิติที่แท้จริงของหน้าจอแม้ว่าเบราว์เซอร์จะถูกลดขนาดลงเมื่อแอพเริ่มทำงาน window.innerWidthการเปลี่ยนแปลงเมื่อเบราว์เซอร์ลดขนาดลงซึ่งไม่สามารถเกิดขึ้นได้บนอุปกรณ์มือถือ แต่สามารถเกิดขึ้นได้บนพีซีและแล็ปท็อป

ค่าของscreen.widthและscreen.heightเปลี่ยนเมื่ออุปกรณ์มือถือพลิกระหว่างโหมดแนวตั้งและแนวนอนดังนั้นจึงเป็นไปได้ที่จะกำหนดโหมดโดยการเปรียบเทียบค่า ถ้าscreen.widthมากกว่า 1280px คุณกำลังติดต่อกับพีซีหรือแล็ปท็อป

คุณสามารถสร้างฟังเหตุการณ์ใน Javascript เพื่อตรวจสอบเมื่อทั้งสองค่าพลิก ค่าแบนด์วิดท์หน้าจอแนวตั้งที่จะเน้นคือ 320px (ส่วนใหญ่เป็น iPhones), 360px (โทรศัพท์ส่วนใหญ่อื่น ๆ ), 768px (แท็บเล็ตขนาดเล็ก) และ 800px (แท็บเล็ตทั่วไป)


เป็นสิ่งสำคัญที่จะต้องทราบว่า iOS จะไม่พลิกscreen.widthและscreen.heightค่าเมื่อ iPhone หมุน มันจะรายงานค่าเดียวกันเสมอ คุณต้องใช้window.orientationคุณสมบัติเพื่อตรวจสอบว่าอุปกรณ์หมุน ... (ค่าจะเป็น 90 หรือ -90 สำหรับโหมดแนวนอน)
interDist
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.