前几天帮朋友改一个小网站,导航按钮里的“预约到店”四个字被临时改成了“预约到店时间”,结果按钮右侧直接鼓出一块,像穿了一件不合身的衬衫,朋友问我:“现在不是都 border-radius 了吗,怎么还能被几个字搞崩?”我笑了笑,说这正好让我想起一个老词——滑动门技术,对,就是那个在前端圈子里曾经很火、后来被新 CSS 特性逐渐盖住风头的技巧。
先别被“技术”两个字吓到,滑动门技术不是自动门,也不是什么神秘算法,它最早是 CSS 网页设计里的一种背景图布局技巧:用两片背景图叠在一起,左边一片固定,右边一片跟着文字长度“滑”过去,从而让按钮或导航在文字变长时依然保持圆角、边框和整体造型,你可以把它想象成两扇推拉门:内容变多,右边的门就往右滑一点,但门框还是完整的,这个思路在当年非常聪明,因为那时没有现在这么方便的圆角、阴影、弹性布局,设计师又想让导航看起来精致,只能靠背景图和 padding 配合。
我真正第一次用滑动门,不是为了做“门”,而是为了救一个旧官网,那会儿公司官网的按钮文案老改,立即咨询”,明天“获取开店方案”,后天又变成“预约演示”,按钮背景是一张带渐变的圆角图,文字一长就露馅:右边圆角被撑开,像被咬了一口,后来我把按钮改成滑动门结构:外层负责左侧背景和左内边距,内层用 background-position: right 放右侧背景,再给右内边距留空间,这样文字短的时候,两片背景重叠得多;文字长的时候,右片被推到该在的位置,圆角仍然完整,改完那天,运营同事又改了一次文案,按钮没崩,我心里那口气才顺下来。
具体原理说起来也不复杂,传统滑动门通常准备两张背景图:一张包含左圆角和左侧主体,另一张包含右圆角和右侧收尾,HTML 里用一个元素包住文字,CSS 给外层设置左侧背景和左 padding,给内层设置右侧背景、右 padding,并让右侧背景靠右定位,文字少时,两张图重叠;文字多时,内层盒子变宽,右侧背景被推到最右边,视觉上就像门被滑开,它的核心不是某一行代码,而是“让背景适应内容,而不是让内容削足适履”。
去年我还给开烘焙工作室的朋友阿琳做过一个预约页,她的导航有“今日出炉”“预约到店”“到店路线”“关于阿琳”几个入口,文字长短不一,她特别喜欢一张手绘风的小圆角导航图,不想换成纯色块,新站本来可以用 flex 加 border-radius 重做,但她那批老客户里还有人用旧手机,页面要稳,我就用了滑动门:左边固定手绘边框,右边跟着字数滑,每个入口都像一块独立的小木牌,上线后阿琳给我发语音,说有个顾客夸“这个菜单像真的挂在店门口”,你看,技术老不老是一回事,视觉和场景合不合适是另一回事。
我必须说说个人观点:滑动门技术今天不是必学项,更不是万能药,现在做新项目,如果只是要圆角按钮、自适应宽度,优先用 border-radius、padding、flex、inline-block,甚至 SVG 背景,维护成本更低,滑动门的缺点也明显:背景图要切得准,文字换行、缩放、不同语言长度都可能出问题;如果还要做 hover 动画、暗色模式、响应式重排,维护起来并不轻松,它更适合几种情况:维护老项目、需要保留复杂背景皮肤、要兼容较旧环境,或者你单纯想理解早期 CSS 设计师怎么用有限工具解决真实问题。
所以我的结论是:滑动门技术可以不当主力,但值得知道。 它真正有价值的地方,不是让你今天还去切两张背景图,而是提醒我们——布局要顺着内容生长,别让内容去迁就固定框子,很多技术会过时,但“让结构有弹性”这个思路不会过时,下次你再看到按钮被几个字撑破,别急着骂 CSS,先想想:我是不是也该给内容留一扇能滑动的门?
