塞雷的 汉堡按钮

7 篇文章 0 订阅

引用:

在哔哩哔哩有一个 up,他是 CodingStartup起码课,他是讲 粤语的哦;他的视频很多都是实现 页面 的一些功能,其中就包括这个 汉堡按钮,这是一个苹果官方网站的按钮 :苹果官方传送门

这个是视频的地址,感兴趣的小伙伴,可以看看哦 使用 HTML+CSS 制作动态 Hamburger Menu ,不知道之前有没有小伙伴 分享了。

下面的展示图 :
在这里插入图片描述


主要有 几个重要的地方 :


1. 复选框 和 div 的关系:

添加 复选框 和 div:

给复选框添加一个 id,用于 label 关联 复选框用;

<input type="checkbox" id="toggle" />

<label for="toggle">
     <div class="box"></div>
</label>

这时,点击 div, 复选框 就会被选中;然后使用 css 给 复选框选中时的 div 添加样式:

.box {
    width: 100px;
    height: 100px;
    background-color: pink;
}

#toggle:checked + label .box {
    background-color: cadetblue;
}

+ 是相邻兄弟选择器,只会选中相邻后面的第一个兄弟元素。

:checked 是复选框的 选择器吧,选中时,触发的。

点击 div ,复选框 选中状态,触发:checked, 改变 div 样式,看上去,就像 div 点击自己,然后,自己发生了 变化一样(就像一个 按钮);然后隐藏 复选框。



2. 线的动画

设置 header 标签,作为导航的背景

    <header>
        <input type="checkbox" id="toggle" />

        <label for="toggle">
            <div class="box">
                <span></span>
                <span></span>
            </div>
        </label>
    </header>

设置2条 span 为 白色背景,然后对 box 使用定位,把 汉堡按钮,调到 header 中, 居中的位置;

注意,给 2条 span 添加 定位,因为待会 变成 X 要使用到 top 这个属性;

不要使用 span 的定位去调 span 在 box 中的位置,因为后面要给 span 设置移动 和 旋转呢 !

.box span {
    position: absolute;
    top: 0;
    left: 0;
    display: block;
    width: 100%;
    height: 1px;

    background-color: #fff;
}

然后,给 2条 span 分别设置 样式,使点击 div 时,变成 X 的形状。

/* 点击时添加动画 */
#toggle:checked + label .box span:nth-child(1) {
    top: 5px;
    transform: rotate(45deg);
}
#toggle:checked + label .box span:nth-child(2) {
    top: -5px;
    transform: rotate(-45deg);
}

第1条,先往下移,然后在 顺时针旋转(正值);

第2条,先往上移动,然后 逆时针旋转 (负值);

现在按钮是这个样子的,没有过渡的动画
在这里插入图片描述

3. 添加过渡动画

1,给点击时,添加过渡动画(平 变成 X):

点击时,触发 :checked 所以我们在这个选择器后,给 span 添加过渡动画,就是 变成 X 的过程的 动画了

/* 给 span 添加过渡动画, 这个是 开始时的 过渡动画 */
#toggle:checked + label .box span {
    transition: top .3s ease, transform .3s ease .3s;
}
transition: 是过渡动画;
参数1, 过渡的动作;
参数2, 过程花费的时间;
参数3, 运动的快慢曲线(有很多中,从开到慢....)
参数4, 延迟时间(延迟多少时间在 开始动画)

这不是所有参数,只是例子中使用到的参数 。
设置2个 动作时,用 , 逗号分隔开,位置第一个的动作先发生 。


这时是这个样子的:
在这里插入图片描述


2,给还原时,添加过渡动画 (X 变 平):

就给 span 标题添加就好了

.box span {
    position: absolute;
    top: 0;
    left: 0;
    display: block;
    width: 100%;
    height: 1px;
    background-color: #fff;

    /* 还原时的过渡动画 */
    transition: transform .3s ease, top .3s ease .3s;
}

在这里插入图片描述



4.添加 折叠导航

在 header 中添加 ul 无序列表,点击 汉堡按钮,折叠的 导航也跟着打开。

这个的 导航折叠 是使用了 transform: scaleY() 收缩这个属性,让 导航的 Y 轴收缩为 0 ,这样就隐藏;显示呢,就设置 1,还原原来的样子 。(我以前都是使用 display: none,学到了,这样设置动画时,更好看 )。

    <header>
        <input type="checkbox" id="toggle" />

        <label for="toggle">
            <div class="box">
                <span></span>
                <span></span>
            </div>
        </label>

        <div class="nav-list">
            <ul>
                <li>Mac</li>
                <li>iPad</li>
                <li>iPhone</li>
                <li>Watch</li>
                <li>TV</li>
            </ul>
        </div>
    </header>

css 部分:

.nav-list {
    position: absolute;
    top: 40px;
    width: 100vw;
    height: 100vh;
    background-color: #333;
    /* 隐藏 */
    transform: scaleY(0);
    transform-origin: 50% 0;
    transition: all 0.5s ease;
}

设置为 定位,top 为 40, 就是 header 的高度;占满整个屏幕,然后设置为 隐藏状态 。

当点击 按钮 时,就显示 导航

#toggle:checked ~ .nav-list {
    transform: scaleY(1);
    background-color: black;
}

基本就是这样 。


视频教程来源 哔哩哔哩 CodingStartup起码课, 再这里只是做一个分享 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值