html%3ca%3e的下划线,【译】这44个 CSS 精选知识点你能在30 秒内给出答案吗?

写在前面

一个周五的晚上,闲来无事整理下自己的 github(经常做收藏党),今天打算都过一遍,发现一个star很高的项目,里面有大量的 CSS 片段,而且标题很诱人,然后又花了将近1个小时从头到尾过了一遍,其中一些是我们常用的一些知识点,另外也包含一些比较新的属性的应用,知识点挺多的,为了让大家看起来更方便些,然后又花了点(很长很长)时间翻译成中文。

2812e3091897d4dcf8706f0314178483.png

当然提前需要和作者沟通下得到作者的允许,作者希望创建一个仓库并且和官方保持同步更新,让更多的人看到。

3af441d335cc50b24ca8a6e85efbdb6d.png

中文仓库

github.com/Bigerfe/30-… ,目前完成了 CSS 精选集合的翻译。

0bb4afa35b37b436afe2957e738f601b.png

本文属于意译而非直译,为了方便理解也增加了一些自己的语言,如果存在偏差或错误还请留言指正。

精选的有用CSS片段集合,您可以在30秒或更短的时间内理解这些片段。

本 CSS 精选集合共分为5类 - 布局、视觉、动画、交互、其他。

布局

1. 盒模型重置

盒模型重置,使盒子的宽度和高度不受其边框(border)或填充(padding)的影响。

复制代码

HTML

border-box
content-box

复制代码

CSS

html {

box-sizing: border-box;

}

*,

*::before,

*::after {

box-sizing: inherit;

}

.box {

display: inline-block;

width: 150px;

height: 150px;

padding: 10px;

background: tomato;

color: white;

border: 10px solid red;

}

.content-box {

box-sizing: content-box;

}

复制代码

DEMO

5566dee8203eededf457c27c7130c3d1.png

说明

box-sizing:当元素设置为border-box时,即便设置了padding或border也不会改变元素的宽度和高度。

box-sizing:设置inherit使元素继承父级的box-sizing规则。

浏览器支持情况

2. 清除浮动更好的方式

无需借助辅助元素进行浮动的清除。

注意:这仅在使用float布局时才有用。实际场景中请考虑使用Flexbox布局或者网格布局。

HTML

float a
float b
float c

复制代码

CSS

.clearfix{

border:solid 1px red;

}

.clearfix::after {

content: '';

display: block;

clear: both;

}

.floated {

float: left;

margin-left:20px;

}

复制代码

DEMO

fbe504154841f287d40ce2d1ab5e8bbf.png

浏览器支持情况

100%

3. 不变宽高比

给定宽度可变的元素,它将确保其高度以响应方式保持成比例(即,其宽高比保持不变)。

DEMO

2cb2a586749d378a3ebd26cb40f83ca5.png

HTML

复制代码

CSS

.constant-width-to-height-ratio {

background: #333;

width: 50%;

}

.constant-width-to-height-ratio::before {

content: '';

padding-top: 100%;

float: left;

}

.constant-width-to-height-ratio::after {

content: '';

display: block;

clear: both;

}

复制代码

说明

width:50% 只设置父级元素的宽度

::before 为父级元素定义一个伪元素

padding-top: 100%; 设置伪元素的内上边距,这里的百分比的值是按照宽度计算的,所以会呈现为一个响应式的元素块。

此方法还允许将内容正常放置在元素内。

浏览器支持情况

100%

4.使用表格居中

使用display:table(作为flexbox的替代)使子元素在其父元素中水平垂直居。

HTML

Centered content

复制代码

CSS

.container {

border: 1px solid #333;

height: 250px;

width: 250px;

}

.center {

display: table;

height: 100%;

width: 100%;

}

.center > span {

display: table-cell;

text-align: center;

vertical-align: middle;

}

复制代码

DEMO

48e4513193eca27ad7b1caf68cf465fe.png

display:table 使.center元素的行为类似于

设置.center的宽高为100%,使其填满父元素;

display:table-cell, 设置'.center > span'的table-cell允许元素表现得像HTML元素;

text-align: center 使子元素水平居中;

vertical-align: middle 使子元素垂直居中;

外部父级必须有固定的宽高。

浏览器支持情况

100%

5. 使子元素均匀分布

HTML

Item1

Item2

Item3

复制代码.evenly-distributed-children {

display: flex;

justify-content: space-between;

}

复制代码

DEMO

0d8b32d5bd8efcda07557d823670a59e.png

说明

display: flex :启动flex 布局

justify-content: space-between:

均匀地水平分配子元素。 第一个子元素位于左边缘,而最后一个子元素位于右边缘。

或者,使用justify-content:space-around来分配子节点周围的空间,而不是它们之间。

浏览器支持情况

99.5%

需要前缀才能获得全面支持。

caniuse

6. 让图片在容器中显示的更舒适

设置图像在其容器内的适合度和位置,同时保留其宽高比。 以前只能使用背景图像和background-size属性来实现。

HTML

b12115446833b49f50f93b10a87add4c.png

b12115446833b49f50f93b10a87add4c.png

复制代码

CSS

.image {

background: #34495e;

border: 1px solid #34495e;

width: 200px;

height: 200px;

}

.image-contain {

object-fit: contain;

object-position: center;

}

.image-cover {

object-fit: cover;

object-position: right top;

}

复制代码

DEMO

9a2896efaca3bccdc33991fca33515cc.png

说明

object-fit: contain 容器内显示整个图像,并且保持宽高比

object-fit: cover 用图像填充容器,并保持宽高比

object-position: [x] [y] 对图像的显示部位进行调整

浏览器支持程度

7. 使用 flexbox 居中

使用 flexbox 水平垂直居中其子元素

HTML

Centered content.

复制代码

CSS

.flexbox-centering {

display: flex;

justify-content: center;

align-items: center;

height: 100px;

}

复制代码

DEMO

c5e0dd9b1c740e56f817dccde2e45b18.png

说明

display: flex 启用 flex 局部

justify-content: center 子元素水平居中

align-items: center 子元素垂直居中

浏览器支持程度

99.5% (需要使用前缀) caniuse

8.将元素垂直居中于另一个元素。

HTML

Vertically centered without changing the position property.

复制代码

CSS

.ghosting {

height: 300px;

background: #0ff;

}

.ghosting:before {

content: '';

display: inline-block;

height: 100%;

vertical-align: middle;

}

p {

display: inline-block;

vertical-align: middle;

}

复制代码

DEMO

44fa2551151c646b9e9857194f9ea277.png

说明

使用 :before伪元素的样式垂直对齐内联元素而不更改其position属性。

浏览器支持程度

9. 使用网格居中

使用网格水平垂直居中子元素.

HTML

Centered content.

复制代码

CSS

.grid-centering {

display: grid;

justify-content: center;

align-items: center;

height: 100px;

}

复制代码

DEMO

544db6cd6ff2087b9b998233de4733be.png

说明

display: grid 启用网格布局

justify-content: center 使子元素水平居中

align-items: center 使子元素垂直居中

浏览器支持程度

10. 使最后一项占满剩余高度

通过为最后一个元素提供当前视口中剩余的可用空间,即使在调整窗口大小时,也可以利用可用的视口空间。

HTML

Div 1
Div 2
Div 3

复制代码

CSS

html,

body {

height: 100%;

margin: 0;

}

.container {

height: 100%;

display: flex;

flex-direction: column;

}

.container > div:last-child {

background-color: tomato;

flex: 1;

}

复制代码

DEMO

b24d0b0649880a57a99e1f8a7ae21a5e.png

说明

height: 100% 将容器的高度设为视口的高度

display: flex 启用 flex

flex-direction: column 将项目的顺序设置成从上到下

flex-grow: 1 flexbox会将容器的剩余可用空间应用于最后一个子元素。

父级必须具有视口高度。 flex-grow:1可以应用于第一个或第二个元素,它将具有所有可用空间。

浏览器支持程度

99.5% 需要使用前缀 caniuse

11. 屏外隐藏元素

HTML

Learn More about pants

复制代码

CSS

.offscreen {

border: 0;

clip: rect(0 0 0 0);

height: 1px;

margin: -1px;

overflow: hidden;

padding: 0;

position: absolute;

width: 1px;

}

复制代码

DEMO

f52504873a9453e9c45206b68693f8ad.png

可在 CodePen 上查看真实效果和编辑代码

说明

删除所有边框

使用 clip 隐藏元素

设置宽高为1px

使用margin:-1px取消元素的高度和宽度

隐藏元素的溢出

移除所有的padding

绝对定位元素,使其不占用DOM中的空间

浏览器支持程度

100% 需要使用前缀 caniuse

(虽然cilp已被废弃,但较新的clip-path 目前对浏览器的支持非常有限。)

12. 使用transform居中子元素

使用 position: absolute and transform: translate() 进行居中,不需要知道父级和子元素的宽高,因此它非常适合响应式应用程序。

HTML

Centered content

复制代码

CSS

.parent {

border: 1px solid #333;

height: 250px;

position: relative;

width: 250px;

}

.child {

left: 50%;

position: absolute;

top: 50%;

transform: translate(-50%, -50%);

text-align: center;

}

复制代码

DEMO

0031bf6ba0574f703be41c63572c4369.png

浏览器支持程度

97.7% 需要使用前缀 caniuse

视觉

13.多行文本截断显示

如果文本长于一行,则将截断n行,并以渐变结束。

HTML

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut

labore et.

复制代码

CSS

.truncate-text-multiline {

overflow: hidden;

display: block;

height: 109.2px;

margin: 0 auto;

font-size: 26px;

line-height: 1.4;

width: 400px;

position: relative;

}

.truncate-text-multiline:after {

content: '';

position: absolute;

bottom: 0;

right: 0;

width: 150px;

height: 36.4px;

background: linear-gradient(to right, rgba(0, 0, 0, 0), #f5f6f9 50%);

}

复制代码

DEMO

b1bf07167a46165643f7c0b7420e25e1.png

说明

overflow: hidden 防止内容溢出

width: 400px 确保元素有尺寸

height: 109.2px 计算的高度值,它等于font-size * line-height * numberOfLines(在这种情况下为26 * 1.4 * 3 = 109.2)

height: 36.4px 渐变容器的计算值,它等于font-size * line-height(在这种情况下为26 * 1.4 = 36.4)

background: linear-gradient(to right, rgba(0, 0, 0, 0), #f5f6f9 50% 渐变从 透明到渐变从透明到#f5f6f9

浏览器支持程度

14. 画一个圆

使用纯CSS创建圆形。

HTML

复制代码

CSS

.circle {

border-radius: 50%;

width: 2rem;

height: 2rem;

background: #333;

}

复制代码

DEMO

d040bd4081a998f7137dbe9efa9d0af6.png

浏览器支持程度

15. 列表计数器

计数器本质上是由CSS维护的变量,其值可以通过CSS规则递增以跟踪它们被使用的次数。

HTML

  • List item
  • List item
  • List item

    • List item
    • List item
    • List item

复制代码

CSS

ul {

counter-reset: counter;

}

li::before {

counter-increment: counter;

content: counters(counter, '.') ' ';

}

复制代码

DEMO

26d819a870c1bec4d3fe956fd8de9609.png

说明

你现在可以使用任何类型的html 标签创建有序列表。

counter-reset 初始化计数器,该值是计数器的名称。默认情况下,计数器从0开始。此属性还可用于将其值更改为任何特定数字。

counter-increment 用于可数的元素。 一旦计数器重置初始化,计数器的值可以增加或减少。

counter(name, style)显示节计数器的值。通常用于内容属性。此函数可以接收两个参数,第一个作为计数器的名称,第二个参数表示占位内容,例如3.1的小数点。

CSS计数器对于制作轮廓列表特别有用,因为计数器的新实例是在子元素中自动创建的。使用counters()函数,可以在不同级别的嵌套计数器之间插入分隔文本。

浏览器支持程度

16.自定义滚动条

HTML

Lorem ipsum dolor sit amet consectetur adipisicing elit.

Iure id exercitationem nulla qui repellat laborum vitae,

molestias tempora velit natus. Quas, assumenda nisi.

Quisquam enim qui iure, consequatur velit sit?

复制代码

CSS

.custom-scrollbar {

height: 70px;

overflow-y: scroll;

}

/* To style the document scrollbar, remove `.custom-scrollbar` */

.custom-scrollbar::-webkit-scrollbar {

width: 8px;

}

.custom-scrollbar::-webkit-scrollbar-track {

box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);

border-radius: 10px;

}

.custom-scrollbar::-webkit-scrollbar-thumb {

border-radius: 10px;

box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);

}

复制代码

DEMO

20508f8d33e7ed5efe263a38bc525e8b.png

浏览器支持程度

17. 自定义文本选择的样式

HTML

Select some of this text.

复制代码

CSS

::selection {

background: aquamarine;

color: black;

}

.custom-text-selection::selection {

background: deeppink;

color: white;

}

复制代码

DEMO

a64fbe1fd93ab251cbd45dad303bc1b4.png

浏览器支持程度

18. 创建动态阴影

创建类似于box-shadow的阴影,但基于元素本身的颜色。

HTMl

复制代码

CSS

