百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

从青铜到王者10个css3伪类使用技巧和运用

toyiye 2024-06-06 22:11 12 浏览 0 评论

写在前面

伪类经常与伪元素混淆,伪元素的效果类似于通过添加一个实际的元素才能达到,而伪类的效果类似于通过添加一个实际的类来达到。实际上css3为了区分两者,已经明确规定了伪类用一个冒号来表示,而伪元素则用两个冒号来表示。伪类与伪元素的本质区别就是是否抽象创造了新元素。具体的伪类和伪元素相关知识本文就不深入,下面介绍一下从青铜到王者10个css3伪类使用技巧和运用。直击案例代码

青铜-1、伪类实现盒子阴影

众所周知,Animate/transition box-shadow可以使用box-shadow属性来实现盒子阴影效果,但repaint消耗较多,于是这里提出通过修改伪元素的透明度来实现盒子阴影

实现原理:

通过改变透明度,这样从一个非默认值更新它的值,就不需要承担任何重绘(参见:https://csstriggers.com/opacity)(ps:貌似莫名的解锁了一个关于前端css优化,坏笑坏笑)

这里设置一个空的伪元素设置阴影透明度为0隐藏,再通过鼠标悬停恢复它的透明度,下面是传统和伪类实现的代码对比

<div class="before">
 <h1>Before</h1>
 <p>Animate/transition box-shadow 可以使用box-shadow属性来实现盒子阴影效果,但重绘消耗较多</p>
</div>
 <hr />
<div class="after">
 <h1>After</h1>
 <p>通过修改伪元素的透明度来实现同样的效果,没有重绘消耗</p>
</div>
.before {
 padding: 1em;
 background-color: #fff;
 -webkit-transition: 0.2s;
 transition: 0.2s;
}
.before:hover {
 box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.3);
}
.after {
 position: relative;
 padding: 1em;
 background-color: #fff;
}
.after:before {
 content: "";
 position: absolute; 
 top: 0;
 right: 0;
 bottom: 0; 
 left: 0;
 z-index: -1;
 box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.3);
 opacity: 0;
 will-change: opacity;
 -webkit-transition: 0.2s;
 transition: 0.2s;
}
.after:hover:before {
 opacity: 1;
}

效果:(完整代码见后文链接)

青铜-2、伪元素:before实现的面包屑导航栏

<ul class="breadcrumb">
 <li><a href="#">Home</a>
 </li>
 <li><a href="#">Pictures</a>
 </li>
 <li><a href="#">Summer 15</a>
 </li>
 <li>Italy</li>
</ul>
ul.breadcrumb {
 padding: 8px 16px;
 list-style: none;
 background-color: #eee;
}
ul.breadcrumb li {
 display: inline;
}
ul.breadcrumb li+li:before {
 padding: 8px;
 color: black;
 content: "/\00a0";
}
ul.breadcrumb li a {
 color: green;
}

效果:

青铜-3、伪元素实现悬停时按钮填充和边界浮动动画

效果:(完整代码见后文链接)

青铜-4、伪类after实现的三角箭头

实现原理:三边设置边框,箭头指向的那个方向的border不用设置,位于箭头两边的边框颜色为透明(transparent),对边为主体边框颜色(较大的)/主体背景颜色(较小的),因为我们要有边框颜色的三角箭头,当第一个箭头(较大的)被第二个箭头(较小的)通过准确覆盖之后剩下没被覆盖的边缘就是合成三角箭头的边框了,其颜色就是较大的那个三角箭头的颜色,可调。而较小的那个三角箭头的颜色要设置成主体颜色,进行负值定位偏移时要把主体边框盖住,从而与主体合在一起了

<div class='container'>
 <img alt='' src='http://placehold.it/400x200'>
 <div class='arrow-left'></div>
</div>
<div class='container new'>
 <div class='arrow-right'></div>
 <img alt='' src='http://placehold.it/400x200'>
</div>
.arrow-left:before {
 z-index: 9999;
 content: "";
 display: block;
 width: 0;
 height: 0;
 border-top: 20px solid transparent;
 border-bottom: 20px solid transparent;
 border-right: 20px solid #E9E9E9;
 position: absolute;
 left: -20px;
 top: 80px;
}

效果:(完整代码见后文链接)

青铜-5、伪类after实现的图片箭头

效果:(完整代码见后文链接)

青铜-6、伪元素实现带角度的底部边界(倾斜的边界)

原理:修改webkit-transform: skewY属性来修改倾斜度(旋转也是一样的道理)

.edge--bottom {
 position: relative;
 z-index: 1;
}
.edge--bottom:after {
 background: inherit;
 content: '';
 display: block;
 height: 50%;
 left: 0;
 position: absolute;
 right: 0;
 z-index: -1;
}
.edge--bottom:after {
 bottom: 0;
 -webkit-transform: skewY(-1.5deg);
 -ms-transform: skewY(-1.5deg);
 transform: skewY(-1.5deg);
 -webkit-transform-origin: 100%;
 -ms-transform-origin: 100%;
 transform-origin: 100%;
}

