用 css 画一个太极图,才几行代码就开始喊难了?

简介: 据说太极图里面的文化博大精深,有着一生二,二生三,三生万物的道理,虽然我不怎么懂,要让它转起来就会发现非常神奇,那今天我们就来用 css 画一个太极图吧。

据说太极图里面的文化博大精深,有着一生二,二生三,三生万物的道理,虽然我不怎么懂,要让它转起来就会发现非常神奇,那今天我们就来用 css 画一个太极图吧。

首先我们先来看一下效果,鼠标移上去让它转起来看看。

移入和移除的效果是不一样的哟,建议反复观看:
代码片段

接下来就开始讲解实现思路和代码了,真的草鸡简单,就几行代码。

1. 思路

首先看看太极图的构成,首先是黑白两个部分平分,然后内部会有两个圆,一个黑圆,一个白圆,黑白圆里面又有一个小的反色圆,总共就五个部分组成。

组成成分我用红框已经标出来了,如下图,现在看着框框标着乱没关系,马上讲解了就清楚了。

image.png

网上都是伪元素+定位啥的来实现,代码又多又复杂,今天咱们用渐变来实现,简单又好看。

2. 代码

2.1 结构


<div></div>

没想到吧,就这么简单,我一个div就可以了。

2.2 样式

先给div设置一下宽高,然后使用线性渐变来实现黑白两个部分:

