先看效果图:
红色按钮是用label重写的 单选按钮;
切换路由时有移动效果的代码:
<template>
<div id="app">
<transition> // Vue 提供了 transition 的封装组件
<router-view/>
</transition>
<div id="nav">
<router-link to="/">首页</router-link>
<router-link to="/about">关于</router-link>
<router-link to="/setting">设置</router-link>
</div>
</div>
</template>
<style lang="scss">
.v-enter{ // v-enter:定义进入过渡的开始状态。元素被插入之前生效,在元素被插入之后的下一帧移除
transition: all .5s ease;
transform: translateX(100%);
}
.v-leave-to{ // v-leave-to: 2.1.8版及以上 定义离开过渡的结束状态
transition: all .5s ease;
opacity: 0;
transform: translateX(-100%);
position:absolute;
}
.v-leave-active,.v-enter-active{ // v-enter-active:定义进入过渡生效时的状态
// v-leave-active:定义离开过渡生效时的状态
transition: all .5s ease;
}
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
overflow-x: hidden;margin:0;
}
body{margin:0;}
#nav {
padding: 30px;
position:fixed;
bottom:0;
width:100%;
background:skyblue;
margin:0!important;
display: flex;
justify-content: space-around;
a {
font-weight: bold;
color: #2c3e50;
font-size:30px;
&.router-link-exact-active {
color: #42b983;
}
}
}
</style>
以v- 开头的几个类名 v-enter 等是transition自带的;
重写单选按钮的html代码:
<input type="checkbox" name="sex" id="male" />
<label for="male"> </label>
<input type="radio" name="sex" id="male1" />
<label for="male1"> </label>
css代码:
.home{
font-size:30px;
}
#male{
display:none;
}
label {
display: inline-block;
width: 50px;
height: 50px;
border: 1px solid #333;
border-radius: 50%;
position: relative;
}
label:before{
content:'';
display: inline-block;
height:30px;
width:30px;
border-radius:50%;
border: 1px solid #333;
position: absolute;
top:50%;
left:50%;
margin:-16px 0 0 -16px;
}
input:checked+label:before{
background:red;
}