当前位置:首页 > 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实现按钮组轮换

vue实现按钮组轮换

实现按钮组轮换的方法 在Vue中实现按钮组轮换效果可以通过动态绑定类和事件处理来完成。以下是一种常见的实现方式: 模板部分 <template> <div class="…

vue实现缩放

vue实现缩放

Vue 实现缩放的方法 在 Vue 中实现缩放功能可以通过多种方式完成,以下是一些常见的方法: 使用 CSS transform 属性 通过 CSS 的 transform: scale() 属性可…

vue实现截图

vue实现截图

Vue 实现截图的方法 使用 html2canvas 库 安装 html2canvas 库: npm install html2canvas 在 Vue 组件中使用: import html2…

vue实现答辩

vue实现答辩

Vue 实现答辩系统的关键步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目,安装 Vue Router 管理路由,Pinia/Vuex 进行状态管理。配置 ESLint 和 Pre…

vue实现treeselect

vue实现treeselect

Vue TreeSelect 实现方法 使用 Vue 实现 TreeSelect 组件可以通过以下几种方式完成,包括使用现成的第三方库或自行封装组件。 使用第三方库 推荐使用成熟的第三方 TreeS…

vue 实现拖拉

vue 实现拖拉

Vue 实现拖拽功能的方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 dr…