Это потому, что свойство CSS width
(а также свойства max-width
и min-width
) относятся к width содержимого . Содержимое - это то, что находится внутри поля, рамки и отступа в блочной модели .
Если вы посмотрите на начальное свойство вашего div.test_1
, это:
.test_1 {
overflow: hidden;
white-space: nowrap;
padding: 0 10vw;
max-width: 0;
border: 1px solid red;
font: bold 15vmin 'Playfair Display', serif;
}
<div class="test_1">Why hello there</div>
Визуальная ширина элемента на самом деле обусловлена шириной плюс значениями левого и правого отступа 10vw
, плюс ширины левой и правой границ.
Чтобы обойти это, вы можете сделать то, что предложил JasonB.
В качестве альтернативы, вы можете включить заполнение в keyframes
, что также имеет побочный эффект анимации (левой и правой) заливки.
@keyframes leftright {
0% {
padding: 0;
max-width: 0;
}
100% {
padding: 0 10vw;
max-width: 100%;
}
}
.test_1 {
overflow: hidden;
white-space: nowrap;
/* width: 80vw; <-- I removed this as it appears to contradict with max-width */
border: 1px solid red;
font: bold 15vmin 'Playfair Display', serif;
max-width: 100%;
padding: 0 10vw;
animation: leftright 1s;
}
<div class="test_1">Why hello there</div>