Vuetify中能否在AppBar添加带淡背景、点击展开的搜索文本框?
在Vuetify AppBar中实现淡背景可展开搜索框
当然可以实现这个效果!先帮你梳理下原代码里的问题,再一步步给出可行的解决方案:
1. 先修复基础代码的结构问题
你的原代码存在标签不闭合、栅格组件使用不规范的问题(Vuetify的v-col必须被v-row包裹),先调整成可运行的基础版本:
<template> <v-app> <v-app-bar :clipped-left="clipped" fixed app class="app-bar-gradient" dark> <v-row align="center" class="flex-grow-1"> <v-col cols="12" sm="6"> <v-text-field outlined label="搜索" prepend-inner-icon="mdi-magnify" background-color="rgba(255,255,255,0.1)" <!-- 设置淡半透明背景 --> dense <!-- 让输入框更紧凑,适配AppBar高度 --> ></v-text-field> </v-col> </v-row> </v-app-bar> <v-main> <!-- 这里放页面主体内容 --> </v-main> </v-app> </template> <script> export default { data() { return { clipped: true } } } </script>
2. 实现点击展开/收起的交互效果
要复刻Material UI里的点击展开效果,我们可以用状态变量控制显示,结合过渡动画让交互更流畅:
<template> <v-app> <v-app-bar :clipped-left="clipped" fixed app class="app-bar-gradient" dark> <!-- 点击切换显示状态的搜索图标 --> <v-btn icon @click="showSearch = !showSearch"> <v-icon>mdi-magnify</v-icon> </v-btn> <!-- 带过渡动画的可展开搜索框 --> <v-transition mode="out-in"> <v-text-field v-if="showSearch" outlined label="搜索" prepend-inner-icon="mdi-magnify" background-color="rgba(255,255,255,0.1)" dense class="ml-2 flex-grow-1" @blur="showSearch = false" <!-- 点击外部自动收起 --> @keyup.esc="showSearch = false" <!-- 按ESC键收起 --> ></v-text-field> </v-transition> </v-app-bar> <v-main> <!-- 页面主体内容 --> </v-main> </v-app> </template> <script> export default { data() { return { clipped: true, showSearch: false } } } </script> <style scoped> /* 自定义展开/收起的过渡动画 */ .v-enter-active, .v-leave-active { transition: all 0.3s ease; } .v-enter-from, .v-leave-to { width: 0; opacity: 0; padding: 0; } </style>
关键细节说明
- 淡背景实现:通过
background-color设置半透明rgba值,既适配深色AppBar,又能呈现淡背景效果 - 流畅过渡:借助Vuetify的
v-transition组件+自定义CSS,实现搜索框展开/收起的平滑动画 - 交互优化:支持点击图标切换状态、点击外部自动收起、ESC键收起,贴合用户使用习惯
- 布局适配:用
flex-grow-1让搜索框展开时占满AppBar的可用空间,dense属性让输入框高度适配AppBar
这样调整后,就能实现你想要的类似Material UI的点击展开式淡背景搜索框啦!
内容的提问来源于stack exchange,提问作者user13262487
相关产品推荐
相关产品推荐

