Я хотел бы сделать границу над изображением при наведении курсора мыши, но выполнить ее исключительно с помощью CSS.
Моя структура очень проста:
<div class="outer">
<div class="overlay"></div>
<img />
</div>
Идея состоит в том, что .overlay
получает границу 5 .overlay
и становится видимой, когда мышь нависает над .outer
Изображение может иметь любую ширину/высоту - оно неизвестно и не может быть указано исключительно.
Единственная проблема заключается в том, что из-за законов с образцовой моделью я заканчиваю правую и нижнюю границу, которые отображаются за пределами .outer
потому что 100% width/height
на .overlay
уже покрывают всю ширину outer
.
Чтобы полностью понять, что я пытаюсь объяснить, обратитесь к моему jsFiddle.
Как я могу сделать .overlay
быть как можно более широким и высоким, чтобы отображать рамку полностью над моим изображением? Я ищу решение, совместимое с кросс-браузером, поэтому изменение поведения модели box-model для проблематичного элемента, похоже, не является вариантом.
В отличие от наложения divs
, просто используйте псевдоэлемент :after
. Он работает для динамического содержимого и требует только родительского элемента.
В принципе, просто установите родительский div
для display:inline-block
будет того же размера, что и дочерний. Затем установите :after
содержимого width:100%
/height:100%
- таким образом, размер любого динамического изображения. HTML прост, так как для этого требуется только один родительский div
, нет необходимости в дополнительном overlay
классе.
HTML - чрезвычайно простой - нет избыточности.
<div>
<img src="https://si0.twimg.com/profile_images/2704840564/ace6835dc7c12861b013a8f1ac3b1041.png">
</div>
CSS
div {
display: inline-block;
background: red;
position: relative;
}
img {
vertical-align: top;
}
div:hover:after {
content: "\A";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: 5px solid black;
opacity: 0.75;
background: red;
z-index: 2;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
Вместо width:100%;
и height:100%
, установите right
и bottom
положения на 0px
.
Обратите внимание, что по умолчанию будет меньше поля ниже изображения. Это можно решить любым из этих решений:
display:block
. (См. Этот вопрос)vertical-align
изображения в top
, middle
или bottom
line-height
линии внешнего кадра на 0
CSS
.outer img
{
display:block;
}
.outer:hover .overlay {
position: absolute;
top: 0px;
left: 0px;
right:0px;
bottom:0px;
border: 5px solid white;
opacity: 0.75;
}