[英]Create border for overlay element as child of parent with dynamic width and height
我想在鼠標懸停時在圖像上渲染邊框,但僅使用CSS完成它。
我的結構非常簡單:
<div class="outer">
<div class="overlay"></div>
<img />
</div>
我們的想法是.overlay
獲得一個5px邊框,當鼠標懸停在.outer
時變為可見
圖像可以是任何寬度/高度 - 它是未知的,不能單獨指定。
唯一的問題是,由於箱模型法我右邊和底部邊框最終被渲染之外.outer
因為100% width / height
上.overlay
已經覆蓋的整個寬度outer
。
為了完全理解我想要解釋的內容, 請參閱我的jsFiddle 。
為了在我的圖像上方顯示邊框,我如何才能使.overlay
完全如所需的那么寬和高? 我正在尋找一個跨瀏覽器兼容的解決方案,因此修改有問題的元素的框模型行為似乎不是一個選項。
與覆蓋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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.