在vue中:style 的使用方式汇总

 更新时间:2024年09月23日 12:14:10   作者:群狼之虎  
在Vue开发中使用:style绑定样式是常见需求,应注意:class与:style的配合使用,错误的使用可能导致样式不生效,正确的方法是使用数组绑定多个样式,这些技巧有助于提高开发效率和保持代码整洁,感兴趣的朋友跟随小编一起看看吧

在日常开发中:style的使用也是比较常见的:

亲测有效

1.最通用的写法 

<p :style="{fontFamily:arr.conFontFamily,color:arr.conFontColor,backgroundColor:arr.conBgColor}">{{con.title}}</p>

2.三元表达式

<a :style="{height:(index==0?'89': ''),margin:(index == 0?'52px 37px':'')color:(index==0?arr.conFontColor:'#000')}" :href="con.subTitleHref" rel="external nofollow"  target="_self">{{con.subTitle}}</a>

3. 还可以以上两种方法结合起来

<p :style="{fontFamily:arr.conFontFamily,fontSize:(arr.conFontSize!=0.36?arr.conFontSize+arr.conFontUnit:''),color:arr.conFontColor,backgroundColor:arr.conBgColor}">{{con.title}}</p>

注意:这两种方式有个弊端,当需要把很多个样式添加到div上时,div看起来很臃肿

4.用计算属性

结合计算属性 将样式都提出来 最后形成一个变量 把这个变量添加到div上

这里要做的工作分几步:

  • 通过计算属性把要放到一起的样式归整一下
  • 针对默认值是空值或者特定值的样式 是不需要将这个样式放到div上的。
  • 举例:如果div 已在css样式里设置了font-size 是16px,那么div行内样式 就不要存在font-size:16px 这种重复没有意义 就要做判断去除

这里想到的办法是:

用一个变量存入16 这里是conFontSize,如果conFontSize值等于16 那么就让font-size:''为空 然后通过循环style 将为空的font-size 去掉。

如果不等于16 就是修改的,就要正常显示

将:style="arr.styles.conTitleStyle"添加到div上

代码如下:

html

<p :style="arr.styles.conTitleStyle">{{con.title}}</p>

js

data(){
    return {
        arr:{
            styles:{
                //存放的是 动态修改的样式
                conTitleStyle:{},// 内容标题总样式
                conLiStyle:{},//内容li总样式
            },
            pieceStyle:{
                conFontFamily:"",
                conFontSize:16,
                conFontColor:"",
                conBgColor:"",
                conLineHeight:21,// Writing 专用
                conLRCenter:"",// 对齐方式 
                conTopRow:0,//首行缩进 
                conLetterSpace:0,//字体间隔 
                conFontBold:"",//加粗 
                conSpace:""//文字是否省略 
            }
        }
    }
},
computed:{
    diyConTitleStyle:function(){
        var pieceD = this.arr.pieceStyle;
        var fontSizeNum;
        // 判断对应模块fontSize的默认值 (默认值设置的和css fontsize一样) 如果等于就让这一项的css 为空 不等于就走conFontSize 
        if(this.arr.mtype=='Imglist'){
            fontSizeNum=(pieceD.conFontSize!=12)
        }else if(this.arr.mtype=='ImglistScroll'||this.arr.mtype=='NewsList2'){
            fontSizeNum=(pieceD.conFontSize!=17)
        }else if(this.arr.mtype=='NavList'){
            fontSizeNum=(pieceD.conFontSize!=18)
        }else if(this.arr.mtype=='NavDock'){
            fontSizeNum=(pieceD.conFontSize!=14)
        }else if(this.arr.mtype=='NewsList2'){
            fontSizeNum=(pieceD.conFontSize!=15)
        }else{
            fontSizeNum=(pieceD.conFontSize!=16)
        }
        // 判断对应模块lineheight的默认值     
        if(this.arr.mtype=='NewsList'){
            var lhnum=(pieceD.conLineHeight!=16)
        }else if(this.arr.mtype=='Writing'){
            var lhnum=(pieceD.conLineHeight!=21)
        }
        //console.log(lhnum)
        var dt={
            "color":pieceD.conFontColor,
              "font-family":pieceD.conFontFamily,                  
              "font-size":fontSizeNum?pieceD.conFontSize+"px":"",
              "background-color":pieceD.conBgColor,
              "line-height":(lhnum?pieceD.conLineHeight+'px':''),
              "text-align":pieceD.conLRCenter,
              "text-indent":(pieceD.conTopRow!=0?pieceD.conTopRow+'px':''),
              "letter-spacing":(pieceD.conLetterSpace!=0?pieceD.conLetterSpace+'px':''),
              "font-weight":pieceD.conFontBold,
              "white-space":pieceD.conSpace
        }
        //过滤掉即删除掉空值的参数和数值
        for (var i in dt) {
              dt[i]==""?delete(dt[i]):1
        }
        return dt
    }
},
watch:{
    arr:{
        handler(newValue, oldValue) {
            // 监听是为了把更改后的样式及时保存到arr.styles里,最后arr是要提交的
            this.arr=newValue;
            this.arr.styles.conTitleStyle=this.diyConTitleStyle;
            this.arr.styles.conLiStyle=this.diyConLiStyle;
    }
    deep: true
    }
}