.dynamic-shadow {

position: relative;

width: 10rem;

height: 10rem;

background: linear-gradient(75deg, #6d78ff, #00ffb8);

z-index: 1;

}

.dynamic-shadow::after {

content: '';

width: 100%;

height: 100%;

position: absolute;

background: inherit;

top: 0.5rem;

filter: blur(0.4rem);

opacity: 0.7;

z-index: -1;

}

复制代码

DEMO

8778c2f3ae4964b13976cc7bfbed4680.png

可在 CodePen 上查看真实效果和编辑代码

说明

::after 定义一个伪元素

position: absolute 使伪元素脱离文档流并相对于父级定位

width: 100% and height: 100% 对伪元素进行大小调整以填充其父元素的大小,使其大小相等。

background: inherit 使伪元素继承父级的线性渐变

top: 0.5rem 将伪元素相对于其父元素略微偏移。

filter: blur(0.4rem) 设置伪元素模糊效果,以创建下方阴影效果。

opacity: 0.7 设置伪元素透明度

z-index: -1 将伪元素定位在父元素后面但在背景前面。

浏览器支持程度

94.2% 需要使用前缀 caniuse

19. 蚀刻文字效果

创建一种效果,其中文本看起来像“蚀刻”或雕刻在背景中。

HTML

I appear etched into the background.

复制代码

CSS

.etched-text {

text-shadow: 0 2px white;

font-size: 1.5rem;

font-weight: bold;

color: #b8bec5;

}

复制代码

DEMO

28a7431d8a882de8a1803c65f4eff817.png

可在 CodePen 上查看真实效果和编辑代码

说明

text-shadow: 0 2px white 从原点位置创建一个水平偏移0px和垂直偏移2px的白色阴影。

背景必须比阴影更暗,效果才更明显。

浏览器支持程度

99.5% 需要使用前缀 caniuse

20. Focus Within 伪类

如果表单中的任何子项被聚焦,则更改表单的外观。

HTML

Given Name:

Family Name:

复制代码

CSS

form {

border: 3px solid #2d98da;

color: #000000;

padding: 4px;

}

form:focus-within {

background: #f7b731;

color: #000000;

}

复制代码

DEMO

05c4914fb9b8ed1068d769d8bf2d12e4.png

bd21ee52ec7f8702734518153c1960ac.png

说明

伪类::focus-within 将对应的样式应用于父元素(任何子元素被聚焦)。 例如,表单元素内的输入元素。

浏览器支持程度

82.9% IE11或当前版本的Edge不支持。 caniuse

21. 指定元素的全屏

:fullsrcreen 全屏伪类表示浏览器处于全屏模式时显示的元素。

HTML

Click the button below to enter the element into fullscreen mode.

I change color in fullscreen mode!

Go Full Screen!

复制代码

CSS

.container {

margin: 40px auto;

max-width: 700px;

}

.element {

padding: 20px;

height: 300px;

width: 100%;

background-color: skyblue;

}

.element p {

text-align: center;

color: white;

font-size: 3em;

}

.element:-ms-fullscreen p {

visibility: visible;

}

.element:fullscreen {

background-color: #e4708a;

width: 100vw;

height: 100vh;

}

复制代码

DEMO

acb61a38977951d9f8b7d2d144c364dc.png

d5e43e4496e25034c0fc05d81aa83aeb.png

可在 CodePen 上查看真实效果和编辑代码

说明

:fullscreen 伪类选择器用于选择和设置以全屏模式显示的元素。

浏览器支持程度

85.6%

22.渐变文字

为文本提供渐变颜色。

HTML

Gradient text

复制代码

CSS

.gradient-text {

background: -webkit-linear-gradient(pink, red);

-webkit-text-fill-color: transparent;

-webkit-background-clip: text;

}

复制代码

DEMO

963549273a1197d2f9f91e3849d96255.png

浏览器支持程度

94.1%

23. 渐变跟踪

一种悬停效果,其中渐变跟随鼠标光标。

HTML

Hover me I'm awesome

复制代码

CSS

body {

display: flex;

justify-content: center;

align-items: center;

min-height: 100vh;

background: white;

}

.button {

position: relative;

appearance: none;

background: #f72359;

padding: 1em 2em;

border: none;

color: white;

font-size: 1.2em;

cursor: pointer;

outline: none;

overflow: hidden;

border-radius: 100px;

span {

position: relative;

pointer-events: none;

}

&::before {

--size: 0;

content: '';

position: absolute;

left: var(--x);

top: var(--y);

width: var(--size);

height: var(--size);

background: radial-gradient(circle closest-side, #4405f7, transparent);

transform: translate(-50%, -50%);

transition: width .2s ease, height .2s ease;

}

&:hover::before {

--size: 400px;

}

}

复制代码document.querySelector('.button').onmousemove = (e) => {

const x = e.pageX - e.target.offsetLeft

const y = e.pageY - e.target.offsetTop

e.target.style.setProperty('--x', `${ x }px`)

e.target.style.setProperty('--y', `${ y }px`)

}

复制代码

DEMO

3cfb8cda4571a53bf461090f457fddc6.png

e008f6fa9ffca173525f73518c7980f3.png

浏览器支持程度

91.6% 需要使用 js caniuse

24. :not 伪类选择器

:not 伪选择器对于设置一组元素的样式非常有用,同时保留最后一个(指定的)元素的样式。

HTML

  • One
  • Two
  • Three
  • Four

复制代码

CSS

.css-not-selector-shortcut {

display: flex;

}

ul {

padding-left: 0;

}

li {

list-style-type: none;

margin: 0;

padding: 0 0.75rem;

}

li:not(:last-child) {

border-right: 2px solid #d2d5e4;

}

复制代码

DEMO

a5dacd98bcb0ca8aace3f20f3c1eb7b8.png

说明

li:not(:last-child) 设置除last:child之外的所有li元素的样式,所以最后一个元素右侧没有 border.

浏览器支持程度

25.溢出滚动渐变

给溢出元素添加渐变,以更好地指示要滚动的内容。

HTLM

Lorem ipsum dolor sit amet consectetur adipisicing elit.

Iure id exercitationem nulla qui repellat laborum vitae,

molestias tempora velit natus. Quas, assumenda nisi.

Quisquam enim qui iure, consequatur velit sit?

Lorem ipsum dolor sit amet consectetur adipisicing elit.

Iure id exercitationem nulla qui repellat laborum vitae,

molestias tempora velit natus. Quas, assumenda nisi.

Quisquam enim qui iure, consequatur velit sit?

复制代码

CSS

.overflow-scroll-gradient {

position: relative;

}

.overflow-scroll-gradient::after {

content: '';

position: absolute;

bottom: 0;

width: 240px;

height: 25px;

background: linear-gradient(

rgba(255, 255, 255, 0.001),

white

); /* transparent keyword is broken in Safari */

pointer-events: none;

}

.overflow-scroll-gradient__scroller {

overflow-y: scroll;

background: white;

width: 240px;

height: 200px;

padding: 15px;

line-height: 1.2;

}

复制代码

DEMO

ff01ee25372881dc724a0e5b2d16844a.gif

说明

::after 定义一个伪元素用来展示渐变效果

background-image: linear-gradient(...) 添加一个从透明变为白色(从上到下)的线性渐变。

pointer-events: none 指定伪元素不能是鼠标事件的目标,后面的文本仍然是可选择/交互的。

浏览器支持程度

26.给文字添加漂亮的下划线

HTML

Pretty text underline without clipping descending letters.

复制代码

CSS

.pretty-text-underline {

display: inline;

text-shadow: 1px 1px #f5f6f9, -1px 1px #f5f6f9, -1px -1px #f5f6f9, 1px -1px #f5f6f9;

background-image: linear-gradient(90deg, currentColor 100%, transparent 100%);

background-position: bottom;

background-repeat: no-repeat;

background-size: 100% 1px;

}

.pretty-text-underline::-moz-selection {

background-color: rgba(0, 150, 255, 0.3);

text-shadow: none;

}

.pretty-text-underline::selection {

background-color: rgba(0, 150, 255, 0.3);

text-shadow: none;

}

复制代码

DEMO

e77cfd1a314fb1b96056c3959002beaf.png

CodePen上查看和编辑代码

浏览器支持程度

27. 重置所有样式

使用一个属性将所有样式重置为默认值。 这不会影响direction和unicode-bidi属性。

HTML

Title

Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure id exercitationem nulla qui

repellat laborum vitae, molestias tempora velit natus. Quas, assumenda nisi. Quisquam enim qui

iure, consequatur velit sit?

复制代码

CSS

.reset-all-styles {

all: initial;

}

复制代码

DEMO

a572a817b71c9592a3e47ecb81ea27cc.png

说明

all 属性允许您将所有样式(继承或不继承)重置为默认值。

浏览器支持程度

28. 形状分隔符

使用SVG形状分割两个不同的块以创建更有趣的视觉外观。

HTML

复制代码

CSS

.shape-separator {

position: relative;

height: 48px;

background: #333;

}

.shape-separator::after {

content: '';

background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12'%3E%3Cpath d='m12 0l12 12h-24z' fill='%23fff'/%3E%3C/svg%3E");

position: absolute;

width: 100%;

height: 12px;

bottom: 0;

}

复制代码

DEMO

216738595afa97381fe9b6e5fd538b4a.png

说明

background-image: url(...)添加SVG形状(24x12三角形)作为伪元素的背景图像,默认情况下重复。 它必须与要分割的块颜色相同。对于其他形状,我们可以使用SVG的URL编码器。

浏览器支持程度

29. 系统字体

HTML

This text uses the system font.

复制代码

CSS

.system-font-stack {

font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu,

Cantarell, 'Helvetica Neue', Helvetica, Arial, sans-serif;

}

复制代码

DEMO

7b00dfe09367a6ea37b092f57939d9d5.png

说明

浏览器会对字体进行逐个查找,如果找到的话就是用当前的,如果找不到字体(在系统上或在CSS中定义),则继续往后查找。

-apple-system在iOS和macOS上使用(但不是Chrome)

BlinkMacSystemFont 用于macOS Chrome

Segoe UI 用于Windows 10

Roboto 在Android上使用

Oxygen-Sans 在Linux KDE上使用

Ubuntu 用于Ubuntu

Cantarell 在GNOME Shell的Linux上使用

Helvetica Neue and Helvetica 用于macOS 10.10及更低版本

Arial 操作系统广泛支持的字体

sans-serif 如果不支持其他任何字体,则降级使用 sans-serif 通用字体

浏览器支持程度 100%

30. css 开关

只使用 css 来实现

HTMl

复制代码

CSS

.switch {

position: relative;

display: inline-block;

width: 40px;

height: 20px;

background-color: rgba(0, 0, 0, 0.25);

border-radius: 20px;

transition: all 0.3s;

}

.switch::after {

content: '';

position: absolute;

width: 18px;

height: 18px;

border-radius: 18px;

background-color: white;

top: 1px;

left: 1px;

transition: all 0.3s;

}

input[type='checkbox']:checked + .switch::after {

transform: translateX(20px);

}

input[type='checkbox']:checked + .switch {

background-color: #7983ff;

}

.offscreen {

position: absolute;

left: -9999px;

}

复制代码

DEMO

6e59960d85898441f21745557a87c79b.gif

浏览器支持程度 97.7% 需要使用前缀

31. 用 css 画一个三角形

HTML

复制代码

CSS

.triangle {

width: 0;

height: 0;

border-top: 20px solid #333;

border-left: 20px solid transparent;

border-right: 20px solid transparent;

}

复制代码

DEMO

27e2fa935771e3f6dedebfc73568a96d.png

CodePen上预览和编辑代码

浏览器支持程度 100%;

32. 斑马条纹列表

创建具有交替背景颜色的列表,这对于区分各行间的内容很有用。

HTML

  • Item 01
  • Item 02
  • Item 03
  • Item 04
  • Item 05

复制代码

CSS

li:nth-child(odd) {

background-color: #eee;

}

复制代码

DEMO

1e816b03fa9446b3d6897a4b0ea13d96.png

浏览器支持程度 99.9% caniuse

动画

33.弹跳 loading 动画

HTML

复制代码

CSS

@keyframes bouncing-loader {

to {

opacity: 0.1;

transform: translate3d(0, -1rem, 0);

}

}

.bouncing-loader {

display: flex;

justify-content: center;

}

.bouncing-loader > div {

width: 1rem;

height: 1rem;

margin: 3rem 0.2rem;

background: #8385aa;

border-radius: 50%;

animation: bouncing-loader 0.6s infinite alternate;

}

.bouncing-loader > div:nth-child(2) {

animation-delay: 0.2s;

}

.bouncing-loader > div:nth-child(3) {

animation-delay: 0.4s;

}

复制代码

DEMO

31191d67cc52f19131698a5314dc3514.gif

浏览器支持程度97.4% caniuse

34. 按钮边框动画

创建一个鼠标悬停的边框动画

HTML

Submit

复制代码

CSS

.button {

background-color: #c47135;

border: none;

color: #ffffff;

outline: none;

padding: 12px 40px 10px;

position: relative;

}

.button:before,

.button:after {

border: 0 solid transparent;

transition: all 0.25s;

content: '';

height: 24px;

position: absolute;

width: 24px;

}

.button:before {

border-top: 2px solid #c47135;

left: 0px;

top: -5px;

}

.button:after {

border-bottom: 2px solid #c47135;

bottom: -5px;

right: 0px;

}

.button:hover {

background-color: #c47135;

}

.button:hover:before,

.button:hover:after {

height: 100%;

width: 100%;

}

复制代码

DEMO

f710d044284d123cc1f254e15acec534.gif

说明

使用:before和:after伪元素作为在悬停时设置动画的边框。

浏览器支持程度 100%.

35.甜甜圈旋转器

创建一个甜甜圈旋转器,可用于等待内容的加载。

DEMO

8b85af71e9e05a1dfaf714e64ca36b7f.gif

HTML

复制代码

CSS

@keyframes donut-spin {

0% {

transform: rotate(0deg);

}

100% {

transform: rotate(360deg);

}

}

.donut {

display: inline-block;

border: 4px solid rgba(0, 0, 0, 0.1);

border-left-color: #7983ff;

border-radius: 50%;

width: 30px;

height: 30px;

animation: donut-spin 1.2s linear infinite;

}

复制代码

说明

对于整个元素使用半透明边框,然后设置一侧的边框颜色 border-left-color: #7983ff;,最后使用动画旋转整个元素。

浏览器支持程度** 97.4%** 需要使用前缀。

36.缓动效果

DEMO

ff7791685749c62aa1737794beea4d09.gif

HTML

Hover

复制代码

CSS

:root {

/* Place variables in here to use globally */

}

.easing-variables {

--ease-in-quad: cubic-bezier(0.55, 0.085, 0.68, 0.53);

--ease-in-cubic: cubic-bezier(0.55, 0.055, 0.675, 0.19);

--ease-in-quart: cubic-bezier(0.895, 0.03, 0.685, 0.22);

--ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06);

--ease-in-expo: cubic-bezier(0.95, 0.05, 0.795, 0.035);

--ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.335);

--ease-out-quad: cubic-bezier(0.25, 0.46, 0.45, 0.94);

--ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);

