2016-05-25 2 views
0

Я недавно обнаружил эту проблему.коробка-размер + граница + абсолютный ребенок

Check for demo on jsfiddle

Что касается меня, схема ведет себя неправильно, не так ли? Не должна ли полевая модель элемента .outside включать его границы, так что позиционированный дочерний элемент absolute также очерчивает эти границы?

Это известная проблема? Это действительно правильное поведение? Если да, может кто-нибудь объяснить мне, почему это так?

What I expected to have as result

Пожалуйста, не комментируйте, как решить эту проблему. Но, пожалуйста, объясните, почему возникает проблема.

Заранее спасибо :)

Привет PHLIPS

+0

вы не установили '' border' но outline' ... то есть проблема – jakob

+0

https://jsfiddle.net/2mytb43a/1/ - теперь с границей - та же проблема – phlipsgeisler

+0

wait .. что вы спрашиваете на самом деле? вы хотите, чтобы граница изнутри div была где? – jakob

ответ

0

Это нормально, потому position: absolute который будет позиционировать элемент относительно контейнера. По умолчанию контейнер является окном браузера, но если у родительского элемента есть position: relative или position: absolute, то он будет действовать как родительский для координаты позиционирования для своих детей.

С родителем, у вас есть 2 атрибута:

border-right: 50px #f5f solid; 
border-bottom: 50px #f5f solid; 

Если вы удалите его, наброски будут полный размер, потому что вы установили 4 атрибуты: top, right, bottom, left 0. (изменить его, чтобы увидеть изменения).

+0

Хорошо, да. Но не должны ли границы находиться внутри моего родительского контейнера из-за 'box-sizing: border-box'? И поэтому дочерний элемент покрывает границы родителя? – phlipsgeisler

+0

Я предполагаю, что вы поняли меня неправильно. С помощью этого кода (https://jsfiddle.net/2mytb43a/) я ожидал этого результата (https://jsfiddle.net/2mytb43a/2). – phlipsgeisler

1

Просто box-sizing: border-box не хватает, вам нужно наследовать ширину и высоту от родителей:

.inside { 
    position: absolute; 
    outline: #00f solid 2px; 
    width: inherit; 
    height: inherit; 
} 

Проверить здесь https://jsfiddle.net/2mytb43a/3/

+0

Хорошо, спасибо. Но почему здесь не работает 'top/left/right/bottom: 0'? – phlipsgeisler

+0

Поскольку вы не задавали ширину/высоту, не было унаследованной ширины/высоты, поэтому ребенок не может знать, что нового размера родителя, который установлен с новым размером окна. – jakob

Смежные вопросы