Подтвердить что ты не робот

Почему box-sizing: border-box все еще показывает границу с шириной 0px?

При использовании box-sizing: border-box в CSS, я предполагаю, что общая ширина элемента будет определена в его значении "ширина". Поэтому, если я скажу, что ширина деления составляет 20 пикселей, а правая граница - 10 пикселей, в итоге я получаю поле размером 20 пикселей, а половина - это правая граница. Нажав ее до той точки, где я установил ширину в 10 пикселей и правую рамку, тоже здесь:

#box{
    overflow: hidden;
    width: 10px;
    box-sizing: border-box;
    height: 100px;
    background: black;
    border-right: 10px solid red;
}​

поле будет состоять только из красной границы. Что должно произойти, когда я устанавливаю ширину на 0px? Я думал, что все это исчезнет, ​​но нет, результат точно такой же, как и выше: jsFiddle

Мой вопрос в том, является ли это ожидаемым поведением. Мне кажется непоследовательным. Я бы хотел, чтобы окно исчезло, только манипулируя шириной/высотой. Спасибо за любой вклад.

4b9b3361

Ответ 1

Область содержимого оставлена ​​после вычитания ширины границы.

Ширина и высота содержимого вычисляются путем вычитания границы и ширины заполнения соответствующих сторон от указанной ширины и 'свойства высоты.

Указанная ширина = 10 px
ширина границы = 10 пикселей
Ширина содержимого = заданная ширина (10 пикселей) - ширина границы (10 пикселей)
Ширина содержимого 10 - 10 = 0

Указанная ширина = 0 px
ширина границы = 10 пикселей
Ширина содержимого = заданная ширина (0 пикселей) - ширина границы (10 пикселей)
Ширина содержимого 0 - 10 = -10 (что позволит удалить 10 пикселей, используемых границей)

Но

Поскольку ширина и высота содержимого не могут быть отрицательными ([CSS21], раздел 10.2), это вычисление выполняется на уровне 0.

Указанная ширина = 0 px
ширина границы = 10 пикселей
Ширина содержимого = заданная ширина (0 пикселей) - ширина границы (10 пикселей)
Ширина содержимого 0 - 10 = 0 (что не удаляет 10 пикселей, используемых границей)

Если вы не хотите использовать display:none; или visibility:hidden;, вам нужно установить равные нулю значения width:XX; и border-right:XX;.

Ответ 2

Взгляните на этот снимок экрана:

box metrics

Весь ящик 100x100px, как и следовало ожидать, но фактическая ширина - это 90px + 10px правая граница. Поэтому, когда вы устанавливаете ширину в 0, ширина по-прежнему равна 0 (не может иметь отрицательную ширину), но у вас все еще есть граница 10px.