前端每日实战:130# 视频演示如何用 CSS 在线字体和 D3 创作一个 Google googol 信息图...

本文主要是介绍前端每日实战:130# 视频演示如何用 CSS 在线字体和 D3 创作一个 Google googol 信息图...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图片描述

效果预览

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

https://codepen.io/comehope/pen/xaPZye

可交互视频

此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

请用 chrome, safari, edge 打开观看。

https://scrimba.com/p/pEgDAM/cwkpGf9

源代码下载

每日前端实战系列的全部源代码请从 github 下载:

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

代码解读

定义 dom,只有 1 个空元素,其中不包含任何文本:

<div class="logo"></div>

引入字体文件,Product Sans 是 Google 专门为品牌推广创建的无衬线字体:

@import url("https://fonts.googleapis.com/css?family=Product+Sans");

居中显示:

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

用伪元素制作 logo,注意 content 的内容不是 "Google",而是 "google_logo"

.logo::before {content: 'google_logo';font-size: 10vw;
}

设置字体,采用刚才引入的在线字体,刚才页面上的 "google_logo" 文字被替换成了单色的 logo 图案:

body {font-family: 'product sans';
}

定义颜色变量:

:root {--blue: #4285f4;--red: #ea4335;--yellow: #fbbc05;--green: #34a853;
}

设置文字遮罩效果,为文字上色:

.logo::before {background-image: linear-gradient(to right,var(--blue) 0%, var(--blue) 26.5%, var(--red) 26.5%, var(--red) 43.5%, var(--yellow) 43.5%, var(--yellow) 61.5%,var(--blue) 61.5%, var(--blue) 78.5%, var(--green) 78.5%, var(--green) 84.5%, var(--red) 84.5%, var(--red) 100%);-webkit-background-clip: text;-webkit-text-fill-color: transparent;
}

至此,Google logo 制作完成,接下来制作 googol 信息,说明 Google 的名字来源于含义是 1 后面跟 100 个零的大数的单词 googol。

在 dom 中添加一行说明文本和容纳数字的容器,容器中包含 5 个数字,在每个数字的内联样式中指定了颜色变量:

<p class="desc">The name of Google originated from a misspelling of the word "googol", the number 1 followed by 100 zeros.</p> 
<div class="zeros"><span style="--c:var(--blue);">1</span><span style="--c:var(--red);">0</span><span style="--c:var(--yellow);">0</span><span style="--c:var(--blue);">0</span><span style="--c:var(--green);">0</span>
</div>

设置说明文本的样式:

.desc {font-size: 1.5vw;font-weight: normal;color: dimgray;margin-top: 2em;
}

设置数字的样式:

.zeros {font-size: 3vw;font-weight: bold;margin-top: 0.2em;text-align: center;width: 25.5em;word-wrap: break-word;
}

为数字上色:

.zeros span {color: var(--c);
}

微调数字 "1" 的边距,让它不要和后面的 "0" 靠得太紧:

.zeros span:nth-child(1) {margin-right: 0.2em;
}

至此,静态布局完成,接下来用 d3 批量处理数字。

引入 d3 库,并删除掉 dom 中 .zeros 的数字子元素:

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

最终我们会在页面上显示 100 个 0,每个 0 的颜色都不同,并且为了美观,相邻数字的颜色也要不同。
所以,先定义一个获取颜色的函数,它可以从 Google logo 配色的 4 种颜色中取任意一个颜色,并且有一个表示被排除颜色的参数,当指定的此参数时,就从 4 个可选的颜色中去掉这个颜色,然后从剩下的 3 个颜色中随机取一个颜色:

function getColor(excludedColor) {let colors = new Set(['blue', 'red', 'yellow', 'green'])colors.delete(excludedColor)return Array.from(colors)[Math.floor(d3.randomUniform(0, colors.size)())]
}

然后,定义 2 个常量,ZEROS 是存储 100 个 0 的数组,ONE 是存储数字 1 的对象,它有 2 个属性,number 表示它的数值是 1,color 表示它的颜色是蓝色:

const ZEROS = d3.range(100).map(x=>0)
const ONE = {number: 1, color: 'blue'}

接下来,通过用 reduce 函数遍历 ZEROS 数组,返回一个新的数组 numbers,它有 101 个元素(1 以及跟随它的 100 个 0),每个元素都是 1 个包含 numbercolor 属性的对象:

let numbers = ZEROS.reduce(function (numberObjects, d) {numberObjects.push({number: d,color: getColor(numberObjects[numberObjects.length - 1].color)})return numberObjects
}, [ONE])

然后,以 numbers 为数据源,用 d3 批量创建出 dom 元素,并且把颜色信息写在行内样式中:

d3.select('.zeros').selectAll('span').data(numberObjects).enter().append('span').style('--c', (d)=>`var(--${d.color})`).text((d)=>d.number)

最后,微调一下内容的边距,使整个内容居中:

.logo {margin-top: -10vh;
}

大功告成!

这篇关于前端每日实战:130# 视频演示如何用 CSS 在线字体和 D3 创作一个 Google googol 信息图...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/278857

相关文章

CSS place-items: center解析与用法详解

《CSSplace-items:center解析与用法详解》place-items:center;是一个强大的CSS简写属性,用于同时控制网格(Grid)和弹性盒(Flexbox)... place-items: center; 是一个强大的 css 简写属性,用于同时控制 网格(Grid) 和 弹性盒(F

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

CSS Anchor Positioning重新定义锚点定位的时代来临(最新推荐)

《CSSAnchorPositioning重新定义锚点定位的时代来临(最新推荐)》CSSAnchorPositioning是一项仍在草案中的新特性,由Chrome125开始提供原生支持需... 目录 css Anchor Positioning:重新定义「锚定定位」的时代来了! 什么是 Anchor Pos

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构