【发布时间】:2014-10-16 04:41:50
【问题描述】:
我想用 CSS 制作一个像这样的按钮,而不使用其他元素。
按钮图片
由于按钮附有border,我想我通常需要:before 和:after 元素来在一侧创建一个箭头。因此,要在每一侧制作一个箭头,我需要在链接中添加另一个 span 元素。
我尝试的第二种方法是您在下面看到的方法。但是在这种解决方案中,它们没有正确居中,并且箭头的每一侧的长度都不同。
有人有解决办法吗?
/* General Button Style */
.button {
display: block;
position: relative;
background: #fff;
width: 300px;
height: 80px;
line-height: 80px;
text-align: center;
font-size: 20px;
text-decoration: none;
text-transform: uppercase;
color: #e04e5e;
margin: 40px auto;
font-family: Helvetica, Arial, sans-serif;
box-sizing: border-box;
}
/* Button Border Style */
.button.border {
border: 4px solid #e04e5e;
}
.button.border:hover {
background: #e04e5e;
color: #fff;
}
/* Button Ribbon-Outset Border Style */
.button.ribbon-outset.border:after,
.button.ribbon-outset.border:before {
top: 50%;
content: " ";
height: 43px;
width: 43px;
position: absolute;
pointer-events: none;
background: #fff;
}
.button.ribbon-outset.border:after {
left: -3px;
margin-top: -40px;
transform-origin: 0 0;
box-sizing: border-box;
border-bottom: 4px solid #e04e5e;
border-left: 4px solid #e04e5e;
transform: rotate(57.5deg) skew(30deg);
}
.button.ribbon-outset.border:before {
right: -46px;
margin-top: -40px;
transform-origin: 0 0;
box-sizing: border-box;
border-top: 4px solid #e04e5e;
border-right: 4px solid #e04e5e;
transform: rotate(57.5deg) skew(30deg);
}
.button.ribbon-outset.border:hover:after {
background: #e04e5e
}
.button.ribbon-outset.border:hover:before {
background: #e04e5e
}
<a href="#" class="button ribbon-outset border">Click me!</a>
【问题讨论】:
-
也许您可以使用 SVG 背景图像并添加数据 url。
-
@Harry 我认为您的评论仍然有用,如果它不完全符合我的需要,因为它带有进一步的标记。仍然很有趣,谢谢。
标签: html css css-shapes pseudo-element