CSS5 | CSS滑动门左扇与右扇图片重叠问题解决

本文中所使用的滑动门背景图片是自己用微软相册手工切的,没用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推拉门按钮的素材图片时也尽可能少的做颜色过渡,这样会使得整体性不好

相关推荐
qq_3901617710 分钟前
防抖函数--应用场景及示例
前端·javascript
John.liu_Test40 分钟前
js下载excel示例demo
前端·javascript·excel
Yaml41 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
PleaSure乐事1 小时前
【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
前端·javascript·react.js·前端框架·webstorm·antdesignpro
哟哟耶耶1 小时前
js-将JavaScript对象或值转换为JSON字符串 JSON.stringify(this.SelectDataListCourse)
前端·javascript·json
getaxiosluo1 小时前
react jsx基本语法,脚手架,父子传参,refs等详解
前端·vue.js·react.js·前端框架·hook·jsx
理想不理想v1 小时前
vue种ref跟reactive的区别?
前端·javascript·vue.js·webpack·前端框架·node.js·ecmascript
知孤云出岫1 小时前
web 渗透学习指南——初学者防入狱篇
前端·网络安全·渗透·web
贩卖纯净水.1 小时前
Chrome调试工具(查看CSS属性)
前端·chrome
栈老师不回家2 小时前
Vue 计算属性和监听器
前端·javascript·vue.js