如何用CSS实现4个披萨切片样式的实心按钮?
披萨切片形状按钮实现方案
实现思路
放弃使用skew属性,改用clip-path直接定义扇形路径,结合绝对定位与旋转实现4个均等分的披萨切片按钮,同时通过border或伪元素设置实心侧边。
代码示例
HTML结构
<div class="pizza-container"> <button class="pizza-slice slice-1">切片1</button> <button class="pizza-slice slice-2">切片2</button> <button class="pizza-slice slice-3">切片3</button> <button class="pizza-slice slice-4">切片4</button> </div>
CSS样式
.pizza-container { width: 300px; height: 300px; border-radius: 50%; position: relative; margin: 50px auto; overflow: hidden; } .pizza-slice { position: absolute; width: 100%; height: 100%; border: 2px solid #000; /* 实心侧边边框 */ background-color: #ffcc80; cursor: pointer; border-radius: 50%; clip-path: polygon(50% 50%, 100% 0%, 100% 100%); display: flex; align-items: center; justify-content: center; font-size: 18px; border: none; } /* 旋转每个切片到对应位置 */ .slice-1 { transform: rotate(0deg); } .slice-2 { transform: rotate(90deg); } .slice-3 { transform: rotate(180deg); } .slice-4 { transform: rotate(270deg); } /* 伪元素实现精准实心侧边 */ .pizza-slice::before, .pizza-slice::after { content: ''; position: absolute; background-color: #000; } .pizza-slice::before { width: 2px; height: 100%; left: 50%; top: 0; transform-origin: top center; } .pizza-slice::after { width: 100%; height: 2px; top: 50%; left: 0; transform-origin: left center; } .slice-1::before { transform: rotate(0deg); } .slice-1::after { transform: rotate(0deg); } .slice-2::before { transform: rotate(90deg); } .slice-2::after { transform: rotate(90deg); } .slice-3::before { transform: rotate(180deg); } .slice-3::after { transform: rotate(180deg); } .slice-4::before { transform: rotate(270deg); } .slice-4::after { transform: rotate(270deg); } /* hover效果(可选) */ .pizza-slice:hover { background-color: #ffb74d; }
关键说明
clip-path: polygon(50% 50%, 100% 0%, 100% 100%):定义从圆心到右上角、右下角的扇形区域,是90度切片的基础形状。- 通过
rotate旋转90度倍数,让四个切片刚好填满圆形容器。 - 用伪元素
::before和::after实现精准的实心侧边线条,避免整体边框带来的多余部分。 - 容器设置
overflow: hidden,隐藏切片超出圆形的区域,保证整体外观规整。
内容的提问来源于stack exchange,提问作者Saikat Islam
相关产品推荐
相关产品推荐

