如何在单个Vue组件中覆盖Vuetify的v-text-field样式?
单Vue文件局部修改v-text-field padding的解决方案
原有写法失效原因
- Vuetify的SCSS变量为全局编译时生效,单文件scoped样式中重写变量无法作用于已经编译完成的v-text-field内置样式
- scoped样式默认仅作用于当前组件的根元素,无法渗透到子组件(v-text-field)的内部DOM节点,因此写在scoped中的普通样式不会对输入框内部生效
可行实现方案
使用深度选择器穿透scoped限制,同时给目标v-text-field添加自定义类名,避免误伤同文件下其他同类型组件:
<template> <v-text-field placeholder="What are you looking for" outlined filled class="no-padding-textfield" ></v-text-field> </template> <style lang="scss" scoped> /* Vue3 写法 */ :deep(.no-padding-textfield .v-field__input) { padding: 0 !important; } /* 如果使用Vue2,替换为::v-deep写法即可 */ /* ::v-deep .no-padding-textfield .v-field__input { padding: 0 !important; } */ </style>
注:如果需要移除整个输入框容器的内边距,将选择器中的
.v-field__input替换为.v-field即可,可根据实际显示效果调整目标类和属性值;另外原有模板中写的outliend为拼写错误,正确属性为outlined。
内容的提问来源于stack exchange,提问作者Ayman Tarig
相关产品推荐
相关产品推荐

