vue组件中修改组件外元素样式的两种解决方案
作者:蓓蕾心晴
这篇文章主要介绍了vue组件中修改组件外元素样式,本文给大家分享两种解决方案帮助大家解决这样的问题,结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
在实际开发中,由于项目一开始设计的一些不合理性,会在组件中通过
html[media=pad]{ .xxx{ /* 组件样式 */ } }
以上方式修改某些组件的样式,这样会涉及到从 html 层级选择,由于我 style 标签是这样写的
<style lang="less" scoped></style>
所以导致组件内部无法修改或选中组件外部元素,则无法修改外部元素的样式。
解决方案:
两种:
第一种:
直接新开一个全局的 style 标签
<style lang="less"></style>
在这里写全局的样式
第二种:
使用 :global
<style scoped> :global(.red) { color: red; } </style>
参考官方文档:https://cn.vuejs.org/api/sfc-css-features.html#scoped-css
vue动态改变组件外部元素样式
主要还是通过原生的js来控制。
vue的主要开发对象是组件。组件内部控制大家都轻车熟路,但组件外部呢?比如说改变组件外部元素样式。
这种问题我前不久遇到过一个。就是有个页面,承载了地图。但页面外部,是导航条啦,面包屑啦,标签条啦,顶部占据了一大块位置。you know,现在宽屏幕,垂直方向尺寸小的可怜,作为地图,肯定是占据面积越大越好啊,现在顶部一大堆乱七八糟。关键是,这些东东是框架提供的,也没有提供什么属性进行设置。怎么办?
主要是通过原生的js来控制。vue虽然作为一个开发框架,制订了自己的一些语法规则,但原生的js它仍然支持。比如document.getElementById(),这种语句在组件方法里运行一点问题没有。这些语句放在页面进入时触发:
export default { components: { Map }, beforeRouteEnter (to, form, next) { // 进入本页面时隐藏面包屑 let bread = document.getElementsByClassName('main-layout-tag-nav-wrapper') if (bread.length > 0) bread[0].style.display = 'none' next() }, beforeRouteLeave (to, form, next) { // 离开本页面时恢复面包屑 let bread = document.getElementsByClassName('main-layout-tag-nav-wrapper') if (bread.length > 0) bread[0].style.display = '' next() } }
到此这篇关于vue组件中修改组件外元素样式的文章就介绍到这了,更多相关vue修改组件外元素样式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!