--ease-out-quart: cubic-bezier(0.165, 0.84, 0.44, 1);

--ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1);

--ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);

--ease-out-circ: cubic-bezier(0.075, 0.82, 0.165, 1);

--ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);

--ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1);

--ease-in-out-quart: cubic-bezier(0.77, 0, 0.175, 1);

--ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1);

--ease-in-out-expo: cubic-bezier(1, 0, 0, 1);

--ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.15, 0.86);

display: inline-block;

width: 75px;

height: 75px;

padding: 10px;

color: white;

line-height: 50px;

text-align: center;

background: #333;

transition: transform 1s var(--ease-out-quart);

}

.easing-variables:hover {

transform: rotate(45deg);

}

复制代码

37.高度过度

当元素的高度未知时,将元素的高度从0转换为自动。

DEMO

6b718ed49dc7ae9faa1531495bb43000.gif

HTML

Hover me to see a height transition.

content

复制代码

CSS

.el {

transition: max-height 0.5s;

overflow: hidden;

max-height: 0;

}

.trigger:hover > .el {

max-height: var(--max-height);

}

复制代码

JAVASCRIPT

var el = document.querySelector('.el')

var height = el.scrollHeight

el.style.setProperty('--max-height', height + 'px')

复制代码

说明

浏览器支持程度 91.6% caniuse css-variables