div {
   
   
    width: 300px;
    height: 300px;
    background-image: linear-gradient(#fff 50%, #000 50%);
}

这样我们就得到了黑白两个部分,线性渐变之前我写过一篇文章有讲过,这里就不多说了,有兴趣的可以看看:渐变是真的好玩,真是一个有趣的特性

image.png

当然上面的div还不够圆,加个border-radius: 50%;就好了蛮。

接下来我们需要实现的是内部的两个圆,一个黑圆,一个白圆,这里我们使用的是radial-gradient,直接上代码:

div {
   
   
    width: 300px;
    height: 300px;
    border-radius: 50%;
    background-image:
        radial-gradient(50% 50% at 25% 50%, #fff 50%, transparent 50%),
        radial-gradient(50% 50% at 75% 50%, #000 50%, transparent 50%),
        linear-gradient(#fff 50%, #000 50%);
}

ok,现在的效果就有点像模像样了:

image.png

这里的知识点是径向渐变radial-gradient,现在就来讲讲它是怎么用的。

2.3 radial-gradient

径向渐变是从中心向外扩散的渐变,它的形式语法是:

radial-gradient([shape || size] at [position], [color-stops])

其中shape是形状,size是大小,position是位置,color-stops是颜色。

慢慢分析:

  • [shape || size]:是形状或者大小,只能二选一
    • shape:形状,有circleellipse两种,分别是圆形和椭圆形,默认是ellipse
    • size:大小,有closest-sideclosest-cornerfarthest-sidefarthest-corner四种,分别是最近边、最近角、最远边、最远角,默认是farthest-corner;当然除了关键字还可以是其他数值单位,比如pxem等。
  • at [position]:是位置,是指渐变的中心点,可以是关键字toprightbottomleftcenter,也可以是其他数值单位,比如pxem等。
  • [color-stops]:是颜色,接收的是颜色值和百分比,比如red 50%,表示颜色是红色,百分比是50%。

通过上面的分析,我们可以知道,radial-gradient可以有下面的几种形式:

div {
   
   
    background-image: radial-gradient(red, blue),
    radial-gradient(red 50%, blue, green 80%),
    radial-gradient(circle, red 50%, blue 50%),
    radial-gradient(circle at top, red, blue),
    radial-gradient(circle at top left, red 50%, blue 50%),
    radial-gradient(50px at 50px 50px, red 50%, blue 50%);
    /*  还有很多组合,要学会举一反三  */
}

2.4 两个圆的位置

现在来分析我上面写的代码,我们可以看到,我写了两个个radial-gradient,分别是:

div {
   
   
    background-image:
        radial-gradient(50% 50% at 25% 50%, #fff 50%, transparent 50%),
        radial-gradient(50% 50% at 75% 50%, #000 50%, transparent 50%);
}

radial-gradient(50% 50% at 75% 50%, #000 50%, transparent 50%)代表的是黑色的圆;

50% 50% at 75% 50%对应的就是[size] at [position]size50% 50%代表这个圆是外面的大圆的一半大小,position75% 50%代表这个圆往左偏移了75%,往下偏移了50%

radial-gradient(50% 50% at 25% 50%, #fff 50%, transparent 50%)代表的是白色的圆,道理和上面是一样的,只不过这个圆是往左偏移了25%

这里有一个问题就是为啥是75%25%,拿白圆来说应该是0才对,这是因为这个position对应的是径向的中心点,而不是想我们用position时那样,是相对于自身的位置,所以这里的0是指自身的中心点,而不是左上角。

2.5 两个圆的颜色

#fff 50%, transparent 50%颜色只用了两个,分别是#ffftransparent,因为我们需要的是纯色的圆,所以肯定不能让颜色有过渡,所以这里的关键点在于后面的50%这个参数。

第一个#fff 50%代表白色的圆的#fff要占50%剩余的地方再看你看着处理;

transparent 50%代表透明色要从50%开始占剩余的地方,这样就可以保证白色的圆是纯色的了。

黑色的圆也是一样的道理,就不多说了。

2.6 内部的小圆

有了上面的基础,我们可以如法炮制,来画一个内部的小圆,代码如下:

div {
   
   
  background-image: 
  radial-gradient(10% 10% at 75% 50% ,#fff 50%, transparent 50%),
  radial-gradient(10% 10% at 25% 50% ,#000 50%, transparent 50%),
  radial-gradient(50% 50% at 25% 50% ,#fff 50%, transparent 50%),
  radial-gradient(50% 50% at 75% 50% ,#000 50%, transparent 50%),
  linear-gradient(#fff 50%, #000 50%);
}

上面就是完整的太极图的代码了,可以看到小圆和上面写的大圆代码是一样的,只是改动的size,其他的都是一样的,所以这里就没什么好讲解的了。

至于为什么position也没变,上面已经说过了,这里的position是径向渐变的中心点,而不是我们平时用position时的相对位置。

3. 让它转起来

现在我们已经画好了太极图,但是它是静止的,我们要让它转起来,这里我就发现掘金的头像,鼠标移上去就会转起来,这里直接CV工程师上线:

div:hover {
   
   
    transform: rotate(666turn);
    transition-delay: 1s;
    transition-property: all;
    transition-duration: 59s;
    transition-timing-function: cubic-bezier(.34,0,.84,1);
}

nice,转起来了,但是鼠标移开就立马停止了,我还想让它多转一会,这个就简单了,直接在div上加个transition: all 60s;就可以了。

完整代码和示例在文章开头,真不错呀~~~

4. 总结

这里就是我用CSS画太极图的全部过程了,其实也没什么难度,只要你有一点点的CSS基础,就可以轻松的完成这个任务,开始酸了。

目录
相关文章
|
11月前
|
人工智能 程序员 UED
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
499 21
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
11月前
|
前端开发 JavaScript
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
321 14
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
11月前
css3实现3D数字时钟滚动特效代码
css3实现3D数字时钟滚动特效代码
403 18
|
编解码 前端开发
编写代码中常见问题汇总(html和css)
编写代码中常见问题汇总(html和css)
188 0
纯css3发光霓虹灯文字闪烁特效代码
纯css3发光霓虹灯文字闪烁特效代码是一款彩色的店铺名称文字动画特效。
162 6
纯css3加载loading发光变色动画代码
纯css3加载loading发光变色动画特效代码是一款基于css3 keyframes属性实现的发光变色圆点串联旋转loading加载动画
186 2
|
JSON 移动开发 数据格式
html5+css3+js移动端带歌词音乐播放器代码
音乐播放器特效是一款html5+css3+js制作的手机移动端音乐播放器代码,带歌词显示。包括支持单曲循环,歌词显示,歌曲搜索,音量控制,列表循环等功能。利用json获取音乐歌单和歌词,基于html5 audio属性手机音乐播放器代码。
397 6
|
前端开发
简单几行代码CSS实现网页自动打文字效果
简单几行代码CSS实现网页自动打文字效果
183 1
简单几行代码CSS实现网页自动打文字效果
|
前端开发
HTML静态网页设计作业、仿写大学官网 (力争使用最少的Html 、CSS代码实现)
这篇文章展示了一个仿大学官网的HTML静态网页设计作业,重点在于使用最少的HTML和CSS代码实现页面效果,并便于后期维护。
HTML静态网页设计作业、仿写大学官网 (力争使用最少的Html 、CSS代码实现)
|
前端开发
零基础 CSS 入门问题之CSS 代码的一般格式是什么样的
零基础 CSS 入门问题之CSS 代码的一般格式是什么样的
110 1