纯css实现带斜角的边框样式

展示效果

斜角优化前(百度上找到的方法)

也能实现斜角效果,但是有瑕疵

斜角优化后(想了个花里胡哨的办法)

优化后就没有超出尖角的情况了

直接贴代码


// html
<a class="review_a">
    占位(会被挡住)
    <div>占位(这个显示)</div>
</a>
// css
.review_a{
	padding-left: 22px;
	padding-right: 22px;
	line-height: 34px;
	background-color: #FF4A22;
	position: absolute;
	overflow: hidden;
	text-align: center;
	color: #FF4A22;
	font-weight: bold;
	clip-path: polygon( 
	    0 0,
	    0 100%,
	    calc(100% - 8px) 100%,
	    100% calc(100% - 13.856px),
	    100% 0,
	);
	&::after{
	    content: '';
	    position: absolute;
	    left: 50%;
	    top: 50%;
	    width: calc(100% - 4px);
	    height: calc(100% - 4px);
	    transform: translate(-50%,-50%);
	    background-color: #fff;
	    clip-path: polygon( 
	        0 0,
	        0 100%,
	        calc(100% - 8px) 100%,
	        100% calc(100% - 13.856px),
	        100% 0,
	    );
	}
	>div{
	    position: absolute;
	    top: -1px;
	    z-index: 999;
	    color: #FF4A22;
	    font-weight: bold;
	}
}

说明下原理

上面提到的,网上搜到的方法原理也很简单,clip-path把盒子切成设计稿上的样子,直接给border,加overflow:hidden。然后被切掉的地方不会有border展示出来,用伪元素写个边框条,旋转一下定位到对应的位置,就是第一张图的效果。
瑕疵在于: 这个样式浏览器渲染的时候没有那么精准,稍微有一点偏差,样式就看起来有尖角,作为一个完美主义+强迫症患者,我表示难以接受

我的优化:原理也很简单,代码在上面贴出来了。同样是先用clip-path把盒子切成设计稿上的样子,但是不给border。给个背景色(边框颜色),然后用居中定位一个伪元素,大小比父盒子小一点,也用同样的clip-path切一下,给个背景色(与大背景色相同,比如白色),遮住父级盒子中间的背景色,这样看起来就像是父级盒子有了边框,而且也不会有尖角突出来的情况。

a标签里的那个div,是为了展示边框里的文字内容,因为真正的文字内容被遮住了。

用css实现有个好处,就是当文字内容发生变化时,样式不会乱。而如果直接使用一张背景图来实现,就不能达到这个效果了。、

上班之余的一点小心得,如果能对大家有所帮助,我会觉得很开心。哈哈哈,年前最后一天班,也是第一次发文章,祝大家新年快乐~ 也希望武汉的疫情能早日解决~

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以使用CSS3的动画属性和伪元素来实现边框跑马灯特效。 首先,需要给元素设置一个固定的宽度和高度,并设置边框样式。然后,使用伪元素::before和::after来创建两个半透明的遮罩层,覆盖在元素的边框上方。 接下来,使用CSS3的动画属性来使伪元素移动。将伪元素的宽度设置为0,然后使用@keyframes关键字定义动画,让伪元素从左侧或右侧移动到另一侧,并将宽度逐渐增加到与元素相同的宽度。 最后,使用animation属性将动画应用到伪元素上,并设置动画的持续时间、延迟时间和循环次数。 下面是一个示例代码: HTML代码: ```html <div class="marquee"> <p>这是一个边框跑马灯特效</p> </div> ``` CSS代码: ```css .marquee { width: 500px; height: 100px; padding: 20px; border: 2px solid #000; position: relative; } .marquee::before, .marquee::after { content: ""; position: absolute; top: 0; bottom: 0; width: 0; background-color: rgba(255, 255, 255, 0.5); } .marquee::before { left: 0; animation: marquee-left 5s ease-in-out infinite; } .marquee::after { right: 0; animation: marquee-right 5s ease-in-out infinite; } @keyframes marquee-left { 0% { width: 0; transform: translateX(0); } 50% { width: 100%; transform: translateX(0); } 100% { width: 0; transform: translateX(100%); } } @keyframes marquee-right { 0% { width: 0; transform: translateX(0); } 50% { width: 100%; transform: translateX(0); } 100% { width: 0; transform: translateX(-100%); } } ``` 在这个示例中,我们创建了一个宽度为500px、高度为100px的div元素,并设置了2px的黑色边框。然后,在div元素上使用了伪元素::before和::after,并设置它们的宽度为0,背景色为半透明白色。 接着,使用@keyframes关键字分别定义了两个动画marquee-left和marquee-right,让伪元素从左侧或右侧移动到另一侧,并将宽度逐渐增加到与元素相同的宽度。最后,将动画应用到伪元素上,并设置了动画的持续时间、延迟时间和循环次数。 这样,一个简单的边框跑马灯特效就完成了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值