CSS技巧专栏:一日一例 8 - 纯CSS利用mask属性实现按钮边框对称包围特效
上篇作业解题
在前一篇文章的最后,给各位看官留了一个作业,如上图所示。本篇文章,我们来公布一下它的源码。
主要实现的思路
- 四个渐变色的线段,沿着四个方向的依次运动,(运动在加载前执行)
- 使用 按钮的 before 和after 伪类创建两个层,在鼠标移动到按钮上时候,分别从水平和垂直方向变化。
HTML页面结构
<button class="base shine">
<span></span>
<span></span>
<span></span>
<span></span>
蓬门今始为君开
</button>
按钮基础样式
.base{
position: relative;
padding: 1rem 3rem; /* 用 padding 撑起按钮的宽度和高度 ,并确保了按钮文字水平方向居中 */
font-family: "微软雅黑", sans-serif;
font-size: 1.5rem;
line-height: 1.5rem; /* 行高和字号大小相等,可以实现按钮文字在按钮内垂直居中 */
font-weight:700;
color: var(--color); /* 文字颜色为预定义的前景色 */
cursor: pointer; /* 鼠标移动到按钮上时候的形状:手型 */
user-select: none; /* 让用户不能选择按钮上的文字 */
white-space: nowrap; /* 避免英文单词间的空格导致文字换行 */
border-radius: 2rem;
text-decoration: none;
text-transform:uppercase; /* 字母自动修正为大写 */
transition: all .5s; /* 按钮响应动画效果的持续时间 */
margin: 1.5rem 2rem;
}
样式表CSS代码
/* 边框流光按钮 */
.shine {
position: relative;
display: inline-block;
color: #ffcc00;
text-transform: uppercase;
transition: 0.2s;
overflow: hidden;
background:var(--main-bg-color);
border-radius: 0px;
-webkit-box-reflect: below 1px linear-gradient(transparent, rgba(0, 0, 0, .2));
border:1px solid rgba(255, 217, 102,0.2);
text-shadow: 1px 1px 0px rgba(255,255,255,0);
/* filter: hue-rotate(120deg); */
}
.shine:after,.shine:before{
position: absolute;
content: '';
top:50%;
left: 0;
right: 0;
bottom: 50%;
background-image: linear-gradient( #e6b800, #ffcc00, #ffe680, #ffcc00, #e6b800);
t