html+css+js 实现马赛克背景按钮

前言:哈喽,大家好,今天给大家分享html+css 绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕

支持一下

效果

马赛克效果

原理解析

1.给每一个按钮的back层添加span元素作为背景
2.span元素的数量是let count = 25 * parseInt(back.clientHeight / height);
马赛克
3.当hover时,span和p发生变化。
当hover时span和p发生变化

4.具体的变换参数,直接看代码,可以一键复制,查看效果

上代码,可以直接复制使用

目录

马赛克目录

html

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">

    <title>html+css+js 实现马赛克背景按钮</title>
    <link rel="stylesheet" href="./style.css">
</head>

<body>
<div class="container">
    <h1 style="text-align: center;color:#fff;margin-bottom: 50px;padding-top: 50px">html+css+js 实现马赛克背景按钮</h1>

    <div class="wrapper">
        <div class="button">
            <div class="back" style="--c:#e74c3c;"></div>
            <p>求点赞</p>
        </div>
        <div class="button">
            <div class="back" style="--c:#2ecc71;"></div>
            <p>求关注</p>
        </div>
        <div class="button">
            <div class="back" style="--c:#3498db;"></div>
            <p>求收藏</p>
        </div>
        <div class="button">
            <div class="back" style="--c:#9b59b6;"></div>
            <p>求转发</p>
        </div>
    </div>

</div>

<script>
  // 获取所有的.back层
  let backs = document.getElementsByClassName('back');
  // 遍历所有的.back层,并添加span元素作为背景
  for (let i = 0; i < backs.length; i++) {
    // 当前的.back层
    let back = backs[i];
    // 马赛克块宽高尺寸采用.back层的1/25宽度
    let width = back.clientWidth / 25;
    let height = width;

    // 计算所需的背景块数量
    let count = 25 * parseInt(back.clientHeight / height);
    for (let j = 0; j < count; j++) {
      // 根据计算结果并添加对应数量的span元素
      let span = document.createElement('span');
      span.style.width = width + 'px';
      span.style.height = width + 'px';
      // 设置动画过渡:时长 线性 动画延迟
      span.style.transition = '0.2s linear ' + Math.random() / 2 + 's';
      // 追加元素
      back.appendChild(span);
    }
  }
</script>
</body>

</html>

css

*{
    /* 初始化 */
    margin: 0;
    padding: 0;
}
.container{
    /* 100%窗口高度 */
    height: 100vh;
    /* 弹性布局 水平+垂直居中 */

    /* 渐变背景 */
    background: linear-gradient(200deg,#485563,#29323c);
}
.wrapper{
    width: 254px;
    margin: 0 auto;
}
.button{
    width: 250px;
    height: 80px;
    border: 2px solid #fff;
    display: flex;
    justify-content: center;
    align-items: center;
    border-radius: 10px;
    margin: 15px 0;
    cursor: pointer;
    /* 溢出隐藏 */
    overflow: hidden;
    /* 相对定位 */
    position: relative;
}
.button p{
    font-size: 22px;
    font-weight: bold;
    /* 绝对定位 */
    position: absolute;
    /* 动画过渡 */
    transition: 1s;
}
.button .back{
    width: 100%;
    height: 100%;
    position: absolute;
}
.button .back span{
    background-color: #fff;
    display: block;
    float: left;
}
.button:hover div span{
    /* 通过var函数调用自定义属性--c,设置背景颜色 */
    background-color: var(--c);
}
.button:hover p{
    color: #fff;
}

到此这篇文章就介绍到这了,更多精彩内容请关注本人以前的文章或继续浏览下面的文章,创作不易,如果能帮助到大家,希望大家多多支持宝码香车~💕

整理不易,点赞关注宝码香车

更多专栏订阅推荐:
👍 html+css+js 绚丽效果
💕 vue
✈️ Electron
⭐️ js
📝 字符串
✍️ 时间对象(Date())操作

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宝码香车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值