如何仅将变换效果应用于框阴影
How to apply transform effect to box-shadow only
我正在构建一个使用 :hover 伪 类 来显示框阴影的菜单。
Here's a nav item as normal and here's the same item under :hover.
我正在使用变换 属性 对框阴影应用倾斜,使其看起来像一个厚实的、重叠的、倾斜的下划线。
.link:hover {
box-shadow: 0 -0.5em 0 #7ed6df inset;
transform: skew(-20deg);
}
如您所见,倾斜有效,但当我只希望盒子阴影倾斜时,它也会倾斜 .link 文本。
我尝试像这样使用@apply 创建父级样式:
--link-underline: {
box-shadow: 0 -0.5em 0 #7ed6df inset;
transform: skew(-20deg);
}
...
.link:hover {
@apply --link-underline;
}
但是当我将鼠标悬停在 link 上时没有任何变化,我玩弄了一个 ::after 伪元素,该元素将阴影添加到不可见的文本元素,但找不到有效的修复也有。如果有任何建议,我将不胜感激。谢谢!
我试了一下,我有点达到了你想要的,但我不确定这是否是最好的解决方案,但这有点管用。如果它在浏览器中发生变化,您可以更改 top: 11%;
的值以调整位置。希望这对您有所帮助。
hr.underline {
border: 5px solid #7ed6df;
transform: skew(-20deg);
display: none;
}
.hover:hover .underline{
display: flex;
width: 5%;
position: absolute;
top: 11%;
z-index: -1;
}
<div class="hover">
<h3 class="link">Why</h3>
<hr class="underline">
</div>
这是一个使用多重背景的想法:
.text {
display:inline-block;
padding:5px 10px 5px;
background:
linear-gradient(-225deg,transparent 10px,lightblue 10px) bottom left /51% 15px,
linear-gradient(-45deg ,transparent 10px,lightblue 10px) bottom right/51% 15px;
background-repeat:no-repeat;
/*the below is not relevant, can be removed if hover is not needed*/
background-size:0 0;
}
.text:hover {
background-size:51% 15px;
}
<div class="text">some text here</div>
<div class="text">text</div>
<br>
<div class="text">loooooooooooooooooooong text</div>
在摆弄伪元素和 class 之后,我有一个 working solution!
首先,我将这两个属性添加到我的原始文件中。link class,确保文本稳定:
display: inline;
position: relative;
然后我为我的 .link class:
创建了一个 ::after 伪元素
.link::after {
content: '';
position: absolute;
z-index: -1;
top: 0;
right: 0;
bottom: 0;
left: 0;
box-shadow: 0 -0.5em 0 #7ed6df inset;
transform: skew(-20deg);
opacity: 0;
}
此元素使用 z-index 位于原始文本下方,并以 0 不透明度隐藏自身。框阴影和倾斜应用于此 ::after 元素,但由于其内容为空,因此不会影响任何文本。然后我需要做的就是添加 :hover 函数,它将伪 class 放到 1 opacity:
.link:hover::after {
opacity: 1;
}
谢谢你的建议,我想为此使用 box-shadow,因为我也想为滑动动作制作动画。
我正在构建一个使用 :hover 伪 类 来显示框阴影的菜单。
Here's a nav item as normal and here's the same item under :hover.
我正在使用变换 属性 对框阴影应用倾斜,使其看起来像一个厚实的、重叠的、倾斜的下划线。
.link:hover {
box-shadow: 0 -0.5em 0 #7ed6df inset;
transform: skew(-20deg);
}
如您所见,倾斜有效,但当我只希望盒子阴影倾斜时,它也会倾斜 .link 文本。
我尝试像这样使用@apply 创建父级样式:
--link-underline: {
box-shadow: 0 -0.5em 0 #7ed6df inset;
transform: skew(-20deg);
}
...
.link:hover {
@apply --link-underline;
}
但是当我将鼠标悬停在 link 上时没有任何变化,我玩弄了一个 ::after 伪元素,该元素将阴影添加到不可见的文本元素,但找不到有效的修复也有。如果有任何建议,我将不胜感激。谢谢!
我试了一下,我有点达到了你想要的,但我不确定这是否是最好的解决方案,但这有点管用。如果它在浏览器中发生变化,您可以更改 top: 11%;
的值以调整位置。希望这对您有所帮助。
hr.underline {
border: 5px solid #7ed6df;
transform: skew(-20deg);
display: none;
}
.hover:hover .underline{
display: flex;
width: 5%;
position: absolute;
top: 11%;
z-index: -1;
}
<div class="hover">
<h3 class="link">Why</h3>
<hr class="underline">
</div>
这是一个使用多重背景的想法:
.text {
display:inline-block;
padding:5px 10px 5px;
background:
linear-gradient(-225deg,transparent 10px,lightblue 10px) bottom left /51% 15px,
linear-gradient(-45deg ,transparent 10px,lightblue 10px) bottom right/51% 15px;
background-repeat:no-repeat;
/*the below is not relevant, can be removed if hover is not needed*/
background-size:0 0;
}
.text:hover {
background-size:51% 15px;
}
<div class="text">some text here</div>
<div class="text">text</div>
<br>
<div class="text">loooooooooooooooooooong text</div>
在摆弄伪元素和 class 之后,我有一个 working solution!
首先,我将这两个属性添加到我的原始文件中。link class,确保文本稳定:
display: inline;
position: relative;
然后我为我的 .link class:
创建了一个 ::after 伪元素.link::after {
content: '';
position: absolute;
z-index: -1;
top: 0;
right: 0;
bottom: 0;
left: 0;
box-shadow: 0 -0.5em 0 #7ed6df inset;
transform: skew(-20deg);
opacity: 0;
}
此元素使用 z-index 位于原始文本下方,并以 0 不透明度隐藏自身。框阴影和倾斜应用于此 ::after 元素,但由于其内容为空,因此不会影响任何文本。然后我需要做的就是添加 :hover 函数,它将伪 class 放到 1 opacity:
.link:hover::after {
opacity: 1;
}
谢谢你的建议,我想为此使用 box-shadow,因为我也想为滑动动作制作动画。