Рамка не работает, div с оверлеем, включая отступы
Я создаю галерею с изображениями, имеющими наложенный темный фон и текст заголовка. Размещение в порядке, но div оверлея выпадает за границы изображения, потому что для элемента контейнера используется отступ.
Я читал об этом в нескольких местах и узнал, что border-box
может решить эту проблему, но это не так. Я что-то здесь не так делаю? Проверьте код:
HTML:
<div class="dest-item">
<img src="http://lorempixel.com/500/400">
<div class="dest-caption">
<div class="dest-text">
<h3>This is a caption</h3>
</div>
</div>
</div>
CSS:
.dest-item{
position:relative;
overflow:hidden;
z-index:1;
padding:10px;
width: 500px;
}
.dest-item img{
width: 100%;
}
.dest-caption{
position: absolute;
top: 0px;
background: rgba(0,0,0,0.2);
z-index: 2;
width: 100%;
height: 100%;
box-sizing: border-box;
}
.dest-text{
position: absolute;
bottom: 0;
background: rgba(255,255,255,0.9);
width: 100%;
padding: 0px 10px;
}
Ссылка для детской площадки: Code Pen
4 ответа
Попробуйте это (разветвите здесь: http://codepen.io/anon/pen/RNqbjB)
CSS:
/*remove the padding*/
.dest-item{
position:relative;
overflow:hidden;
z-index:1;
padding:0px;
width: 500px;
}
HTML:
<!--Add a wrapper and add the padding to that-->
<div style="padding:10px;">
<div class="dest-item">
<img src="http://lorempixel.com/500/400">
<div class="dest-caption">
<div class="dest-text">
<h3>This is a caption</h3>
</div>
</div>
</div>
</div>
Удалить обивка от целого dest-item
дела. Тебе не нужен этот отступ там, как я думаю:
.dest-item {
position: relative;
overflow: hidden;
z-index: 1;
/* padding: 10px; */
width: 500px;
}
Не уверен, что это правильно?
.dest-item{
position:relative;
overflow:hidden;
z-index:0;
padding:10px;
width: 500px;
}
.dest-item img{
width: 100%;
}
.dest-caption{
position: absolute;
top: 0;
left: 0;
background: rgba(0,0,0,0.2);
width: 100%;
height: 100%;
}
.dest-text{
color: black;
position: absolute;
text-shadow: 2px 2px 40px rgba(255,255,255, 1);
bottom: 0;
left: 0;
background: rgba(255,255,255,0.38);
width: 100%;
padding: 2px 0px 10px 20px;
}
<div class="dest-item">
<img src="http://lorempixel.com/500/400">
<div class="dest-caption">
<div class="dest-text">
<h3>This is a caption</h3>
</div>
</div>
</div>
Вам не нужно границу, чтобы делать то, что вы хотите.
Существует 3 типа размеров коробки:
content-box является поведением по умолчанию и включает только ширину и высоту. Он не учитывает отступы или ширину границы. Если у вас есть элемент с шириной 500px + отступы 10px + граница 1px, то размер дисплея всего элемента будет 522px в ширину, а размер доступного пространства для реального контента - 500px.
Поле padding включает отступ, но не границу. Тот же пример, что и выше, если вы используете padding-box, тогда размер дисплея составляет 502px, а доступное пространство содержимого - 480px.
бордюр покрывает все. Таким образом, в нашем примере размер экрана составляет 500 пикселей, а доступное пространство для содержимого - 478 пикселей.
В любом случае поля не учитываются по размеру.
В зависимости от того, как вы хотите, чтобы конечный результат выглядел, тогда вы достигнете этого по-разному, но на основе вашего образца Code Pen, похоже, что вы хотите заполнить весь контейнер элементов, чтобы наложение также покрывало отступ в 10 пикселей. Вы можете сделать это, не меняя размер окна ни для чего.
Во-первых, вам нужно сместить ваш элемент.dest-caption влево на 10 пикселей, чтобы учесть отступы. Затем вам нужно добавить отступы 10px и удалить атрибут border-box.
Как это:
.dest-caption {
position: absolute;
top: 0px;
left: -10px; /* offset */
background: rgba(0,0,0,0.5);
z-index: 2;
width: 100%;
height: 100%;
padding: 10px; /* add padding */
}
Когда это исправлено, ваш текст и его поле не выровнены, а размер поля не очень хорошо контролируется. Это зависит от поля тега H3. Исправьте это, удалив поля из тега H3 внутри любых элементов.dest-text:
.dest-text H3 {
margin: 0px;
}
Без полей на теге H3 текстовое наложение фактически исчезает из области рисования, поскольку оно смещено. Вы можете исправить это, сместив.dest-text снизу на ширину отступа.dest-caption (x2). Возможно, вам также понадобится верхний и нижний отступы для.dest-text.
.dest-text {
position: absolute;
bottom: 20px; /* account for padding on .dest-caption */
background: rgba(255,255,255,0.9);
width: 100%;
padding: 10px 10px; /* add top/bottom padding */
}