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推拉门按钮的素材图片时也尽可能少的做颜色过渡,这样会使得整体性不好

相关推荐
老程序员刘飞1 天前
node.js 和npm 搭建项目基本流程
前端·npm·node.js
歪歪1001 天前
在C#中除了按属性排序,集合可视化器还有哪些辅助筛选的方法?
开发语言·前端·ide·c#·visual studio
wangbing11251 天前
开发指南139-VUE里的高级糖块
前端·javascript·vue.js
半桶水专家1 天前
Vue 3 动态组件详解
前端·javascript·vue.js
csj501 天前
前端基础之《React(6)—webpack简介-图片模块处理》
前端·react
我有一棵树1 天前
避免 JS 报错阻塞 Vue 组件渲染:以 window.jsbridge 和 el-tooltip 为例
前端·javascript·vue.js
Fanfffff7201 天前
前端样式局部作用域:从Scoped到CSS Modules 的完整指南
前端·css
前端大神之路1 天前
vue2 模版编译原理
前端
00后程序员张1 天前
Web 前端工具全流程指南 从开发到调试的完整生态体系
android·前端·ios·小程序·uni-app·iphone·webview
凌泽1 天前
写了那么多年的代码,我开始写“规范”了:AI 驱动的开发范式革命
前端·vibecoding