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

相关推荐
passerby606115 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了15 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅15 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅16 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅16 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment16 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅16 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊16 小时前
jwt介绍
前端
爱敲代码的小鱼16 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax
Cobyte17 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc