我需要将 CSS 悬停与 VueJS v-bind:style 指令一起使用,但找不到有关它的信息。
我需要为悬停绑定样式,但 v-bind:style.hover={}
不起作用。所有属性都将从后端获取,因此我需要动态绑定样式。
是否有其他方法可以使用 VueJS 在鼠标悬停或 CSS 悬停时绑定样式?
这是我的代码
这是对象:
button: {
colorBackd: '#1e2021',
colorBackdHover: '#000000',
text: 'Results',
color: '#d3e0ff',
colorHover: "#ffffff",
borderColor: '#d3e0ff',
borderColorHover: "#ffffff"
},
这里是需要绑定样式的html元素
<button type="button"
:style="{
color:button.color,
backgroundColor:button.colorBackd,
borderColor:button.borderColor,
}"
class="btn btn-outline-info large-button">
{{ button.text }}
</button>
谢谢
原文由 dav88dev 发布,翻译遵循 CC BY-SA 4.0 许可协议
改进的解决方案:使用 CSS 自定义属性和变量
如果您只打算使用现代/常青浏览器,那么使用 CSS 自定义属性和变量是不错的选择!您实际上可以将 CSS 自定义属性传递给
:style
绑定,例如在您的模板中:
对于 CSS,这只是一个问题:
此方法的优点是您可以限定 CSS 自定义属性,因此当您在元素级别定义 CSS 属性(而不是在
:root
中)时,这些变量将仅适用于您的特定按钮组件。唯一的缺点是您必须在悬停和未悬停状态下迭代声明所有变量,这可能有点麻烦。但是,与使用 CSS 变量所获得的好处相比,我认为这是一个非常小的缺点。
请参阅下面的概念验证:
原方案:使用基于JS的鼠标事件
您可以将元素的悬停状态存储在其
data
中,例如hoverState
。 It is set tofalse
by default, and is toggled totrue
when@mouseenter
is fired, and back tofalse
when@mouseleave
被触发:然后,您可以简单地将 计算属性 绑定到
style
属性,例如styleObject
。在这个styleObject
中,您可以根据组件数据中的hoverState
返回正确的 CSS 样式: