CSS绝对定位给图片增加遮罩

设计和交互对Element里面upload上传图片预览样式不满意,同时上传组件的动效bug比较多,影响用户体验,所以对这个组件的样式进行重写。其中涉及到图片增加遮罩的效果。

正常是这样:
在这里插入图片描述

鼠标hover以后是这样:
在这里插入图片描述
那么很明显遮罩的元素肯定是脱离正常文档流的,想要脱离文档流,可以使用绝对定位或者浮动,这里采用绝对定位实现。

有的同学说相对定位应该也能实现吧,确实可以实现,但是有一个问题,相对定位的元素并没有脱离正常文档流,这个元素原来的位置仍然还是保留的,所以图片下面会出现一块空白,影响页面其他元素的布局。

基本的思路如下所示,一个img标签,然后下面加一个div作为遮罩元素,这个元素相对于外面的div进行绝对定位。

<div class="img-preview">
    <img src="https://dss2.bdstatic.com/8_V1bjqh_Q23odCf/pacific/1960537320.jpg" class="img">
    <div class="img-mask">
        +
    </div>
</div>

样式如下

.img-preview {
	width: 200px;
	height: 120px;
    position: relative; /* 遮罩元素相对于这个div进行绝对定位 */
 }
 .img-preview .img {
	width: 200px;
	height: 120px;
	border-radius: 2px;
 }
 .img-preview .img-mask {
	width: 100%;
	height: 100%;
	position: absolute; /* 设置绝对定位 */
	top: 0; /* 设置绝对定位之后还要设置top不然元素还是在图片下面 */
	background: rgba(0,0,0,.7);
	color: white;
	font-size: 30px;
	text-align: center;
	/*box-sizing: border-box;*/
	/*padding: 45px 0;*/
	line-height: 120px;
	opacity: 0;
	transition: opacity .3s ease;
}
.img-preview:hover .img-mask {
	opacity: 1;
}

需要注意的是,设置绝对定位之后,还要加top: 0;,否则遮罩元素还是会出现在图片下方:

在这里插入图片描述
样式中的text-align: center;用于让文案等行内元素水平居中,垂直居中的话方案比较多,因为这边是相当于单行文本,所以采用line-height等于父元素高度的方法。对于单行文本还可以采用padding的方法,由于文本是30px,父盒子高度为120px,所以只要让盒子的内边距等于45px,这样文本就会被挤到盒子的中间,当然这么做的前提是父元素和子元素的高度都是已知,并且设置了box-sizing: border-box的情况下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值