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

相关推荐
张就是我1065921 小时前
DOMPurify 的一个漏洞:你以为 {} 是空的?
前端
疯狂的魔鬼2 小时前
一套 Schema 驱动四视图:记 useCrudSchemas 的设计与实践
前端·javascript·typescript
风骏时光牛马2 小时前
大模型开发工具高频故障与实操问题汇总代码案例大全
前端
没落英雄2 小时前
2. 让 Agent 能读写文件、执行命令 —— LocalShellBackend 实战
前端·人工智能·架构
白雾茫茫丶2 小时前
探索 Nuxt.js 全栈能力:用 Better-Auth 打造类型安全的 RBAC 权限系统
前端·vue.js·nuxt.js
奇奇怪怪的2 小时前
检索增强——混合检索、Re-rank 与 Query 优化
前端
user62229864925812 小时前
React 常用技术知识全景:从组件到 Hooks 的系统理解
前端
麻辣凉茶2 小时前
给阿嬤一封来自云端的信(上)
前端·node.js
前端缘梦2 小时前
LangGraph 实战:从 0 到 1 构建 AI 代码生成工作流
前端·程序员·全栈