魔术变色帽子实现

简介: 魔术变色帽子实现

效果图

image.png

页面结构

页面结构我们只有一个大盒子,大盒子里面有一个魔术帽承载盒子以及魔术帽变色按钮,当魔术帽变色按钮点击后魔术帽的颜色会发生改变

<div id="app">
        <!-- 魔术帽 -->
        <div>
            <div class="hat"></div>
            <div class="brim"></div>
        </div>
        <div>
            <!-- 魔术帽按钮 -->
            <button id="btn">魔术帽变色</button>
        </div>
    </div>

初始样式

清除所有元素的内边距外边距

* {
            margin: 0;
            padding: 0;
        }

使用定位的方式让大盒子页面居中,然后使用flex布局,先将Y轴设置为主轴,然后再让里面的内容Y轴居中和X轴居中

#app {
            position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
        }

让大盒子里面的元素也使用flex布局X轴居中和Y轴居中

#app>div {
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            margin-bottom: 20px;
        }

帽子样式

设置好帽子的宽高,用边框圆角属性让帽子变成一个半圆,然后给上背景色,再让设置下边框属性,用此充当帽子连接处

.hat {
            height: 150px;
            width: 300px;
            border-radius: 150px 150px 0 0;
            background: #08ef5d;
            border-bottom: 20px solid #0bec2d;
        }

帽檐样式

我们设置好帽檐的宽高,然后通过边框圆角属性给出效果,设置好背景色,我们由于使用flex布局Y轴为主轴,X轴居中,所以我们这里不需要给其他设置,就可实现一个帽子的效果

.brim {
            height: 50px;
            width: 400px;
            border-radius: 400px 400px 0 0;
            background: #37ff00;
        }

帽子变色逻辑

// 获取魔术帽变色按钮
        const btn = document.getElementById('btn');
        // 获取帽子元素
        const hat = document.getElementsByClassName('hat')[0];
        // 获取帽檐元素
        const brim = document.getElementsByClassName('brim')[0];
        // 当魔术帽变色按钮点击时
        btn.onclick = () => {
            // 随机获取3个0~255之间的数用于更换背景色
            const R = Math.round(Math.random() * 255);
            const G = Math.round(Math.random() * 255);
            const B = Math.round(Math.random() * 255);
            // 给魔术帽重新赋值颜色
            hat.style.backgroundColor = `rgb(${R},${G},${B})`;
            // 给魔术帽连接处重新赋值颜色
            hat.style.borderBottomColor = `rgb(${G},${B},${R})`;
            // 给魔术帽帽檐重新赋值颜色
            brim.style.backgroundColor = `rgb(${B},${G},${R})`;
        }

代码放到码上掘金了,感兴趣的大家可以看一看!

image.png

坚持努力,无惧未来!

相关文章
|
1月前
超简单的html+css魔幻霓虹灯文字特效
超简单的html+css魔幻霓虹灯文字特效
13 3
超简单的html+css魔幻霓虹灯文字特效
|
8月前
|
Serverless
7-9 拯救外星人
你的外星人朋友不认得地球上的加减乘除符号,但是会算阶乘 —— 正整数 N 的阶乘记为 “N!”,是从 1 到 N 的连乘积。所以当他不知道“5+7”等于多少时,如果你告诉他等于“12!”,他就写出了“479001600”这个答案。
137 0
|
9月前
|
Python
送给小公主的一首诗——闪光屏幕书写(Python实现)
送给小公主的一首诗——闪光屏幕书写(Python实现)
|
设计模式 JavaScript Dubbo
满屏的if-else,看我怎么消灭你!
在实际的业务开发当中,经常会遇到复杂的业务逻辑,可能部分同学实现出来的代码并没有什么问题,但是代码的可读性很差。 本篇文章主要总结一下自己在实际开发中如何避免大面积的 if-else 代码块的问题。补充说明一点,不是说 if-else 不好,而是多层嵌套的 if-else 导致代码可读性差、维护成本高等问题。
|
前端开发
CSS动画——行走的小人
CSS动画——行走的小人
231 0
CSS动画——行走的小人
R 可视乎 | 绘制卡通圣诞树
先和大家说一句圣诞快乐呀,最近 DIY 涂鸦圣诞树非常受欢迎,小编琢磨着能否用 R 语言来绘制一颗圣诞树呢,最后终于让小编找到了教程[1],这不赶紧在今天分享出来给大家,一起动手试一试吧~
234 0
R 可视乎 | 绘制卡通圣诞树
|
机器学习/深度学习
2038. 如果相邻两个颜色均相同则删除当前颜色 : 脑筋急转弯运用题
2038. 如果相邻两个颜色均相同则删除当前颜色 : 脑筋急转弯运用题
|
存储 前端开发 JavaScript
文字到底能玩出多少花样(一) 炫酷文字粒子效果实现
文字到底能玩出多少花样(一) 炫酷文字粒子效果实现
161 0
文字到底能玩出多少花样(三)使用background实现花式下划线
文字到底能玩出多少花样(三)使用background实现花式下划线
327 0
文字到底能玩出多少花样(三)使用background实现花式下划线
|
人工智能 算法 IDE
与「看不见的手」掷骰子的人
500 亿管理规模已经暗示王阳所在的这家公司掌握了某种平衡之美——它兼顾了最为前沿的研究与结果导向。这其中的秘诀是什么?这台神秘而又充满精度的金融机器又是如何高效运转的?
131 0
与「看不见的手」掷骰子的人