疯狂的技术宅 前端先锋 前端
翻译:疯狂的技术宅
做者:Lane Wagner
来源:hackernoon
正文共:2337 字
预计阅读时间:7 分钟vue
定制 select 标签的设计很是困难。有时候,若是不使用样式化的 div 和自定义 JavaScript 的结合来构建本身的脚本,那是不可能的。在本文中,你将学习如何构建使用彻底自定义 CSS 设置样式的 Vue.js 组件。ide
Demo: https://codesandbox.io/s/custom-vuejs-select-component-8nqgd学习
1<template> 2 <div 3 class="custom-select" 4 :tabindex="tabindex" 5 @blur="open = false" 6 > 7 <div 8 class="selected" 9 :class="{open: open}" 10 @click="open = !open" 11 > 12 {{ selected }} 13 </div> 14 <div 15 class="items" 16 :class="{selectHide: !open}" 17 > 18 <div 19 class="item" 20 v-for="(option, i) of options" 21 :key="i" 22 @click="selected=option; open=false; $emit('input', option)" 23 > 24 {{ option }} 25 </div> 26 </div> 27 </div> 28</template>
须要注意如下几点:ui
1<script> 2export default { 3 props:{ 4 options:{ 5 type: Array, 6 required: true 7 }, 8 tabindex:{ 9 type: Number, 10 required: false, 11 default: 0 12 } 13 }, 14 data() { 15 return { 16 selected: this.options.length > 0 ? this.options[0] : null, 17 open: false 18 }; 19 }, 20 mounted(){ 21 this.$emit('input', this.selected); 22 } 23}; 24</script>
另外,要注意的重要事项:this
咱们还会在 mount 上发出选定的值,以便父级不须要显式设置默认值。若是咱们的 select 组件是较大表单的一部分,那么咱们但愿可以设置正确的 tabindex 。spa
1<style scoped> 2 3.custom-select { 4 position: relative; 5 width: 100%; 6 text-align: left; 7 outline: none; 8 height: 47px; 9 line-height: 47px; 10} 11 12.selected { 13 background-color: #080D0E; 14 border-radius: 6px; 15 border: 1px solid #858586; 16 color: #ffffff; 17 padding-left: 8px; 18 cursor: pointer; 19 user-select: none; 20} 21 22.selected.open{ 23 border: 1px solid #CE9B2C; 24 border-radius: 6px 6px 0px 0px; 25} 26 27.selected:after { 28 position: absolute; 29 content: ""; 30 top: 22px; 31 right: 10px; 32 width: 0; 33 height: 0; 34 border: 4px solid transparent; 35 border-color: #fff transparent transparent transparent; 36} 37 38.items { 39 color: #ffffff; 40 border-radius: 0px 0px 6px 6px; 41 overflow: hidden; 42 border-right: 1px solid #CE9B2C; 43 border-left: 1px solid #CE9B2C; 44 border-bottom: 1px solid #CE9B2C; 45 position: absolute; 46 background-color: #080D0E; 47 left: 0; 48 right: 0; 49} 50 51.item{ 52 color: #ffffff; 53 padding-left: 8px; 54 cursor: pointer; 55 user-select: none; 56} 57 58.item:hover{ 59 background-color: #B68A28; 60} 61 62.selectHide { 63 display: none; 64} 65</style>
该 CSS只是一个示例,你能够按照你的需求随意修改样式。翻译
我但愿这能够帮助你建立本身的自定义选择组件,如下是完整组件要点的连接:设计
最后,在线演示的示例:https://codesandbox.io/s/custom-vuejs-select-component-8nqgdcode
原文连接
https://hackernoon.com/how-to-make-a-custom-select-component-in-vuejs-8kt32pj