注意:将会导致所有动画帧重排,过度中如果元素下方有大量元素,则可能会出现滞后现象。

38.悬停阴影动画

在文本上悬停时,在文本周围创建一个阴影框动画效果。

45a177938ef92e9c84b68ddb8e8539b9.gif

HTML

Box it!

复制代码

CSS

.hover-shadow-box-animation {

display: inline-block;

vertical-align: middle;

transform: perspective(1px) translateZ(0);

box-shadow: 0 0 1px transparent;

margin: 10px;

transition-duration: 0.3s;

transition-property: box-shadow, transform;

}

.hover-shadow-box-animation:hover,

.hover-shadow-box-animation:focus,

.hover-shadow-box-animation:active {

box-shadow: 1px 10px 10px -10px rgba(0, 0, 24, 0.5);

transform: scale(1.2);

}

复制代码

浏览器支持程度97.3%

39.悬停下滑线动画

当文本悬停时,创建文本下划线动画效果。

DEMO

d4db2961e410669fa895114f6f94b7c0.gif

HTML

Hover this text to see the effect!

复制代码

CSS

.hover-underline-animation {

display: inline-block;

position: relative;

color: #0087ca;

}

.hover-underline-animation::after {

content: '';

position: absolute;

width: 100%;

transform: scaleX(0);

height: 2px;

bottom: 0;

left: 0;

background-color: #0087ca;

transform-origin: bottom right;

transition: transform 0.25s ease-out;

}

