035: Radio and checkbox beautification methods in vue project

Insert image description here

No. 035

View column directory: VUE ------ element UI


Column goal

Under the control of the joint technology stack of vue and element UI, this column provides effective source code examples and information point introductions for flexible use.

(1) Provide some basic operations of vue2: installation, reference, template use, computed, watch, life cycle (beforeCreate, created, beforeMount, mounted, beforeUpdate, updated, beforeDestroy, destroyed, activated, deactivated, errorCaptured, components,), $root , $parent , $children , $slots , $refs , props, $emit , eventbus ,provide / inject, Vue.observable, $listeners, $attrs, $nextTick , v-for, v-if, v-else ,v-else-if, v-on, v-pre, v-cloak, v-once, v-model, v-html, v-text, keep-alive, slot-scope, filters, v-bind,. stop, .native, directives, mixin, render, internationalization, Vue Router, etc.

(2) 提供element UI的经典操作: -cascader, el-input-number, el-switch, el-slider, el-time-picker, el-date-picker, el-upload, el-rate, el-color-picker, el-transfer, el-form , el-table, el-tree, el-pagination, el-badge, el-avatar, el-skeleton, el-empty, el-descriptions, el-result, el-statistic, el-alert, v-loading, $ message, $alert, $prompt, $confirm , $notify, el-breadcrumb, el-page-header, el-tabs, el-dropdown, el-steps, el-dialog, el-tooltip, el-popover, el- popconfirm, el-card, el-carousel, el-collapse, el-timeline, el-divider, el-calendar, el-image, el-backtop,v-infinite-scroll, el-drawer等

Demand background

In Vue project development, radio and checkbox are often used. Sometimes the original ugly style cannot meet the discernment of the product and UI, so it is necessary to change the expression method. In this article, we realize the style beautification of radio and checkbox through overlay and other technical means.

Example effect

Insert image description here

Sample source code (160 lines in total)

/*
* @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN)
* @此源代码版权归大剑师兰特所有,可供学习或商业项目中借鉴,未经授权,不得重复地发表到博客、论坛,问答,git等公共空间或网站中。
* @Email: [email protected]
* @weixin: gis-dajianshi
* @First published in CSDN
* @First published time: 2022-09-16
*/
<template>
	<div class="container">
		<div class="top">
			<h3>radio和checkbox美化方法</h3>
			<div class="author">大剑师兰特, 还是大剑师兰特,gis-dajianshi</div>
		</div>

		<div class="box">
			<div v-for="(item,index) in radioList" :key="index" class="radioCss">
				<input v-show="false" type="radio" name="gender" :value="item.value" :id="item.value"
					:checked="sex==item.value" @click="clickRadio(item.value)" />
				<label :for="item.value">
					<div v-show="sex==item.value" class="a4 hand" alt="选中"></div>
					<div v-show="sex!=item.value" class="a3 hand" alt="未选中"></div>
					{
    
    {
    
    item.label}}
				</label>
			</div>
		</div>

		<!-- 复选框 -->
		<div class="box">
			<div v-for="item in checkBoxList" :key="item.value">
				<label>
					<div v-show="fruit.includes(item.value)" class="a2 hand">{
    
    {
    
    item.label}} </div>
					<div v-show="!fruit.includes(item.value)" class="a1 hand">{
    
    {
    
    item.label}} </div>
					<input v-show="false" @click="clickCheckBox(item.value)" name="Fruit" type="checkbox"
						:value="item.value" :checked="fruit.includes(item.value)" />
		 	</label>
			</div>
		</div>
	</div>
</template>
<script>

	export default {
    
    
		data() {
    
    
			return {
    
    
				radioList: [{
    
    
						value: "男",
						label: "男"
					},
					{
    
    
						value: "女",
						label: "女"
					},
				],
				sex: "",
				checkBoxList: [{
    
    
						value: "苹果",
						label: "苹果"
					},
					{
    
    
						value: "香蕉",
						label: "香蕉"
					},
					{
    
    
						value: "梨",
						label: "梨"
					},
					{
    
    
						value: "西瓜",
						label: "西瓜"
					}
				],
				fruit: []
			}
		},
		methods: {
    
    
			clickRadio(val) {
    
    
				this.sex = val;
			},
			clickCheckBox(val) {
    
    
				if (this.fruit.includes(val)) {
    
    
					this.fruit.splice(this.fruit.indexOf(val), 1);
				} else {
    
    
					this.fruit.push(val);
				}
			}
		},
	}
</script>
<style scoped>
	.container {
    
    
		width: 1000px;
		height: 580px;
		margin: 50px auto;
		border: 1px solid green;
		position: relative;
	}

	.top {
    
    
		margin: 0 auto 30px;
		padding: 10px 0;
		background: hotpink;
		color: #fff;
	}

	.box {
    
    
		width: 300px;
		border: 1px solid #ddd;
		padding: 20px 5%;
		clear: both;
		overflow: hidden;
		margin: 50px auto 20px;
	}

	.radioCss {
    
    
		width: 50%;
		float: left;
		
	}
    .hand{
    
    cursor: pointer;}
	.a1 {
    
    
		display: inline-block;
		padding: 7px 13px;
		font-size: 13px;
		background-color: #ddd;
		margin: 0px 20px 10px 0;
		float: left;
		color: #444;
	}

	.a2 {
    
    
		display: inline-block;
		padding: 7px 13px;
		font-size: 13px;
		background-color: hotpink;
		margin: 0px 20px 10px 0;
		float: left;
		color: #fff;
	}

	.a3 {
    
    
		display: inline-block;
		padding: 10px;
		border-radius: 10px;
		font-size: 13px;
		background-color: #ddd;
		margin: 0px 10px 10px 0;
		float: left;
		color: #444;
	}

	.a4 {
    
    
		display: inline-block;
		padding: 10px;
		border-radius: 10px;
		font-size: 13px;
		background-color: hotpink;
		margin: 0px 10px 10px 0;
		float: left;
		color: #fff;
	}
</style>


Guess you like

Origin blog.csdn.net/cuclife/article/details/132896729