uni-app css动态设置类名后,该类名下的子类名样式设置无效
uni-app css动态设置类名后,该类名下的子类名样式设置无效
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win10 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:win10
HBuilderX类型:正式
HBuilderX版本号:4.75
手机系统:Android
手机系统版本号:Android 16
手机厂商:小米
手机机型:小米15
页面类型:nvue
vue版本:vue3
打包方式:离线
项目创建方式:HBuilderX
### 操作步骤:
```html
<view v-for="(item, index) in data.cms_head.categories" :key="item.id" :ref="'item"+index"
:class="['pl25', 'pr25','scroll-item', {'newActive': index == newActive}]"
@click="changeNewTab(index)">
<text class="c-666 fs28">{{ item.name }}</text>
<text :class="['tabLine']"></text>
</view>
父元素动态设置newActive类名后,想通过.newActive .tabLine 这样动态控制tabLine样式,是不生效的。
预期结果:
可以通过动态设置父元素,动态修改子元素的样式
实际结果:
动态设置父元素,无法动态修改子元素的样式
bug描述:
动态设置父元素,无法动态修改子元素的样式
更多关于uni-app css动态设置类名后,该类名下的子类名样式设置无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你好,是不是你设置的 class 权重不够导致无法覆盖tabLine样式呢?给出完整代码看一下
更多关于uni-app css动态设置类名后,该类名下的子类名样式设置无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
.tabLine { position: absolute; width: 0; height: 6rpx; background: #0768ac; bottom: 0; transition-duration: 0.3s; transition: width .15s; } .newActive .tabLine { width: 80rpx !important; } 改成:<text :class="['tabLine', {'tabLine1': index == newActive}]"></text>,这样就可以,而且我发现你们uni组件库里面的组件这样写,也是不行的
回复 艾思: 你说的哪个uni组件库?你这不是加了个新的类 tabLine1 吗?
回复 DCloud_UNI_yuhe: 新加的类 tabLine1,可以修改到样式,但是不加这个,通过父元素控制就不行.newActive .tabLine这样
回复 艾思: tabLine1的内容是什么?
回复 DCloud_UNI_yuhe: width: 80rpx
回复 艾思: text 元素是行内元素,也不能设置 width 吧,你设置生效了之后效果是什么?
回复 DCloud_UNI_yuhe: 可以的宽度有变化,之前是vue2都可以,这次升级了vue3,在做兼容,把宽度成字体也是无效的
回复 艾思: 这个与vue2无关的,这是css样式本来就不能设置width给text,你之前设置生效是不是改成块元素之类了?
回复 DCloud_UNI_yuhe:有加绝对定位 position: absolute;变块级元素;我测试了字体大小,也是没变的,但是类是有加上去的
回复 艾思: 你提供一下完整的可以运行代码,看一下你是咋写的
回复 DCloud_UNI_yuhe: 发你了
在 nvue 页面中,CSS 选择器的支持与普通 Web 环境有所不同。nvue 基于原生渲染,其样式系统受到限制,不支持 .newActive .tabLine 这类父子选择器。这导致动态类名无法通过 CSS 继承影响子元素样式。
解决方案:
-
直接绑定子元素类名:将动态逻辑直接应用到子元素上。例如,修改
tabLine的类名绑定,使其根据index == newActive条件独立变化:<text :class="['tabLine', {'active-line': index == newActive}]"></text>在 CSS 中定义
.active-line的样式。 -
使用内联样式:通过
:style绑定动态样式到子元素,例如:<text :style="{ color: index == newActive ? '#007AFF' : '#666' }"></text>

