本篇将实现vue2在css中使用js变量。

下图是el-tab组件,由上面的tab头和下面的内容区构成,当内容区过长的时候,外层固定高度的盒子会出现滚动条(设置了overflow: auto;),tab头部会向上滚动而消失:

滚动前:

 

滚动后:

 

 

 现在的需求是,tab头部需要固定在最上方,不随滚动条滚动而消失。

首先尝试将tab头用固定定位,加上背景色和z-index层级,已经实现悬浮固定,但是长度不够,只能盖住“特殊指示”旁边一点,空出来一大截。加上width: 100%又超长,由于组件的一层层嵌套以及element ui组件,样式改了半天,无法实现宽度百分百覆盖。。。(可能跟我css功底太浅有关)

另辟蹊径,将外层盒子的overflow: auto改为overflow: hidden(关闭最外层的滚动条),内容区类名:.el-tabs__content,在这里面更改内容区的样式:

>>>.el-tabs__content{
  height: 500px;
  overflow: auto!important; //使用内容区的滚动条,从而保证tab头部保持不动
}

这样tab头部保持不动,下面的内容区出现高度为500px的滚动条,初步实现内容区滚动,头部不动。问题来了:该页面是自适应页面,高度是动态变化的,这里写500px显然不太合适,因此在这里css就需要用到变量了,该变量会随着页面高度变化而变化。下面实现在css中使用变量:

>>>.el-tabs__content{
  /*自定义的变量 --color*/
  --color: red;
  height: 500px;
  overflow: auto!important;
  /*用var(变量)使用已经定义的变量*/
  color: var(--color); 
}

效果:

 

 

 自定义的变量--color已经生效!但此时的--color还是静态的,无法给其赋上js的变量,为了将js动态生成的样式的值传给css属性,可以借助vue中的computed。

computed:{
  cssVar(){
    return {
      '--height': document.documentElement.clientHeight-300 + 'px'
    }
  },  
}

 

 

 这里利用计算属性,将动态的--height添加到最外层的盒子上,这样在内层的.el-tabs__content可以使用--height这个变量,用这样的方式,模拟了el-tab表头“固定定位”的效果!

 

脚踏实地行,海阔天空飞

 

posted on 2021-08-24 12:21  coder__wang  阅读(4337)  评论(0编辑  收藏  举报