CSS发展史&&CSS知识总览
1.基本样式
层叠规则
- 用户代理(User Agent,通常指浏览器):为HTML元素提供了一组默认的样式。
- 用户样式表(User Stylesheets):用户样式表是由用户自定义的样式表,可以用于覆盖用户代理样式和作者样式表中的某些样式。
- 作者样式表(Author Stylesheets):作者样式表是由网页开发者创建的样式表,用于定义网页的布局、外观和交互。
【内联样式、嵌入式样式、外部样式表】
内联式:tyle="" 嵌入式:
属性选择器:根据元素的属性和属性值选择元素。例如,
[data-attribute]选择具有data-attribute属性的所有元素,[data-attribute="value"]选择具有data-attribute属性且其值为value的所有元素。
css权重:
合理使用:
继承:
值和单位:
绝对长度中:
in(英寸)、pt(磅,1/72 英寸)、pc(点,1/6 英寸):这些单位主要用于打印媒体,它们基于物理尺寸。相对长度中:
vw(视窗宽度)、vh(视窗高度):相对于视口(浏览器可见区域)的宽度和高度。1vw 等于视口宽度的 1%,1vh 等于视口高度的 1%。
-
角度单位
deg(度):角度单位,一圈有 360 度。rad(弧度):角度单位,一圈有 2π 弧度。grad(梯度):角度单位,一圈有 400 梯度。turn:角度单位,一圈等于 1 turn。
-
分辨率单位
dpi(每英寸点数):表示每英寸内有多少个点(像素)。dpcm(每厘米点数):表示每厘米内有多少个点(像素)。dppx(每像素点数):表示每像素内有多少个点(像素),1dppx 等于 96dpi。
-
颜色
-
预定义颜色:使用 CSS 中预定义的颜色名称。例如:
color: red; -
十六进制颜色:使用 3 或 6 个十六进制数字表示颜色。例如:
color: #ff0000;或color: #f00; -
RGB 颜色:使用三个介于 0 和 255 之间的整数表示颜色。例如:
color: rgb(255, 0, 0); -
RGBA 颜色:与 RGB 类似,但还包括一个表示透明度的值(0 到 1 之间的小数)。例如:
color: rgba(255, 0, 0, 0.5); -
HSL 颜色:使用色相(0 到 360 之间的整数)、饱和度(百分比)和亮度(百分比)表示颜色。例如:
color: hsl(0, 100%, 50%); -
HSLA 颜色:与 HSL 类似,但还包括一个表示透明度的值(0 到 1 之间的小数)。例如:
color: hsla(0, 100%, 50%, 0.5);
-
-
函数生成:
- URL:使用
url()函数表示一个资源的 URL。例如:background-image: url("image.jpg"); - calc():使用
calc()函数进行数学计算。例如:width: calc(100% - 20px); - linear-gradient():使用
linear-gradient()函数创建线性渐变。例如:background-image: linear-gradient(to right, red, blue); - radial-gradient():使用
radial-gradient()函数创建径向渐变。例如:background-image: radial-gradient(circle, red, blue); - transform 函数:例如:
rotate()、scale()、translate()和skew()等,用于在不同轴上
- URL:使用
盒模型:
aspect-ratio实现固定比例矩形:
<div class="rectangle"></div>
<style>
.rectangle {
/* 设置矩形的宽度 */
width: 200px;
/* 使用 aspect-ratio 属性设置矩形的宽高比为 4:3 */
aspect-ratio: 4 / 3;
/* 设置矩形的背景颜色和边框 */
background-color: lightblue;
border: 2px solid black;
}
</style>
实现渐变边框:
-
background-clip: text; 是CSS中的一个属性,用于指定
背景图片或颜色的裁剪方式,裁剪的区域是文本的轮廓。将背景图片或颜色限制在文本的轮廓内,而不是整个元素的范围内。这个属性通常用于创建一些特殊的文本效果,比如文字渐变、文字填充等。 -
background-origin属性指定了
背景图片相对于元素框的定位区域。它可以有三个值:border-box、padding-box和content-box。background-origin 属性用于设置背景图像的定位区域(即背景图像的起始位置)。该属性可以使用以下三个值之一来进行设置:padding-box: 背景图像的起始位置从内边距边界开始,即背景图像的左上角与元素的内边距左上角重合。border-box: 背景图像的起始位置从边框边界开始,即背景图像的左上角与元素的边框左上角重合。content-box: 背景图像的起始位置从内容区域开始,即背景图像的左上角与元素的内容区域左上角重合。
负外边距:
2.布局
外边距塌陷现象:
三种情况:
- 两兄弟元素
之间:上下外边距合并成外边距设置较大的那个 - 父子元素:以外边距较大的作为外边距【父:margin-top: 20px;子:margin-top: 30px;只显示为30的外边距】
- 子虽然在父里面,但是子和父是同一个bfc
- 空块级元素:【没有宽高,margin-top: 20px; margin-bottom: 30px;只剩30px的外边距显示】
解决外边距塌陷:
-
内边距代替外边距
-
父级使用border
-
父级开启一个新的bfc
-
display属性值为block、inline-block、table、table-cell、table-caption等; -
position属性值为absolute或fixed; -
float属性值不为none; -
overflow属性值不为visible。
-
-
伪元素
- .parent::before { content: ''; display: table; }
-
将元素转换为 Flex 或 Grid 容器
内联式格式化上下文
- 元素以水平方向进行布局,不会独占一行。
- 常见的内联级元素有
<span>、<em>、<strong>、<a>等。- 宽度只受内容本身的宽度影响,而无法通过设置
width和height属性进行调整
弹性盒子:
应用示例:
网格布局:
应用示例:
定位:
static、relative、absolute【脱标】、fixed【脱标】、sticky
-
fixed: 元素相对于浏览器窗口进行定位,不随页面滚动而移动。可以使用 top、right、bottom和 left 属性来调整元素的位置。 -
sticky: 当元素在视口内时,它的行为类似于relative定位,而当元素在视口外时,它的行为类似于fixed定位。可以使用 top、right、bottom 和 left 属性来调整元素的位置。
3.层叠上下文
层叠上下文是对TML元素的三维构想,将元素沿着垂直屏幕的虚构的Z轴排开
z-index示例:
4.变形、过渡、动画
transform:
transform属性允许我们对元素进行 2D 或 3D 变换
- transform
rotateX(angle):绕 X 轴旋转指定的角度。scale3d(sx, sy, sz):分别沿 X、Y 和 Z 轴缩放元素。translate3d(tx, ty, tz):分别沿 X、Y 和 Z 轴移动元素。perspective(p):设置透视距离。较小的值会增强 3D 效果。
ransform-origin:默认值为 "50% 50% 0",即元素的中心点。perspective:定义观察者距离元素的距离,较小的值会增强 3D 效果。此通常应用于父元素上。perspective-origin:定义透视投影点的位置。默认值为 "50% 50%",即元素的中心点。
transition:
动画
5.响应式设计
原则
媒体查询
像素
移动端的viewport
问题:
解决办法:
<meta name="viewport" content="width=device-width, initial-scale=1">
-
width=device-width:将 viewport 的宽度设置为设备的物理屏幕宽度。这意味着网页的宽度将根据设备的屏幕宽度进行调整,使内容在不同尺寸的设备上自适应。 -
initial-scale=1:设置页面的初始缩放比例为 1,也就是不缩放。这可以确保在加载时,页面内容会以 100% 的大小显示。 -
minimum-scale:定义页面的最小缩放比例。 -
maximum-scale:定义页面的最大缩放比例。 -
user-scalable:指定用户是否可以手动缩放页面(设置为yes或no)
相对长度的使用
em大小:非嵌套时相对于元素本身,嵌套时相对于父级元素大小
rem大小:表示相对于根元素(即 HTML 元素)的字体大小,在创建响应式设计和组件时尤为有用。
vw:1vw 等于视口宽度的 1%。这意味着,如果浏览器窗口的宽度为 1200px,那么 1vw 就等于 12px。
6.CSS生态相关
预处理器
scss、less、stylus预处理器
预处理器的使用:
三种预处理器的对比: