html - 如何仅将变换效果应用于框阴影

标签 html css pseudo-element pseudo-class box-shadow

我正在构建一个使用 :hover 伪类来显示框阴影的菜单。

Here's a nav item as normalhere's the same item under :hover .

我正在使用 transform 属性对框阴影应用倾斜,使其看起来像一个厚实的、重叠的、倾斜的下划线。

.link:hover {
    box-shadow: 0 -0.5em 0 #7ed6df inset;
    transform: skew(-20deg);
}

如您所见,倾斜有效,但当我只希望 box-shadow 倾斜时,它也会倾斜 .link 文本。

我尝试像这样使用@apply 创建父样式:

--link-underline: {
    box-shadow: 0 -0.5em 0 #7ed6df inset;
    transform: skew(-20deg);
}

...

.link:hover {
    @apply --link-underline;
}

但是当我将鼠标悬停在链接上时没有任何变化,我玩弄了一个::after 伪元素,该元素将阴影添加到不可见的文本元素,但也找不到在那里工作的修复程序。如果有任何建议,我将不胜感激。谢谢!

最佳答案

在更多地摆弄伪元素和类之后,我有一个 working solution !

首先,我将这两个属性添加到我原来的 .link 类中,确保文本稳定:

display: inline;
position: relative;

然后我为我的 .link 类创建了一个::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 函数,它将伪类置于 1 不透明度上:

.link:hover::after {
    opacity: 1;
}

感谢您的建议,我想为此使用 box-shadow,因为我也想为滑动 Action 设置动画。

关于html - 如何仅将变换效果应用于框阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55728534/

相关文章:

css - 如何为 ':hover' 和 'a:before' 编写 'a:after' 条件?

javascript - 浏览图像并将其传递给弹出窗口

javascript - 构建适用于不同屏幕尺寸的动态表格/div 网格

jquery - 切换在 Angular ng-repeat 中无法正常工作

javascript - 从范围 slider 计算值到小时

html - 如何选择样式的单选/复选框按钮?

html - 为什么这个伪元素在使用缩放变换时会移动到父元素之上?

javascript - 根据分配给值的内容大小调整文本区域高度

JavaScript 图像幻灯片

javascript - JS Canvas - 保存透明图像