Относительные отступы и единицы измерения vh - ошибка или спецификация?
Иногда я создаю квадрат (или любой прямоугольник, на самом деле), который будет уважать его соотношение при любом размере, используя метод, подобный этому.
Что я хочу:
- для предотвращения выхода квадрата за пределы области просмотра на устройствах с небольшой высотой, т.е. на мобильных телефонах в альбомной ориентации
Предложенное решение
- ограничить ширину квадрата в процентах от высоты области просмотра, используя
max-width: 90vh
- ожидайте, что отношение будет соблюдаться
CSS
.square {
position: relative;
height: 0;
padding-bottom: 100%;
overflow: hidden;
}
.square-inner {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.mw { max-width: 90vh;} /* solution, but makes things break */
HTML
<div class="square mw">
<div class="square-inner"></div>
</div>
Что должно произойти
- в окнах просмотра с небольшой высотой квадрат должен иметь максимальную ширину 90% от высоты окна просмотра
Что на самом деле происходит:
- когда высота окна просмотра меньше ширины квадрата:
- ширина ограничена согласно
vh
значение - высота рассчитывается по ширине квадрата, если бы она не была ограничена
vh
- мы получаем вертикально длинный прямоугольник
- ширина ограничена согласно
В спецификации сказано, что относительное значение вычисляется из "содержащего блока", которое, как мне кажется, должно быть текущей шириной контейнера.
Поведение браузера:
- Chrome 29.0.1547.65: как описано
- Firefox 23.01: как описано
Opera: вообще не уважает vhНе проверено с Opera 16+
Я неправильно интерпретирую спецификацию, или это возможная ошибка в реализации поставщиками браузеров?
2 ответа
Проблема заключается в использовании обеих длин в% и vh.
Попробуй это:
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
font-family: sans-serif;
font-weight: 100;
}
.neat {
width: 50%;
max-width: 600px;
min-width: 320px;
margin: 0 auto;
}
.col {
float: left;
padding: 2rem;
width: 90vh; /*** Important bit changed width:50%; to width:90vh; ***/
max-width: 50%; /*** Important bit added max-width:50%; ***/
}
.square {
position: relative;
height: 0;
padding-bottom: 100%;
overflow: hidden;
}
.square-inner {
position: absolute;
background-color: #333333;
color: white;
top: 0;
bottom: 0;
left: 0;
right: 0;
padding: 1.5rem;
}
.mw {
max-width: 90vh;
}
Я не думаю, что Opera поддерживает VH, и есть известные проблемы. Мне интересно, влияет ли эта ошибка на то, что вы видите: http://code.google.com/p/chromium/issues/detail?id=124331.