[Vue]获取窗口的尺寸从而做到组件样式响应式变化

当Vue页面需要显示在不同尺寸的移动端屏幕上时,一些固定尺寸的组件就会有不一致的表现效果。在使用element样式库时,有些组件还是贴心的给出了:width的参数,可以使用:width:200直接修改宽度;但有些组件就没有提供这种方法,比如文件拖动上传组件的尺寸是写死的360×180,并且无法通过改变父元素upload-demo的样式来修改内部样式:

在这里插入图片描述

而现在的一个需求就是想让这个组件的宽度永远填满页面。

修改组件内部class的样式

修改element的内部样式的两种方式

  • 首先在组件上添加自己的一个样式类

    <template>
    	<el-upload
            class="upload-demo my-upload-dragger"
            drag
       >
    </template>
    
  • 然后用组件穿透式的方式去修改内部的class样式

    <style scoped>
    .my-upload-dragger >>> .el-upload-dragger{
      width:400px !important;
    }
    </style>
    
  • 观察到宽度已经发生改变

在这里插入图片描述

动态获取页面窗口宽度

基于element的网站自适应方案(移动端适配)

<script>
	export default{
        methods:{
            getWidth(){
                return window.innerWidth; // 例:540
            }
        }
    }
</script>
动态改变尺寸

vue动态样式绑定改变伪元素等特殊样式(css var函数)

vue中动态style(如何动态修改伪元素样式)

  • 在css文件中可以使用变量

    • 使用--两根短划线开头来命名,大小写敏感:--myVar: 100px
    • 获取值时使用var()width: var(--myVar)
  • 动态在父元素(组件本身)的style中使用方法动态赋值css变量

    <template>
    	<el-upload
            class="upload-demo my-upload-dragger"
            drag
            :style="{'--autoWidth':getWidth()}"
       >
    </template>
    <script>
    	export default{
            methods:{
                getWidth(){
                    var myWidth=window.innerWidth-20*2; //减去外部大面板的padding
                    return myWidth+'px'; // 例:500px
                }
            }
        }
    </script>
    
  • 最后在样式中结合上面改变内部标签样式的方式使用变量:

    <style scoped>
    .my-upload-dragger >>> .el-upload-dragger{
      width:var(--autoWidth) !important;
    }
    </style>
    
  • 得到的最终效果:

在这里插入图片描述

MINE MIND系列将在我的GitHub上实时更新,同时精选部分汇总于CSDN专栏
GitHub仓库:https://github.com/IcyLeaves/MINE-MIND
CSDN专栏:https://blog.csdn.net/qq_37398834/category_10975647.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值