问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用CSS代码实现?

发布网友 发布时间:2022-04-23 03:38

我来回答

2个回答

懂视网 时间:2022-04-28 15:42

本篇文章给大家带来的内容是关于如何使用CSS和D3实现一组彩灯(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

效果预览

128473256-5b7e221b2934e_articlex.gif

源代码下载

https://github.com/comehope/front-end-daily-challenges

代码解读

定义 dom,容器中包含 9 个元素,代表 9 个数字:

<div class="pi">
 <span>3</span>
 <span>1</span>
 <span>4</span>
 <span>1</span>
 <span>5</span>
 <span>9</span>
 <span>2</span>
 <span>6</span>
 <span>5</span>
</div>

居中显示:

body {
 margin: 0;
 height: 100vh;
 display: flex;
 align-items: center;
 justify-content: center;
 background-color: black;
}

定义容器尺寸:

.pi {
 width: 30em;
 height: 30em;
 font-size: 12px;
}

把 9 个数字布局成 3 * 3 的网格:

.pi {
 display: grid;
 grid-template-columns: repeat(3, 1fr);
 grid-gap: 0.2em;
}

.pi span {
 color: white;
 font-size: 3em;
 background-color: hsl(0, 40%, 40%);
 font-family: sans-serif;
 border-radius: 50%;
 display: flex;
 align-items: center;
 justify-content: center;
 user-select: none;
}

在 dom 中定义 css 变量,变量值等于该元素代表的数字:

<p class="pi">
 <span style="--d: 3">3</span>
 <span style="--d: 1">1</span>
 <span style="--d: 4">4</span>
 <span style="--d: 1">1</span>
 <span style="--d: 5">5</span>
 <span style="--d: 9">9</span>
 <span style="--d: 2">2</span>
 <span style="--d: 6">6</span>
 <span style="--d: 5">5</span>
</p>

为不同的数字设置不同的背景色:

.pi span {
 --c: hsl(calc(var(--d) * 36), 40%, 40%);
 background-color: var(--c);
}

使数字的颜色与背景相同,在鼠标悬停时,高度当前的数字:

.pi span {
 color: var(--c);
 transition: 0.3s;
}

.pi span:hover {
 background-color: white;
 color: black;
 box-shadow: 0 0 1em yellow;
}

至此,完成了视觉效果设计,接下来用 d3 批量处理 dom 元素和 css 变量。
引入 d3 库:

<script src="https://d3js.org/d3.v5.min.js"></script>

删除掉 html 文件中代表数字的 dom 元素,用 d3 创建代表数字的 dom 元素,并设置 css 变量:

const PI = '314159265';

d3.select('.pi')
 .selectAll('span')
 .data(PI)
 .enter()
 .append('span')
 .style('--d', (d) => d)
 .text((d) => d);

PI 改为100位:

const PI = '3141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067';

同时把网格改为 10 * 10 的布局:

.pi {
 grid-template-columns: repeat(10, 1fr);
}

.pi span {
 font-size: 1.3em;
}

接下来制作循环点亮的效果。

为各数字元素增加 css 类,数字 0 的类名是 d0,数字 1 的类名是 d2,以此类推:

d3.select('.pi')
 .selectAll('span')
 .data(PI)
 .enter()
 .append('span')
 .attr('class', (d) => `d${d}`)
 .style('--d', (d) => d)
 .text((d) => d);

定义循环变量 number,它从 1 开始逐渐递增:

let number = 1;

定义一个函数,用于点亮特定数字的一组元素:

function show() {
 d3.selectAll(`.pi span.d${number % 10}`)
 .classed('show', true);
 d3.selectAll(`.pi span.d${(number-1) % 10}`)
 .classed('show', false);
 number++;
}

最后,设置一个间隔时间,不断重复调用上面这个函数,让各组数字依次点亮:

setInterval(show, 500);

大功告成!

相关推荐:

如何使用纯CSS实现彩虹条纹文字的效果(附代码)

如何使用纯CSS实现带有金属光泽的立体按钮的动画效果(附源码)

热心网友 时间:2022-04-28 13:06

倒山角 可以用任意一个标签 不定义高宽 只定义边框宽度 然后只显示上边框 就出来了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女方早婚早育要离婚未满月孩子该怎么才能判给 家庭暴力,孩子未满月,孩子母亲要求离婚 孩子未满月是否可以离婚 孩子未满月可不可以离婚 新生儿未满月是否可离婚 固原斜视眼有哪些表现? 如何看待儿童斜视问题?固原 固原斜视儿童有必要做手术吗 HOJOJODO皇家金盾S1智能电子锁-详细介绍 皇家金盾智能锁怎么改密码 您好,请问支付宝交易关闭要怎么解决啊,找人工客服客服说账号没问题了,可是一转账还是交易关闭? CSS代码的实现 支付宝已经付款了,显示交易关闭怎么办? CSS主要有几种引用方法? 分别怎样实现的? css 怎么实现 div水平居中 呢? 支付宝账单里面的交易关闭是什么意思? 什么是css,可以有那几种实现方法 支付宝里显示“交易关闭”的交易的钱去哪了?是回到账户上了,还是其他... 网页中css如何实现点划线 支付宝交易关闭是什么意思?是不是没扣钱? css的几种实现方式 交易关闭是什么意思? 什么域名不需要备案可以直接解析? 我想做个自己的网站,想问下哪里有做网站最便宜的(600元以内的,含网站建设和域名空间),又便宜又好? 现在的域名都要备案才能解析吗?以前不是只是空间需要备案而已吗? 域名被工信部屏蔽了,没备案的 .com.cn域名需要备案才能用吗?不备案能不能用? 国内的空间都要域名备案,备案了的域名可以任意解析国内其他空间吗? 免备案服务器选哪里的最好呢? 域名租用,免备案去哪里租?? 为什么我支付宝付款失败,显示交易关闭,而钱却扣了? 请问怎么使用css实现下面的布局 怎样用css实现div选中的效果 已付款支付宝,但交易关闭了,怎么办 怎样通过css实现如下效果 淘宝上用支付宝付款了后显示交易关闭怎么办?急~ 支付宝交易关闭后商家能看到吗?还有交易关闭后怎么重新支付 css如何实现以下效果? 怎样用css实现图片的渐变?如图 红烧羊杂怎么做 羊杂红烧怎么做 正宗红烧羊杂的做法 红烧羊杂的做法大全 红烧羊杂的做法川味 红焖羊杂的做法大全 红烧羊杂的家常做法 红烧羊杂怎么做好吃 怎么样做红烧羊杂 曹县红烧羊杂做法。 就是回民喜宴炖的羊杂 红烧羊杂的做法