本博客介绍了如下内容:
1、伪元素的特征;
2、如果不通过伪元素,普通小白画八卦图方法;
3、如何通过伪元素装逼方法来画八卦图方法;
4、介绍了渐变色的生成工具和动画生成工具;
5、伪元素的注意问题。
6、还有其他,留给未来忘记这部分的自己和你看的。
伪类和伪元素developer.mozilla.org![4685c9dd5c74120c91f7ef1160a08f21.png](https://i-blog.csdnimg.cn/blog_migrate/9d08c802729e239fb9a585865cf59d4a.jpeg)
哪些元素有伪元素:只要是非空的元素都有伪元素,如果是空元素就没有伪元素。
比较通俗的特征:
1、前面有两个冒号,比如::after或者::before,如果只有一个冒号就是伪类;
2、通常会配合content属性来为该元素添加装饰内容;
3、这个虚拟元素默认是行内元素,但是可以设置display。
4、在浏览器的输出效果上无法选中。
![67ff68bde2ba17dd836b56cf57693797.png](https://i-blog.csdnimg.cn/blog_migrate/972ec8541d5b5496dfd4dc1031737a87.jpeg)
1、不用伪元素的情况来画一个阴阳图:
画一个圆
![954ceb6d37153b9ba288e0df701e7025.png](https://i-blog.csdnimg.cn/blog_migrate/4cb4e65a70bbd05f72d90bd61ffe45f4.jpeg)
然后在画阴阳的黑白颜色,这里可以通过两个div来写,也可以借助工具更快。就用下面的颜色生成器工具就行了。
Ultimate CSS Gradient Generator from ColorZillawww.colorzilla.com![7d12189a3f725de044d1f1bc0f3aa009.png](https://i-blog.csdnimg.cn/blog_migrate/9a89ca58bfdea11074b5684945a12807.jpeg)
八卦图就简单的设置两种颜色,黑白。
![63bb3a1b8902c7981d8399c1961d4523.png](https://i-blog.csdnimg.cn/blog_migrate/70d1091790578c383eb49de521bf8b1c.jpeg)
复制代码到CSS后,显示的效果。
![e03f3855d75fd3e92b2776e03e30b5f3.png](https://i-blog.csdnimg.cn/blog_migrate/7f54e2df0f6be04d37e095c34129163b.jpeg)
接下来在big类里面在设置两个圆分别是small1和small2。
这两个圆使用绝对定位,自身用position:absolute;父级big类用position:relative.
然后调整位置,可以通过margin、padding调整。
也可以通过top、bottom、left、right根据定位的父级元素来调整,使用top、bottom、left、right的前提是必须设置了position不为static的前提,默认position就是static。
比如直接使用top来调整,或者使用position:static;也就是默认下用top、bottom、left、right是不可以的,比如设置为position:static;没有任何反应。
![e20f15fbdaa267aa7f41e8fa30d22f38.png](https://i-blog.csdnimg.cn/blog_migrate/dc83ac374e146e7380d5e9cbf883f16d.jpeg)
默认情况也是没有任何反应。
![ed628fb81a59a84bbb49c16fbc011c2c.png](https://i-blog.csdnimg.cn/blog_migrate/391b71f6ff0768ed316e5e4e429cfe0a.jpeg)
设置position为别的属性,比如absolute就可以产生效果。
![7bfbabd9fbc51f0c27d04af77df9c57b.png](https://i-blog.csdnimg.cn/blog_migrate/2c741d7199875e2e9993f80da6e05d47.jpeg)
这样就明白如何调整位置了,通过调整之后显示两个小圆。
![9f146eea24e97bce6c9b6dd314570d75.png](https://i-blog.csdnimg.cn/blog_migrate/fc1208bd34d9846eba25bf383d7be21e.jpeg)
删除边框,增加body背景方便看到八卦图,增加两个小圆的背景色。
![efe214b4ded4e252144bfb7f7c8de86a.png](https://i-blog.csdnimg.cn/blog_migrate/b567773abe458a4eee5aea21bb140d1f.jpeg)
同样的,再增加DIV来画两个更小的圆。这个时候,position的父级已经有position:absolute定位了,所以不用在设置position:relative,如没有就必须要设置。
同样调整宽高,上下左右的距离去掉边框,增加背景颜色就出来啦。
![8abaf394458e887f2c5a4c508931ef53.png](https://i-blog.csdnimg.cn/blog_migrate/2dd700c2e5e626fbc0908cadc85a892c.jpeg)
普通的画八卦图结束啦。
2、咱们用伪元素在画一遍。
伪元素的特征前面说过,这里根据代码和图形在来看一遍部分特征。
把内部的四个DIV都删除,直接注释掉也OK,根据文档流方向,之前的small1在small2前面。也就是small1是before,small2是after.
然后.small1修改为.big::before,.small2修改为.big::after。其他的可以保持不变。
![65da4822c8af45d4c4dc73976220abd7.png](https://i-blog.csdnimg.cn/blog_migrate/c1ef90812ea7df8c06b438056060a3b6.jpeg)
为什么没有效果呈现呢?
1、因为伪元素::before和::after必须要加上content才可以显示,如果没有内容也必须设置一个空的,比如content:'';
![f353469edf3a27d2e493759bf95d1972.png](https://i-blog.csdnimg.cn/blog_migrate/9e4d2e7c670e340e9fc17f08170c79cd.jpeg)
增加了还是没有反应,还得满足一个条件。
2、::before和::after本身是内联的伪元素,前面说到过。
![bda7be696d491bde25f6a054ab4b0a33.png](https://i-blog.csdnimg.cn/blog_migrate/3447ad2bb88dceb85c21fb3fcd19b921.jpeg)
![5995d1b8be6c97f0364764e8d94a8298.png](https://i-blog.csdnimg.cn/blog_migrate/f730be9d571b5707ac8f8f30d49bee22.jpeg)
display: block;设置后就显示出来了。
此时因为把绝对定位注释了,所以位置偏了。
![c5a024b1c285c53e7e7f3431164983b1.png](https://i-blog.csdnimg.cn/blog_migrate/1a5536befa020a1473ab5740b121730d.jpeg)
display: inline-block;设置后就显示出来了。
此时因为把绝对定位注释了,所以位置偏了。
![367bdd0351be1cd722360d2d3dd6959f.png](https://i-blog.csdnimg.cn/blog_migrate/d200d507a08dffb91964ef73d72ac89a.jpeg)
两个条件满足就可以显示出来。
为了满足位置要求,我们把绝对定位不注释。
并且取消掉display: inline-block和display: block;
结果还是会显示,而且还满足了位置要求。
![1f09478e577e0768d76ef675dd974d4b.png](https://i-blog.csdnimg.cn/blog_migrate/4d4f13ef84c21d8cbae6e9f0130fc956.jpeg)
这个原因就是如果设置了display为非static的前提下,因为static是默认的。
比如设置了绝对定位display:absolute;这样内联元素会自动变成块级元素。
另外display:fixed也可以,其他的暂时没有效果。
![be6375de74c055249befbbf61548e541.png](https://i-blog.csdnimg.cn/blog_migrate/d0f9dacd52dc2ae8698984a8b478f9ad.jpeg)
继续完善,里面还有两个小圆,下一个特征,::before里面还可以加子元素吗,比如增加一个子元素::before。
::before里面增加一个子元素::before。设置content为1111,设置block,没有任何效果。
![e3d1f9a772ea49e45fca3d12edf72ca6.png](https://i-blog.csdnimg.cn/blog_migrate/ff6cb82c4166d3cf8a6844544516b56e.jpeg)
里面的小圆介绍两种方法来调整出来。
第一个方法使用前面说到的颜色渐变工具:
![42544100b3ee6026b50ec406bc6514c2.png](https://i-blog.csdnimg.cn/blog_migrate/409fa8a67dd3b014a6b1f2d59e4551c2.jpeg)
复制代码到伪元素之后显示效果。
![d0182b846c2f4263bf48018ae359db67.png](https://i-blog.csdnimg.cn/blog_migrate/27c63fdf8fc432d92b76f40af2c32f7c.jpeg)
同样把before也使用渐变工具。只需要把两边的颜色调换就满足了。
![ee9f432714e5889c633da7dff57e6c0b.png](https://i-blog.csdnimg.cn/blog_migrate/87a470b7091b9ca3bc953d7004205ddf.jpeg)
复制渐变的代码到before里面后,效果还不错哦。
![1a1a5bb7938632f0dcdb02cc2f2e6888.png](https://i-blog.csdnimg.cn/blog_migrate/2b0ed4e2a6c469f299a379e454847a6d.jpeg)
小圆用渐变工具到这里结束。
第二个方法就是可以用border,并且设置box-sizing:border-box;,把border的边框设置粗一点就OK啦。
因为设置了box-sizing:border-box;所以呢,设置了宽度就会自动调整内部大小,如果是content-box就需要自己手动调整哦。
边框设置40px,里面的小圆就是100-40-40=20px啦。
![f1cc18fcc7e00c89323cf1a60d5c937e.png](https://i-blog.csdnimg.cn/blog_migrate/b2dfdd62ae288a54ccb6a27da6d1d538.jpeg)
第三个方法就是还是用border,但是不设置box-sizing:border-box,或者设置为默认的content-box。
如果不使用box-sizing:border-box,默认就是content-box。就需要调整宽高为20px×20px。
![25c2c63f3e91656f1d21637573c9ed3b.png](https://i-blog.csdnimg.cn/blog_migrate/b0029d36956a25bbcad8c0f1a7f6324f.jpeg)
具体box-sizing:border-box和box-sizing:content-box区别见下面链接:
bomber:CSS中的content-box 与 border-box 的区别zhuanlan.zhihu.com静态图这里结束。
然后加一点旋转动画效果。
animationdeveloper.mozilla.org![4685c9dd5c74120c91f7ef1160a08f21.png](https://i-blog.csdnimg.cn/blog_migrate/9d08c802729e239fb9a585865cf59d4a.jpeg)
![4685c9dd5c74120c91f7ef1160a08f21.png](https://i-blog.csdnimg.cn/blog_migrate/9d08c802729e239fb9a585865cf59d4a.jpeg)
查询MDN可以直接看代码拷贝过来就行了。
![66e9ce2d105c23596ca6cab4f742584f.png](https://i-blog.csdnimg.cn/blog_migrate/6d4b4d18d4a4be92ba956c225602c2f7.jpeg)
增加一个关键帧@keyframes。
把margin-left和width修改为旋转的效果,transform。然后找到一个次数。
![a32cc0bf252fd5214a07b94c94d01d2e.png](https://i-blog.csdnimg.cn/blog_migrate/82795f4ead703be3c6cbec8a0ee6ec2d.jpeg)
![3b5828adc4d2313324dd1f5e94773a39.png](https://i-blog.csdnimg.cn/blog_migrate/a1a3c32c69da703e4db7fffed9b2be33.jpeg)
设置animation-iteration-count:infinite;就可以无限次数重复。
![59fd18ee6383042f4ec4ff2472ab44ce.png](https://i-blog.csdnimg.cn/blog_migrate/3c0de44b243f7abbbec0e31ff4f89fe3.jpeg)
看看动画效果:
![eaa4c8b2e8d4666e1cbd4c93ddc38547.png](https://i-blog.csdnimg.cn/blog_migrate/c0a2d4f3286fc85114ed004f8984687f.jpeg)
继续找匀速设置动画
![4d70c36d274c1bd4c298cb42f71536b5.png](https://i-blog.csdnimg.cn/blog_migrate/05e51b78dde3a6a34e0aa66e83df1e52.jpeg)
增加animation-timing-function:linear;为线性匀速。
![863ef146d899ed62dd3e23a8ee28b6b2.png](https://i-blog.csdnimg.cn/blog_migrate/88d18634c69d3ee6a6e8aee5c284e900.jpeg)
![b0b56feddf602aeda0c9324b12c9cdc7.png](https://i-blog.csdnimg.cn/blog_migrate/6d526d8310337df33b89e76556b6ee02.jpeg)
看看增加匀速后的动画效果:
![b9a301136683a64936c267715086a11b.png](https://i-blog.csdnimg.cn/blog_migrate/e0cb94ff5c5416cc8710df0c64abf1ac.jpeg)
当然不查MDN通过工具也是可以达到动画效果的。
下面链接就是动画的CSS工具哦:
CSS3 Keyframes Animation Generatorcssanimate.com这里可以设置各种参数:
如果就想普通的无限次数均速旋转,转一次4秒就这样设置。
![efa013fae76030ea77b36fd060ab5898.png](https://i-blog.csdnimg.cn/blog_migrate/d2ac52181f98c8659ad1f7130b291da8.jpeg)
![cec7341c0c6cedbd9558037c0a397276.png](https://i-blog.csdnimg.cn/blog_migrate/f05877ac3a961af9d91c4fb26f1702ed.jpeg)
工具在线动画生成效果:
![7414a30d837753e284b2f2cad4f5e87f.png](https://i-blog.csdnimg.cn/blog_migrate/4713f918afd707b146b584db8c1b1d4f.jpeg)
复制代码到需要用的css中,然后html中需要增加一个类名:
![8b99c988f74815b271edc1023f56cb1b.png](https://i-blog.csdnimg.cn/blog_migrate/3e3057fe75f9fdea7ebdb9d8dc8e8c14.jpeg)
使用工具生成的代码复制到CSS中,在html中增加类名
再来看看效果吧:
![e8e824227ce8f296df4a7c96f22afef9.png](https://i-blog.csdnimg.cn/blog_migrate/89446733efea7f0e318e3c097f7ef7c7.jpeg)
八卦图或者其他形状的源代码可以在这里查询,有各种形状的源代码资源:
bomber:用CSS做三角形zhuanlan.zhihu.comanimation也有简写:
animationdeveloper.mozilla.org![4685c9dd5c74120c91f7ef1160a08f21.png](https://i-blog.csdnimg.cn/blog_migrate/9d08c802729e239fb9a585865cf59d4a.jpeg)
本文为本人的原创文章,著作权归本人和饥人谷所有,转载务必注明来源