最后成果 当font-size是16px时:

当font-size 不是16px时  行内样式出现font-size了

5.在:style放两个class样式怎么放

用&& 连接

<p :style="arr.styles.conTitleStyle&&arr.styles.conLiStyle">{{con.title}}</p>  错误

发现只有后面的那个生效。

我希望两个都生效 所以得用数组:正确

<p :style="[arr.styles.conTitleStyle,arr.styles.conLiStyle]">{{con.title}}</p>

到此这篇关于在vue中:style 的几种使用方式的文章就介绍到这了,更多相关vue :style使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue element修改el-select控件长度style=“width:XXpx“不生效的解决

    vue element修改el-select控件长度style=“width:XXpx“不生效的解决

    这篇文章主要介绍了vue element修改el-select控件长度style=“width:XXpx“不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Vue.js快速入门教程

    Vue.js快速入门教程

    Vue.js是一个专注于视图模型(ViewModal)的框架。接下来给大家带来了vue.js快速入门教程,非常不错,具有参考借鉴价值,一起看看吧
    2016-09-09
  • Vue.js tab实现选项卡切换

    Vue.js tab实现选项卡切换

    这篇文章主要为大家详细介绍了Vue.js组件tab实现选项卡切换效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 关于vxe-table复选框翻页选中问题及解决

    关于vxe-table复选框翻页选中问题及解决

    这篇文章主要介绍了关于vxe-table复选框翻页选中问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)

    使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)

    这篇文章主要介绍了使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件 ,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • vue简单练习 桌面时钟的实现代码实例

    vue简单练习 桌面时钟的实现代码实例

    这篇文章主要介绍了vue简单练习 桌面时钟的实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值的相关资料,需要的朋友可以参考下
    2019-09-09
  • vue中axios请求的封装实例代码

    vue中axios请求的封装实例代码

    这篇文章主要给大家介绍了关于vue中axios请求封装的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧要的朋友可以参考下
    2019-03-03
  • 基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析

    基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析

    这篇文章主要介绍了基于Vue3.0开发轻量级手机端弹框组件V3Popup,本文通过场景分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • vue3中使用VueParticles实现粒子动态背景效果

    vue3中使用VueParticles实现粒子动态背景效果

    为了提高页面展示效果,特别类似于登录界面内容比较单一的,粒子效果作为背景经常使用到,vue工程中利用vue-particles可以很简单的实现页面的粒子背景效果,本文给大家分享vue粒子动态背景效果实现代码,需要的朋友参考下吧
    2022-05-05
  • vue从后端获取到文件的 url 地址及前端根据 url 地址下载文件的实现思路

    vue从后端获取到文件的 url 地址及前端根据 url 地址下载文件的实现思路

    这篇文章主要介绍了vue 中从后端获取到文件的 url 地址及前端根据 url 地址下载文件,项目用的是 vben admin 框架,用的是 vue3 + TS,后端返回的是文件的 url 地址,对vue后端获取 url 地址的相关知识感兴趣的朋友一起看看吧
    2024-02-02

最新评论