本文中所使用的滑动门背景图片是自己用微软相册手工切的,没用ps,所以凑乎看吧
首先放出一张目标效果也是最终完成图
下面说问题
CSS推拉门原理
按原理来说,就是两个行内块前后站一行,然后前面的a标签和span标签分别是推拉门素材的左扇部分和右扇部分,然后跟随span的文字内容长度自动加长span背景,看起来就像是在加长,实则只是多放出隐藏的素材图片的剩余部分。
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<style>
* {
margin: 0;
padding: 0;
}
a {
margin: 100px;
height: 49px;
display: inline-block;
background-color: pink;
padding-left: 15px;
}
a span {
height: 49px;
display: inline-block;
background-color: purple;
padding-right: 15px;
}
</style>
</head>
<body>
<a href="#"><span></span></a>
</body>
</html>
然后实际操作的时候问题就出在素材图片上了,我一开始使用的是没有白色背景的纯png抠图图标
yuanjiao-bgimg.png
代码
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>css滑动门原理</title>
<style>
* {
margin: 0;
padding: 0;
}
a {
margin: 100px;
height: 133px;
display: inline-block;
/*千万不能写死宽度,我们要推拉门*/
background: url("../../img/yuanjiao-bgimg.png") no-repeat;
/*background: pink no-repeat;*/
padding-left: 35px;
}
a span {
height: 133px;
display: inline-block;
background: url("../../img/yuanjiao-bgimg.png") no-repeat;
/*background: purple no-repeat;*/
padding-right: 55px;
}
</style>
</head>
<body>
<a href="#">
<span></span>
</a>
</body>
</html>
出来的效果就是这样的
这样就出现素材图片重叠的问题
即使我们将span的素材图片定位到右侧
html
a span {
height: 133px;
display: inline-block;
background: url("../../img/yuanjiao-bgimg.png") no-repeat right;
/*background: purple no-repeat;*/
padding-right: 55px;
}
也是会多出a标签的右侧角出来的
针对这个问题有两种方法
1.给素材图片加上与背景一样的颜色,从素材图片上入手
new-yuanjiao-bgimg.png
这个是修改后的图
从黑色背景上可以看出与原图的区别
因为我们演示背景是纯白的,所以我们图片的边缘背景也是rgb(225,225,225) -> white
重新修改代码
html
a {
margin: 100px;
height: 133px;
display: inline-block;
/*千万不能写死宽度,我们要推拉门*/
background: url("../../img/new-yuanjiao-bgimg.png") no-repeat;
padding-left: 35px;
}
a span {
height: 133px;
display: inline-block;
background: url("../../img/new-yuanjiao-bgimg.png") no-repeat;
padding-right: 55px;
}
这样就是想要的效果了
再把右扇的素材图片定位一下右边,再完善一下代码
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>css滑动门原理</title>
<style>
* {
margin: 0;
padding: 0;
}
a {
margin: 100px;
height: 133px;
display: inline-block;
/*千万不能写死宽度,我们要推拉门*/
background: url("../../img/new-yuanjiao-bgimg.png") no-repeat;
padding-left: 65px;
text-decoration: none;
line-height: 133px;
color: white;
}
a span {
height: 132px;
display: inline-block;
background: url("../../img/new-yuanjiao-bgimg.png") no-repeat right;
padding-right: 65px;
}
</style>
</head>
<body>
<a href="#">
<span>CSS滑动门</span>
</a>
</body>
</html>
刷新浏览器,得到想要的效果
但实际上培训机构的这种做法其实普适性并不强,我要是改了背景颜色我还要改素材图的背景颜色,岂不是很麻烦,所以我想到第二种方案
2.使用原先的png抠图素材,配合border-radius直接把a标签的右边两个多余的角切掉
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<style>
* {
margin: 0;
padding: 0;
}
a {
margin: 100px;
height: 133px;
display: inline-block;
/*千万不能写死宽度,我们要推拉门*/
background: url("../../img/yuanjiao-bgimg.png") no-repeat;
padding-left: 65px;
text-decoration: none;
line-height: 133px;
color: white;
border-radius: 0 50% 50% 0; /*给a标签的右上和右下两个角直接切角*/
}
a span {
height: 133px;
display: inline-block;
background: url("../../img/yuanjiao-bgimg.png") no-repeat right;
padding-right: 65px;
}
</style>
</head>
<body>
<a href="#">
<span>CSS滑动门</span>
</a>
</body>
</html>
也可以得到同样的效果
随着span内的文字增加也会自适应背景图,教程的素材图片左扇其实可以再把padding-left的像素多给一些就会让图片的过渡更自然一些
所以,在选取或者制作css推拉门按钮的素材图片时也尽可能少的做颜色过渡,这样会使得整体性不好