Медиа-запросы для покрытия всех основных ПК и ноутбуков соотношение сторон

Я хочу построить некоторые медиа-запросы, чтобы охватить большую часть соотношения сторон для ПК/ноутбуков.

моя первая попытка была такой:

@media screen and (min-device-aspect-ratio: 4/3){
     header::after{
         content: '4/3';
     }

 }

@media screen and (min-device-aspect-ratio: 16/9){
      header::after{
         content: '16/9';
     }
 }

 @media screen and (min-device-aspect-ratio: 16/10){
      header::after{
         content: '16/10';
     }
 }

Я тестировал эти запросы с ноутбука с разрешением 1366x768, которое составляет соотношение сторон 16/9, вместо этого выполняется последний запрос 16/10.

я мог бы сделать это классическим способом , с:

@media (min-width:1025px) { /* big landscape tablets, laptops, and desktops */ }
@media (min-width:1281px) { /* hi-res laptops and desktops */ }

но я думаю, что отзывчивый дизайн должен больше ориентироваться на соотношение сторон чем ширина экрана, потому что это большая разница между 4:3 и широкими 16/9 , или, может быть, я неправильно понял концепцию отзывчивого дизайна, но это то, что я думаю.

2 ответов


идея отзывчивого дизайна просто такова: ваш дизайн реагирует на изменения или даже изменения по требованию в средствах массовой информации, которые потребляют ваш дизайн. Если вы делаете это, глядя на разрешение экрана или соотношение сторон экрана полностью деталь реализации, и не очень уместно.

коэффициент 16/9 оценивается в 1,777... при этом соотношение 16/10 оценивается в 1,6. Поскольку коэффициент 16/9 явно больше, чем 16/10, все, что min-device-aspect-ratio: 16/9 по необходимости также min-device-aspect-ratio: 16/10.

решение состоит в том, чтобы поставить запрос 16/10 перед 16/9, чтобы все отношения были в порядке возрастания:

@media screen and (min-device-aspect-ratio: 4/3) {
    header::after {
        content: '4/3';
    }
}

@media screen and (min-device-aspect-ratio: 16/10) {
    header::after {
        content: '16/10';
    }
}

@media screen and (min-device-aspect-ratio: 16/9) {
    header::after {
        content: '16/9';
    }
}

см. мой ответ на этот вопрос для объяснения того, как это работает.


чтобы решить выполнение 16/10, когда 16/9 активен, вы должны определить device-aspect-ratio вместо min-device-aspect-ratio, потому что вы говорите браузеру, что оба из них (16/10 и 16/9) являются допустимыми кодами, и он выполняет последнее определение.

 @media screen  and (device-aspect-ratio: 16/9) {
     /* execute only in 16/9 */
 }

 @media screen  and (device-aspect-ratio: 16/10) {
     /* execute only in 16/10 */
 }

издание

как сказал Бог (MDN),device-aspect-ratio устарела и мы должны использовать . Он принимает min и max префиксы.