CSS 手写switch

纯css手写switch

<!-- css实现switch开关 -->

<!-- 加一个label标签,当我们点击label标签的时候复选框会被选中 -->
<label class="switch">
    <input type="checkbox">
    <span class="slider"></span>
</label>

<style>
	:root{
	   --switchWidth:90px;
	   --switchHeight:40px;
	}
	
	/*
         前置操作:
         1. 外层定义switch的大小。
         2. 隐藏checkbox框。
    */
	
    /* 定义开关的大小 */
    .switch {
        position: relative;
        display: inline-block;
        width: var(--switchWidth);
        height: var(--switchHeight);
    }
	
    /* 隐藏原本的复选框 */
    .switch input {
        display: none;
    }
	

    /*
       第一步:
           1.定义switch的背景:让span标签,填充满父元素,用作switch的背景。
           2.定义switch的开关按钮:使用伪元素,给switch添加按钮。position:absolute会找离着自己最近的relative定位。
    */
    
    /* 开关背景 */
    .slider {
        position: absolute;  /* 子绝父相定位 */
        cursor: pointer;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background-color: #eee;
        transition: .5s;    /* 过渡,所有的都0.5S */
        border-radius: 100px;
    }
	
    /* 开关按钮 */
    .slider::before {
        content: "";
        height: 30px;
        width: 30px;
        border-radius: 20px;
        position: absolute;
        left: 8px;
        bottom: 5px;
        background-color: #aeaaae;
        transition: .4s;
    }
	

    /*
       第二步:
           1.选中的时候更改起兄弟元素样式。也就是修改选中的背景色。
           2.选中的时候,开关按钮向左移动一段距离且改变颜色。
    */
    input:checked + .slider{
        background: green;
    }	
	
	/* 使用伪类与伪元素。当input选中的时候,已经添加的伪类,颜色变白,且移动44px */
    input:checked + .slider::before{
        background-color: #fff;
        transform: translateX(44px);
    }
</style>

css变量

<style>
    :root{
	   --size:200px;
	}	

    .box{
		height:var(--size);
		width:var(--size);
		background:red;
	}
	
    .box .item{
		height:calc(var(--size)/2);
		width:calc(var(--size)/2);
		background:green;
	}
</style>
<div class="box">
	<!-- css变量 -->
	<!-- 使用方式:
	               1.通过 " -- " 来定义一个css变量
				   2.使用的时候,通过var方式引用。
				   3.css变量同样可以用于计算。
	-->
	
	<!--
         使用场景:
					css变量使用非常广泛,比如我们定义一个组件,如果不用变量的话,
					如果要改小宽度或者高度,是很麻烦的,会有连带效果。用变量以后会方便多。
					
					其次,可以方便于复用。
	-->
    <div class="item"></div>
</div>
10-14 12:00