.hover-underline-animation:hover::after {

transform: scaleX(1);

transform-origin: bottom left;

}

复制代码

说明

display: inline-block 使p成为内联块,以防止下划线跨越整行宽度而不仅仅是文本内容。

position: relative 设置父元素为相对定位

::after 定义一个伪元素

position: absolute 将伪元素脱离文档六,并将其相对于父元素定位

width: 100% 确保伪元素和父元素的宽度一致。

transform: scaleX(0) 最初将伪元素缩放为0,因此他是看不见的。

bottom: 0 and left: 0 将伪元素放在父元素的左下角。

transition: transform 0.25s ease-out 设置动画效果为ease-out,并且在0.25秒内完成。

transform-origin: bottom right 变换中心点到父元素的右下角。

:hover::after 然后使用scaleX(1)将宽度转换为100%,然后将中心点更改为左下角,允许它在悬停时从另一个方向转换出来。

浏览器支持程度97.5%

交互

40. 禁用选择

使用 css 让内容无法选取。

DEMO

5d7a4b0aabb766325f7071e2389db9cf.png

HTML

You can select me.

You can't select me!

复制代码

CSS

.unselectable {

user-select: none;

}

复制代码

说明

user-select: none 指定无法选择文本

浏览器支持程度93.2% (需要使用前缀,这并不是防止用户复制内容的安全方法。)

