【问题标题】:Binding style to the field only for mobile screens仅适用于移动屏幕的字段绑定样式
【发布时间】:2019-06-26 20:02:00
【问题描述】:

我正在尝试使用 Bulma 和 Vue.js 制作导航栏,而 Bulma 有这样的东西,当导航栏折叠到汉堡菜单时,里面的下拉列表已经处于 display: block; 模式。所以我找到了一种解决方法,但它也将相同的样式应用于所有屏幕尺寸。

然后我尝试只在模板中绑定这样的样式

<div class="navbar-dropdown" :style="@media screen and (max-width: 900px){display: this.displayBlockAcad}">

这给了我这个错误

invalid expression: Invalid or unexpected token in

@media screen and (max-width: 900px){display: this.displayBlockAcad}

我为演示制作了this jsfiddle。如果您从第 26 行删除 @media screen and (max-width: 900px),jsfiddle 将正常运行,但第 22 行中的 is-hoverable 类将不再工作。有没有一种方法可以让下拉菜单在桌面屏幕上悬停,同时使用我自己的媒体屏幕方法

【问题讨论】:

    标签: css vue.js bulma


    【解决方案1】:

    你犯了错误,对于绑定样式,我们必须传递一个对象而不是字符串。 :style 不是有效的绑定属性。如果你想声明一个@media 表达式,然后在样式标签之间或css文件中写入,并给出一个唯一的类并将其分配给你的元素。

    v-bind:style="{key:property}" // object passing
    

    这里是如何在 vue.js 中绑定样式的链接 https://vuejs.org/v2/guide/class-and-style.html

    【讨论】:

    • 您能否详细说明give a unique class and assign it to your element.,因为我很难弄清楚如何为媒体屏幕动态更改样式。
    • 请理解,@media 是一个 CSS 标记,用于检测样式表中窗口的宽度。但是在javascript中你有很大的灵活性,所以你可以通过 if(screen.width > 800px) document.getElementById('mydiv').style.display='block';而已。任务完成...这里是示例jsfiddle.net/ssorabh/w5truy6m/14不要混淆css中的媒体标签和javascript检测媒体的方式。理解,样式的继承,外部样式可以自动被内联样式覆盖。
    • 如果你是基于web的开发,你也可以通过window.innerWidth > 800等方式进行检查。
    • 好的,这就是我所问的答案,但我仍然没有得到我想要实现的目标。如果我删除@media screen and (max-width: 900px),我可以用我的jsfiddle 做同样的事情,问题是这样做我的is-hoverable 类不会响应。到目前为止,我非常感谢您的帮助,但是您能告诉我如何使下拉菜单在桌面屏幕上可悬停吗?
    • 你为什么不创建两个不同的 html 元素,一个带有点击触发器,另一个带有悬停触发器?并通过使用条件渲染 v-if 放置条件
      悬停元素显示
      点击元素渲染
      你为什么让事情变得复杂...
    猜你喜欢
    • 1970-01-01
    • 2020-02-10
    • 2014-07-03
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    相关资源
    最近更新 更多