如何用CSS制作不依赖背景的伪元素按钮?
制作不依赖外部背景色的自定义斜切按钮
你的问题出在之前的方案用白色伪元素模拟“裁切”效果,但这个白色必须和按钮所在的外部背景完全一致——换图片或渐变背景后,白色块和背景不匹配,自然就露馅了。要做能适配任意背景的按钮,核心是让按钮的所有视觉效果都由自身元素实现,不依赖外部背景色。
解决方案:用CSS skew变换实现内部斜切块
直接在按钮内部通过伪元素制作斜切色块,所有颜色都是按钮自身的一部分,完全不依赖外部背景:
.teno-btn { border: none; display: block; text-align: center; cursor: pointer; text-transform: uppercase; outline: none; position: relative; color: #fff; font-weight: 700; font-size: 15px; background-color: #000644; padding: 17px 40px; margin: 0 auto; } .teno-btn span { position: relative; z-index: 1; /* 确保文字在色块上方 */ } /* 左侧绿色斜切块 */ .teno-btn:before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 30px; background: #5ceb95; transform: skewX(45deg); /* 斜切变换 */ transform-origin: top left; } /* 左侧白色斜切块 */ .teno-btn:after { content: ""; position: absolute; left: 25px; top: 0; bottom: 0; width: 30px; background: #fff; transform: skewX(45deg); transform-origin: top left; }
<button class="teno-btn"> <span> Download Now </span> </button>
方案说明
- 去掉了原方案的
overflow: hidden,因为两个伪元素都在按钮内部,不需要隐藏外部元素 - 用
skewX(45deg)给伪元素做斜切,通过left和width调整色块的位置和大小,实现你想要的左侧双斜块效果 - 所有色块都是按钮的内部元素,不管按钮放在图片、渐变还是任何背景上,都不会出现颜色冲突问题
如果想要更精细的斜切角度,只需调整skewX的度数,或者修改transform-origin来改变斜切的基准点。
内容的提问来源于stack exchange,提问作者Asma Binta Younus
相关产品推荐
相关产品推荐