效果:(完整代码见本文结尾链接)

王者-1、伪元素和平移(translate)变换实现的提示框

<div class="row">
 <a rel="nofollow" rel="noreferrer" href="#" class="btn tooltip top">
 <span>TOOLTIP TOP</span>
 <span class="tooltip-content">Lorem ipsum dolor sit amet</span>
 </a>
 </div>
.tooltip .tooltip-content::after {
 background: #05a8ff;
 content: "";
 height: 10px;
 position: absolute;
 -webkit-transform: rotate(45deg);
 transform: rotate(45deg);
 width: 10px;
}
.tooltip.top .tooltip-content {
 bottom: calc(100% + 1.5em);
 left: 50%;
 -webkit-transform: translateX(-50%);
 transform: translateX(-50%);
}
.tooltip.top .tooltip-content::after {
 bottom: -5px;
 left: 50%;
 margin-left: -5px;
}

效果:(完整代码见本文结尾链接)

王者-2、使用CSS3伪元素实现的自动打字动画

原理:Typing Animation with Pseudo-Elements 看起来是打字,其实是使用伪元素覆盖在字符串上,然后逐渐减少伪元素覆盖宽度来实现的视觉效果

<div>
 <h1>Typing Animation</h1>
 <p class="tagline">
 <span class="tagline-skill"><span class="tagline-skill_inner">webdesign</span></span>
 </p>
</div>
.tagline-skill_inner:after {
 content: "";
 position: absolute;
 top: -1px;
 right: 0;
 bottom: -2px;
 left: 0;
 border-left: 1px solid #fff;
 background-color: #2a2a28;
 -webkit-animation: animatetoright 1s steps(10) infinite alternate;
 animation: animatetoright 1s steps(10) infinite alternate;
}

效果:(完整代码见本文结尾链接)

王者-3、CSS3 伪元素构建的文章水印背景

h1 {
 position: relative;
 margin: 0;
 font-weight: bold;
 letter-spacing: -0.05rem;
 line-height: 1;
 text-transform: uppercase;
 z-index: 10;
}
h1:before {
 content: "2018/08";
 font-family: monospace;
 font-size: 10rem;
 position: absolute;
 top: 2rem;
 left: -2rem;
 z-index: 0;
 line-height: 1;
 color: rgba(50, 25, 0, 0.1);
}

效果:(完整代码见本文结尾链接)

王者-4、CSS3 用伪元素做页码摘要

a {
 display: -webkit-box;
 display: -webkit-flex;
 display: -ms-flexbox;
 display: flex;
 -webkit-flex-flow: row nowrap;
 -ms-flex-flow: row nowrap;
 flex-flow: row nowrap;
 -webkit-box-align: baseline;
 -webkit-align-items: baseline;
 -ms-flex-align: baseline;
 align-items: baseline;
 text-decoration: none;
 -webkit-transition: color .2s ease-in-out;
 transition: color .2s ease-in-out;
}
a::before {
 height: .1em;
 -webkit-box-flex: 1;
 -webkit-flex: 1 1 auto;
 -ms-flex: 1 1 auto;
 flex: 1 1 auto;
 -webkit-box-ordinal-group: 2;
 -webkit-order: 1;
 -ms-flex-order: 1;
 order: 1;
 background: left bottom/contain repeat-x url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3IDIiPjxjaXJjbGUgZmlsbD0iI2ZmZiIgY3g9IjMuNSIgY3k9IjEiIHI9IjEiLz48L3N2Zz4=);
 content: '';
}
a::after {
 -webkit-box-ordinal-group: 3;
 -webkit-order: 2;
 -ms-flex-order: 2;
 order: 2;
 content: "p." attr(data-page);
}

效果:(完整代码见本文结尾链接)

王者-5、伪类兼容性了解一下

1、IE8不支持CSS3中很多特性,比如伪元素nth-child,可以使用+号(代表相邻元素)来实现相同功能

2、Google的IE9.js是解决IE5.5到IE8,CSS3特性兼容性问题的JS库

最后

CSS的世界很美好,每个知识点都可以值得深入研究和实践,对于伪类、伪元素也有很多土味特效可以写出来,比如说图片遮罩、图片背景模糊,更多高级的鼠标经过事件特效等等,上边的10个案例是我个人工作上总结和参考踏得网上资源整理,希望对大家有所帮助最后附上github示例源码,可下载体验。

github地址:https://github.com/HongqingCao/my-code/tree/Pseudo-classes

关注我的头条号,分享更多的技术学习文章,我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码