当前位置:首页 > VUE

vue实现搜索框样式

2026-02-23 08:47:17VUE

Vue 实现搜索框样式

基础搜索框实现

使用 Vue 的模板语法和样式绑定创建基础搜索框:

vue实现搜索框样式

<template>
  <div class="search-container">
    <input 
      v-model="searchQuery" 
      type="text" 
      placeholder="搜索..." 
      class="search-input"
    />
    <button @click="handleSearch" class="search-button">
      <i class="search-icon">🔍</i>
    </button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: ''
    }
  },
  methods: {
    handleSearch() {
      // 处理搜索逻辑
      console.log('搜索:', this.searchQuery)
    }
  }
}
</script>

<style scoped>
.search-container {
  display: flex;
  align-items: center;
  max-width: 500px;
  margin: 0 auto;
}

.search-input {
  padding: 10px 15px;
  border: 1px solid #ddd;
  border-radius: 4px 0 0 4px;
  flex-grow: 1;
  font-size: 16px;
}

.search-button {
  background: #42b983;
  color: white;
  border: none;
  padding: 10px 15px;
  border-radius: 0 4px 4px 0;
  cursor: pointer;
}

.search-icon {
  font-size: 16px;
}
</style>

带自动完成的搜索框

添加自动完成功能:

vue实现搜索框样式

<template>
  <div class="search-autocomplete">
    <input
      v-model="searchQuery"
      @input="handleInput"
      type="text"
      placeholder="搜索..."
      class="search-input"
    />
    <ul v-if="suggestions.length" class="suggestions-list">
      <li 
        v-for="(item, index) in suggestions" 
        :key="index"
        @click="selectSuggestion(item)"
      >
        {{ item }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      suggestions: []
    }
  },
  methods: {
    handleInput() {
      // 模拟API调用
      if(this.searchQuery.length > 2) {
        this.suggestions = [
          `${this.searchQuery} 结果1`,
          `${this.searchQuery} 结果2`,
          `${this.searchQuery} 结果3`
        ]
      } else {
        this.suggestions = []
      }
    },
    selectSuggestion(item) {
      this.searchQuery = item
      this.suggestions = []
    }
  }
}
</script>

<style scoped>
.search-autocomplete {
  position: relative;
  max-width: 500px;
  margin: 0 auto;
}

.suggestions-list {
  position: absolute;
  width: 100%;
  background: white;
  border: 1px solid #ddd;
  border-top: none;
  list-style: none;
  padding: 0;
  margin: 0;
  z-index: 10;
}

.suggestions-list li {
  padding: 10px;
  cursor: pointer;
}

.suggestions-list li:hover {
  background: #f5f5f5;
}
</style>

动画效果搜索框

添加过渡动画效果:

<template>
  <div class="animated-search">
    <div class="search-wrapper" :class="{ focused: isFocused }">
      <input
        v-model="searchQuery"
        @focus="isFocused = true"
        @blur="isFocused = false"
        type="text"
        placeholder="搜索..."
        class="search-input"
      />
      <button class="search-button">
        <i class="search-icon">🔍</i>
      </button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      isFocused: false
    }
  }
}
</script>

<style scoped>
.animated-search {
  max-width: 500px;
  margin: 20px auto;
}

.search-wrapper {
  display: flex;
  border: 2px solid #ddd;
  border-radius: 30px;
  transition: all 0.3s ease;
  padding: 5px;
}

.search-wrapper.focused {
  border-color: #42b983;
  box-shadow: 0 0 8px rgba(66, 185, 131, 0.3);
}

.search-input {
  flex-grow: 1;
  border: none;
  outline: none;
  padding: 8px 15px;
  background: transparent;
  font-size: 16px;
}

.search-button {
  background: transparent;
  border: none;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  cursor: pointer;
  transition: background 0.3s;
}

.search-button:hover {
  background: rgba(66, 185, 131, 0.1);
}
</style>

移动端优化搜索框

针对移动设备的优化版本:

<template>
  <div class="mobile-search">
    <div class="search-bar">
      <input
        v-model="searchQuery"
        type="search"
        placeholder="搜索..."
        class="search-input"
      />
      <button class="clear-button" @click="clearSearch" v-show="searchQuery">
        ×
      </button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: ''
    }
  },
  methods: {
    clearSearch() {
      this.searchQuery = ''
    }
  }
}
</script>

<style scoped>
.mobile-search {
  padding: 10px;
}

.search-bar {
  position: relative;
  display: flex;
  align-items: center;
}

.search-input {
  width: 100%;
  padding: 12px 40px 12px 15px;
  border: 1px solid #ddd;
  border-radius: 20px;
  font-size: 16px;
  -webkit-appearance: none;
}

.clear-button {
  position: absolute;
  right: 15px;
  background: none;
  border: none;
  color: #999;
  font-size: 20px;
  cursor: pointer;
  padding: 0;
  width: 20px;
  height: 20px;
  display: flex;
  align-items: center;
  justify-content: center;
}
</style>

这些实现方法提供了从基础到高级的搜索框样式,可以根据具体需求选择或组合使用。每种实现都包含了完整的Vue组件代码和样式,可以直接集成到项目中。

标签: 样式vue
分享给朋友:

相关文章

vue实现flvvideo

vue实现flvvideo

vue-flv-player 实现 FLV 视频播放 安装依赖包 npm install flv.js vue-flv-player 基础组件引入 <template> <v…

vue实现curd

vue实现curd

Vue实现CRUD操作 初始化Vue项目 使用Vue CLI创建新项目,安装必要依赖如axios用于HTTP请求 vue create crud-demo cd crud-demo npm inst…

vue scrolltop 实现

vue scrolltop 实现

实现 Vue 中的 scrollTop 在 Vue 中实现滚动到顶部功能可以通过多种方式完成,包括使用原生 JavaScript、Vue 指令或第三方库。以下是几种常见的实现方法: 使用原生 Jav…

vue 实现上传

vue 实现上传

Vue 实现文件上传 使用 Vue 实现文件上传可以通过原生 HTML 的 <input type="file"> 或第三方库(如 axios、vue-upload-component)完…

vue框架实现

vue框架实现

Vue 框架实现方法 Vue 是一个渐进式 JavaScript 框架,适用于构建用户界面。以下是一些核心实现方法,涵盖基本使用、组件化、状态管理和优化技巧。 基本项目搭建 使用 Vue CLI…

vue远离实现

vue远离实现

Vue 原理实现 Vue.js 的核心原理包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现原理的详细解析。 响应式系统 Vue 的响应式系统基于 Object.definePro…