41. 弹出菜单

在悬停和焦点上弹出交互式菜单。

ba6d7915a408ecfc3ce30877557018e7.gif

HTML

Popout menu

复制代码

CSS

.reference {

position: relative;

background: tomato;

width: 100px;

height: 100px;

}

.popout-menu {

position: absolute;

visibility: hidden;

left: 100%;

background: #333;

color: white;

padding: 15px;

}

.reference:hover > .popout-menu,

.reference:focus > .popout-menu,

.reference:focus-within > .popout-menu {

visibility: visible;

}

复制代码

说明

left: 100% 弹出菜单从左侧偏移其父级宽度的100%。

visibility: hidden

.reference:hover > .popout-menu 鼠标悬停时,.popout-menu 显示

.reference:focus > .popout-menu 聚焦时,.popout-menu 显示

.reference:focus-within > .popout-menu 确保在焦点位于参考范围内时显示弹出窗口。

浏览器支持程度 100%;

42.兄弟元素淡化

悬停时兄弟节点淡化显示.

DEMO

bd0db54b4eded8d30faba6e818b9026c.png

0c46492b1af5dae64feec8fd3a465ca5.png

HTML

Item 1 Item 2 Item 3 Item 4

Item 5 Item 6

复制代码

CSS

span {

padding: 0 1rem;

transition: opacity 0.2s;

}

.sibling-fade:hover span:not(:hover) {

opacity: 0.5;

}

复制代码

说明

transition: opacity 0.2s 设置0.2秒的淡化动画。

.sibling-fade:hover span:not(:hover)当父级悬停时,选择当前未悬停的span子项并将其透明度更改为0.5。

浏览器支持程度 97.5%;

其他

43. 计算函数 Calc()

函数calc()允许使用数学表达式定义CSS值,属性采用的值是数学表达式的结果。

DEMO

b78adbafae939002fbfd8386fdd1523d.png

如果你想在右侧和底部对齐背景图像,则只能使用直线长度值。 所以现在可以使用calc()函数.

HTML

复制代码

CSS

.box-example {

height: 280px;

background: #222 url('https://image.ibb.co/fUL9nS/wolf.png') no-repeat;

background-position: calc(100% - 20px) calc(100% - 20px);

}

复制代码

说明

允许加法,减法,乘法和除法。

可以为表达式中的每个值使用不同的单位(例如,像素和百分比)。

允许嵌套calc()函数。

它可用于任何允许,,,,,或的属性,如width,height,font-size,top等。

浏览器支持程度 97.0%

44. css 自定义变量

包含要重用的特定值的CSS变量。

HTML

CSS is awesome!

复制代码

CSS

:root {

/* Place variables within here to use the variables globally. */

}

.custom-variables {

--some-color: #da7800;

--some-keyword: italic;

--some-size: 1.25em;

--some-complex-value: 1px 1px 2px whitesmoke, 0 0 1em slategray, 0 0 0.2em slategray;

color: var(--some-color);

font-size: var(--some-size);

font-style: var(--some-keyword);

text-shadow: var(--some-complex-value);

}

复制代码

DEMO

998baa9abf05018693666fbfca2f31bc.png

说明

--variable-name: 用这样的格式来声明变量。

var(--variable-name) 使用此函数在整个文档中重用变量。

浏览器支持程度 91.6%

更多精彩好玩有用的前端内容,请关注公众号《前端技术江湖》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值