伪元素块 link 问题
Pseudo-element blocks link issue
我使用 :before
伪元素为我的导航创建了底部边框悬停动画 links:
a {
display: inline-block;
padding: 20px 0px;
margin: 0px 10px;
position: relative;
font-weight: bold;
font-family: Montserrat;
cursor: pointer;
background-color: #f5f5f5;
}
a:before {
content: '';
position: absolute;
width: 100%;
height: 0px;
border-bottom: 2px solid black;
bottom: 12px;
transform-origin: bottom left;
-webkit-transform: scaleX(0);
-ms-transform: scaleX(0);
transform: scaleX(0);
-webkit-transition: -webkit-transform 0.2s ease-out;
transition: transform: 0.2s ease-out;
}
a:hover:before {
-webkit-transform: scaleX(1);
-ms-transform: scaleX(1);
transform: scaleX(1);
}
<a>Link 1</a>
<a>Link 2</a>
<a>Link 3</a>
上面的可运行代码没有这个问题,但在我的网站上,伪元素的 2 px 粗边框阻塞了菜单 link 并将光标更改为默认箭头。如果用户误点击了底部边框,菜单 link 将不起作用,这会造成混乱。每次你悬停在边界上时,光标都会快速变化,这使得导航菜单看起来有问题。
这里是屏幕录像:https://streamable.com/gk9yir
我该如何解决这个问题?
改为使用框阴影:
a {
display: inline-block;
padding: 20px 0px;
margin: 0px 10px;
position: relative;
font-weight: bold;
font-family: Montserrat;
cursor: pointer;
background-color: #f5f5f5;
}
a:before {
content: '';
position: absolute;
margin-left:1px;
width: calc(100% - 2px);
height: 0px;
box-shadow:0 0 0 1px #000;
bottom: 12px;
transform-origin: bottom left;
-webkit-transform: scaleX(0);
-ms-transform: scaleX(0);
transform: scaleX(0);
-webkit-transition: -webkit-transform 0.2s ease-out;
transition: transform: 0.2s ease-out;
}
a:hover:before {
-webkit-transform: scaleX(1);
-ms-transform: scaleX(1);
transform: scaleX(1);
}
<a>Link 1</a>
<a>Link 2</a>
<a>Link 3</a>
这应该可以解决问题,因为阴影不会占用鼠标焦点。
只忽略伪元素处的指针
a:before {pointer-events:none;...
我使用 :before
伪元素为我的导航创建了底部边框悬停动画 links:
a {
display: inline-block;
padding: 20px 0px;
margin: 0px 10px;
position: relative;
font-weight: bold;
font-family: Montserrat;
cursor: pointer;
background-color: #f5f5f5;
}
a:before {
content: '';
position: absolute;
width: 100%;
height: 0px;
border-bottom: 2px solid black;
bottom: 12px;
transform-origin: bottom left;
-webkit-transform: scaleX(0);
-ms-transform: scaleX(0);
transform: scaleX(0);
-webkit-transition: -webkit-transform 0.2s ease-out;
transition: transform: 0.2s ease-out;
}
a:hover:before {
-webkit-transform: scaleX(1);
-ms-transform: scaleX(1);
transform: scaleX(1);
}
<a>Link 1</a>
<a>Link 2</a>
<a>Link 3</a>
上面的可运行代码没有这个问题,但在我的网站上,伪元素的 2 px 粗边框阻塞了菜单 link 并将光标更改为默认箭头。如果用户误点击了底部边框,菜单 link 将不起作用,这会造成混乱。每次你悬停在边界上时,光标都会快速变化,这使得导航菜单看起来有问题。
这里是屏幕录像:https://streamable.com/gk9yir
我该如何解决这个问题?
改为使用框阴影:
a {
display: inline-block;
padding: 20px 0px;
margin: 0px 10px;
position: relative;
font-weight: bold;
font-family: Montserrat;
cursor: pointer;
background-color: #f5f5f5;
}
a:before {
content: '';
position: absolute;
margin-left:1px;
width: calc(100% - 2px);
height: 0px;
box-shadow:0 0 0 1px #000;
bottom: 12px;
transform-origin: bottom left;
-webkit-transform: scaleX(0);
-ms-transform: scaleX(0);
transform: scaleX(0);
-webkit-transition: -webkit-transform 0.2s ease-out;
transition: transform: 0.2s ease-out;
}
a:hover:before {
-webkit-transform: scaleX(1);
-ms-transform: scaleX(1);
transform: scaleX(1);
}
<a>Link 1</a>
<a>Link 2</a>
<a>Link 3</a>
这应该可以解决问题,因为阴影不会占用鼠标焦点。
只忽略伪元素处的指针
a:before {pointer-events:none;...