当前位置: 首页 > news >正文

CSS基础(总结)

 一、CSS简介

1.CSS概念

CSS(层叠样式表)是网页设计的核心语言之一,负责控制网页的外观和布局。

2.CSS引入方式

(1)内部样式表

在 <head> 中使用 <style> 标签,推荐在练习中使用

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>/* css样式 */</style>
</head><body></body></html>

(2)外部样式表

通过 <link> 引入独立的 .css 文件,最推荐的写法

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="style.css">
</head><body></body></html>

(3)内联样式表

直接将 CSS 样式写在 HTML 元素的 style 属性中的方法,内联样式仅用于特殊情况或快速测试,是一种较不推荐的写法

<p style="color: blue; font-size: 18px; font-weight: bold;">这是一段使用内联样式的文本。
</p>

Tips:内联样式表的优先级一般高于外部样式表和内部样式表,但是在外部样式表和内部样式表使用了 !important (这篇文章后面会介绍)时优先级会高于内联样式表。但通常不推荐大量使用内联样式表,因为它不利于代码的维护和复用。

3.CSS优点

(1)提高工作效率:一套CSS可以控制多个页面的样式

(2)便于维护:修改样式无需改动HTML结构

(3)增强表现力:实现丰富的视觉效果

(4)加快页面加载:减少代码冗余

二、CSS选择器

(一)选择器

选择器是一个选择谁(标签)的过程

1.基本结构

选择器{

        属性:值

}

2.基本属性

类别属性描述
文字font-family设置字体
font-size设置字体大小
font-weight设置字体粗细
color设置文字颜色
text-align设置文本对齐方式
text-decoration设置文本装饰(如下划线)
背景background-color设置背景颜色
background-image设置背景图片
background-repeat设置背景图片是否重复
盒模型width设置元素宽度
height设置元素高度
margin设置外边距(元素外部的间距)
padding设置内边距(元素内部的间距)
border设置边框(宽度、样式、颜色)
border-radius设置边框圆角
布局display设置元素的显示方式
position设置元素的定位方式
float设置元素浮动
其他opacity设置元素透明度(0-1)
cursor设置鼠标悬停时的光标样式
box-shadow设置元素阴影
z-index设置元素的堆叠顺序(用于定位元素 

CSS基本属性以及详解将在本篇文章后部分以及之后的 CSS 基础文章中不断讲解补充

(二)基本选择器

1.标签选择器

直接使用HTML标签作为选择器,页面中所有该标签都会应用此样式。

h1 {color: red;
}
<h1>这是标题</h1>

2.类选择器

.text {color: red;font-size: 20px
}
<p class="text">段落标签</p>

使用点号(.)前缀定义类选择器

谁调用类选择器,谁生效类选择器中的效果

多个标签可以调用一个类选择器

一个标签可以使用多个类选择器,使用时要在中间使用空格进行分开

一个标签中不能同时使用两个class=“ ”

<!-- 正确写法 -->
<p class="text1 text2">段落标签</p><!-- 错误写法 -->
<p class="text1" class="text2">段落标签</p>

3.ID选择器

#texts {color: blue;font-size: 50px;
}
<p id="texts">段落标签</p>

使用井号(#)前缀定义ID选择器

ID选择器具有唯一性,通常配合JavaScript使用

一个标签不能有多个ID

4.选择器命名规范

(1)可以使用下滑线 横线开始 但是不能使用特殊符号

(2)可以使用汉字来进行命名 但是不推荐使用

(3)不可以使用数字开头 数字可以在命名中间使用

(4)不推荐使用css定义过的关键字进行命名

(三)复合选择器

1.交集选择器

同时满足 p 标签和 .text 类的元素才会生效

<p class="text">这是标签1</p>       <!-- 生效 -->
<div class="text">这是标签2</div>   <!-- 不生效 -->
p.text {font-size: 50px;
}

2.后代选择器

p 标签内所有 .text 类的子元素都会生效(包括嵌套后代)

<div><span class="text">123</span><div class="text">456</div>
</div>
div .text {font-size: 50px;
}

后代选择器和交集选择器是不一样的哦!后代选择器的标签后面有一个空格,而交集选择器的标签后面没有空格,书写的时候要注意书写规范。

3.子代选择器

仅对div直接子元素i标签生效

<div><i>1</i>        <!-- 生效 --><p><i>2</i>    <!-- 不生效 --></p>
</div>
div>i {color: rgb(25, 0, 255);
}

4.并集选择器

同时为多个选择器设置相同样式,在实际应用中经常使用,可以减少代码的复杂度

<div class="text">111</div>
<span>222</span>
<ul><li>333</li>
</ul>
.text, li, span {color: red;
}

5.属性选择器

/* 只要p中包含class就会执行 */
p[class] {color: red;
}
/* 只要li标签 class命名中包含aa这个字母就会生效 */
li[class*=aa] {color: red;
}
/* 只要li标签 class命名以aa开头就会生效 */
li[class^=aa] {color: red;
}
/* 只要li标签 class命名以aa开头就会生效 */
li[class$=cc] {color: pink;
}
/* 使用<input type="text">这个标签的就会生效 */
input[type=text] {color: red;
}

6.伪类选择器

a:link{属性:值;} a{属性:值}效果是一样的。
a:link{属性:值;} 链接默认状态
a:visited{属性:值;} 链接访问之后的状态
a:hover{属性:值;} 鼠标放到链接上显示的状态
a:active{属性:值;} 链接激活的状态
a:focus{属性:值; } 获取焦点

a:hover 是鼠标放到链接上的状态样式,任意标签可以使用,非常重要

三、基础属性

1.width

定义元素的宽度

常用单位:
px(像素,如 width: 300px;)
%(相对于父元素的百分比,如 width: 50%;)
vw(视窗宽度的百分比,如 width: 100vw;)
auto(浏览器自动计算,默认值)

2.height

定义元素的高度

若父元素未明确高度,子元素的百分比高度可能无效

常用单位:
px(像素,如 height: 300px;)
%(相对于父元素的百分比,如 height: 50%;)
vh(视窗高度的百分比,如 height: 100vw;)
auto(浏览器自动计算,默认值)

3.background-color

设置元素的背景颜色

CSS 提供了多种表示颜色的方式,每种方法都有其特点和适用场景
以下是 CSS 中常用的颜色表示方法:

1. 颜色关键字
CSS 预定义了140+种颜色名称(不区分大小写):
常用基础颜色:black, white, red, green, blue, yellow, purple, gray 等

2. 十六进制表示法
格式:#RRGGBB
红色: #ff0000;

3. RGB/RGBA 表示法
红色 : rgb(255, 0, 0);
半透明绿色: rgba(0, 255, 0, 0.5);
rgb(红, 绿, 蓝):每个参数 0-255
rgba(红, 绿, 蓝, 透明度):透明度 0(完全透明)-1(完全不透明)

4.综合示例

创建一个宽 300px、高 150px、蓝色背景的矩形区域

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.box {width: 300px;height: 150px;background-color: blue;}</style>
</head>
<body><div class="box"></div>
</body>
</html>

四、文本属性

1.font-family

设置字体,详细内容可见 CSS font-family 各名称一览表,如"Arial"

2.font-size

设置字体大小,常用的单位为 px (像素),浏览器默认字体为16px

首行缩进时,使用的单位是 em ,1em 等于一个字符的大小。

3.font-weight

设置字体粗细,bold最常用,使用后可直接进行加粗

normal 是默认值,浏览器对普通文本的默认值就是 normal

100-900中整百的数也可以设置字体粗细

4.color

设置字体颜色

CSS 提供了多种表示颜色的方式,每种方法都有其特点和适用场景
以下是 CSS 中常用的颜色表示方法:

1. 颜色关键字
CSS 预定义了140+种颜色名称(不区分大小写):
常用基础颜色:black, white, red, green, blue, yellow, purple, gray 等

2. 十六进制表示法
格式:#RRGGBB
红色: #ff0000;

3. RGB/RGBA 表示法
红色 : rgb(255, 0, 0);
半透明绿色: rgba(0, 255, 0, 0.5);
rgb(红, 绿, 蓝):每个参数 0-255
rgba(红, 绿, 蓝, 透明度):透明度 0(完全透明)-1(完全不透明)

5.text-align

文字位置,属性值: left right center

6.text-decoration

文本修饰,下划线 underline ,删除线 line-through ,没有 none

7.font-style

字体倾斜,倾斜 italic ,默认值 normal

8.line-height

字体的行高,可以设置文本元素在多少像素内进行垂直居中

如果想要将文本进行居中,那居中的高度就是他的值

9.text-indent

首行缩进,一般首行缩进使用的单位是em,1em等于一个字符的大小

text-indent: 2em;

10.综合示例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.font {width: 500px;height: 500px;background-color: pink;/* 字体 */font-family: 'Courier New', Courier, monospace;/* 字号 em px */font-size: 50px;/* 字体加粗 bold 100-900 normal*/font-weight: bold;/* 字体颜色 */color: red;/* 文字位置 left right center */text-align: center;/* 文本修饰 下划线underline  删除线line-through  没有none*/text-decoration: underline;/* 字体倾斜 倾斜italic 默认值normal */font-style: normal;/* 行高 */line-height: 500px;}</style>
</head>
<body><div class="font">这是文本</div>
</body>
</html>

五、背景属性

1. background-color

设置元素的背景颜色

CSS 提供了多种表示颜色的方式,每种方法都有其特点和适用场景
以下是 CSS 中常用的颜色表示方法:

1. 颜色关键字
CSS 预定义了140+种颜色名称(不区分大小写):
常用基础颜色:black, white, red, green, blue, yellow, purple, gray 等

2. 十六进制表示法
格式:#RRGGBB
红色: #ff0000;

3. RGB/RGBA 表示法
红色 : rgb(255, 0, 0);
半透明绿色: rgba(0, 255, 0, 0.5);
rgb(红, 绿, 蓝):每个参数 0-255
rgba(红, 绿, 蓝, 透明度):透明度 0(完全透明)-1(完全不透明)

div {background-color: #f0f0f0; /* 灰色背景 */
}

2. background-image

设置背景图片(可以是本地图片或网络链接图片)

div {background-image: url("bg.jpg");
}

3. background-repeat

控制背景图片是否重复平铺。

repeat(默认,水平和垂直重复)

no-repeat(不重复)

repeat-x(仅水平重复)

repeat-y(仅垂直重复)

div {background-image: url("bg.png");background-repeat: no-repeat;
}

一般情况下,为了方便 background-image 和 background-repeat 采用连写

div {background: url("bg.png") no-repeat;
}

4. background-position

调整背景图片的位置,使用 left、right、center、top、bottom 或具体数值

 一般情况下,背景定位属性有两个值。第一个值是水平方向,第二个值是垂直方向,如果只设置一个值,默认是水平方向,第二个值默认为居中

div {background-position: center top; /* 居中靠上 */
}

六、CSS三大类标签元素及其转换

1.块级元素

代表元素标签:div p h li

特点:独占一行,可以设置宽高

2.行内元素

代表元素标签:span i s u b a

特点:不独占一行 不可以设置宽高

3.行内块级元素

代表元素标签:img input

特点:不独占一行 可以设置宽高

4.转换元素属性

隐藏元素        display: none;
将任意元素转换为块级元素        display: block;
将任意元素转换为行内块元素        display: inline-block;
将任意元素转换为行内元素        display: inline;

七、CSS 三大核心特性

CSS的核心特性包括层叠性、继承性、优先级,它们决定了浏览器如何解析和应用 CSS 规则。

1. 层叠性

(1)定义:当多个 CSS 规则作用于同一个元素时,浏览器会根据来源、优先级、顺序决定最

终生效的样式。

(2)层叠规则(优先级从高到低)

!important(强制优先级最高,在属性值后面直接加)
行内样式(style="")
ID 选择器(#id)
类/伪类/属性选择器(.class, :hover, [type="text"])
标签/伪元素选择器(div, ::before)
通配符/继承样式(*, 继承的样式)

2. 继承性

(1)定义:某些 CSS 属性会从父元素自动传递给子元素,但并非所有属性都继承。

(2)可继承的常见属性

文本相关:font-family, color, line-height, text-align

列表相关:list-style, list-style-type

(3)不可继承的常见属性

盒模型:width, height, margin, padding, border

定位:position, top, left, z-index

背景:background, background-color

(4)特殊:a不会继承父级标签的文字颜色

                    h系列不会继承父级标签的文字大小

3. 优先级

定义:当多个选择器作用于同一个元素时,浏览器通过权重计算决定哪个样式生效。

权重计算规则(从高到低)

选择器类型权重值
!important∞(无限大)
行内样式(style=""1000
ID 选择器(#id100
类/伪类/属性选择器(.class:hover10
标签/伪元素选择器(div::before1
通配符/继承样式(*0

 八、盒模型

1.定义

在CSS中,每个元素都被表示为一个矩形盒子,这个盒子由内容区域(content)内边距(padding)边框(border)外边距(margin)组成。

2.组成

(1)内容(content):这是盒子中的文本和图像等实际内容,可以通过设置 width 和 height 属性来控制其大小。

(2)内边距(padding):围绕内容的空间,可以通过 padding 属性来设置。内边距的背景色会延伸到该区域。

(3)边框(border):紧随内边距之外的线框,可以通过 border 属性来定义其样式和厚度。

(4)外边距(margin):盒子外部的空间,用于与其他元素之间的间隔,可以通过 margin 属性来设置。

3.分类

(1)标准盒模型(W3C盒模型):在这个模型中,元素的 width 和 height 只包括内容的尺寸,而padding 和 border 被加到这个尺寸之外。

(2)怪异盒模型(IE盒模型):在这个模型中,元素的 width 和 height 包括内容、 padding 和border 的尺寸。

CSS3 引入了 box-sizing 属性,允许开发者在标准盒模型和怪异盒模型之间切换。使用 box-sizing: content-box 会应用标准盒模型,而 box-sizing: border-box 会应用怪异盒模型。

(一)边框(border)

1.边框的相关定义

边框可由三个属性进行定义

.element {border-style: solid;      /* 边框样式:实线 */border-width: 2px;        /* 边框宽度 */border-color: #333;       /* 边框颜色 */
}

为方便书写,边框也可使用简写形式

.element {border: 2px solid #333; /* 宽度 样式 颜色 */
}

注意:在简写形式中,样式是必须的,颜色和宽度可以省略(将使用默认值)。

如果边框不设置大小,默认是1px;

如果边框不设置颜色,默认是黑色;

2.常见的边框样式

实线:solid  

虚线:dashed

点线:dotted

3.单边框的书写

在边框中,可以单独设置某一方向的边框

.element {border-top: 1px solid red;border-right: 2px dashed blue;border-bottom: 1px dotted green;border-left: 2px dotted black;
}

4.示例

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.element {width: 200px;height: 200px;border-top: 10px solid red;border-right: 20px dashed blue;border-bottom: 10px dotted green;border-left: 20px dotted black;}</style>
</head><body><div class="element"></div>
</body></html>

(二)内边距(padding)

1.内边距的相关定义

内边距(padding)包括四个值,分别是上内边距,下内边距,左内边距,右内边距。

2.单边内边距的书写

.element {padding-top: 10px;padding-right: 15px;padding-bottom: 10px;padding-left: 15px;
}

3.多边内边距的书写

为使用方便,内边距可在一行进行书写,值分别与四条边进行对应

/* 四个值:上 右 下 左 */
.element {padding: 20px 30px 40px 50px;
}/* 两个值:上和下 左和右 */
.element {padding: 20px 40px;
}/* 三个值:上 左和右 下 */
.element {padding: 20px 30px 40px;
}/* 一个值:所有方向相同 */
.element {padding: 20px;
}

(三)外边距(margin)

外边距的设置方式与内边距类似

1.外边距的相关定义

外边距(margin)包括四个值,分别是上外边距,下外边距,左外边距,右外边距。

2.单边外边距的书写

.element {margin-top: 10px;margin-right: 15px;margin-bottom: 10px;margin-left: 15px;
}

3.多边外边距的书写

为使用方便,外边距可在一行进行书写,值分别与四条边进行对应

/* 四个值:上 右 下 左 */
.element {margin: 20px 30px 40px 50px;
}/* 两个值:上和下 左和右 */
.element {margin: 20px 40px;
}/* 三个值:上 左和右 下 */
.element {margin: 20px 30px 40px;
}/* 一个值:所有方向相同 */
.element {margin: 20px;
}

(四)内容(content)

1.默认文字大小

浏览器中文字的默认大小为16px,但可以通过CSS修改

body {font-size: 16px; /* 默认值,通常不需要显式设置 */
}

2.行高

行高是控制文本行之间的垂直间距

行高 = 文字高度 + 上下边距

除了px,行高都是与文字大小的乘积

p {line-height: 1.5; /* 无单位值,是字体大小的1.5倍 */
}p {line-height: 24px; /* 固定值 */
}

(五)盒模型的大小计算

1.标准盒模型(W3C盒模型)

总宽度 = width(包含内容) + 左右padding + 左右border + 左右margin

总高度 = height(包含内容)+ 上下padding + 上下border + 上下margin

2.怪异盒模型(IE盒模型)

总宽度 = width(包含内容、内边距 padding 和边框 border )+ 左右margin

总高度 = height(包含内容、内边距 padding 和边框 border )+ 上下margin

九、盒模型示例

综合以上的知识点进行实际应用,给出如下示例

进行页面初始化,设置页面中所有盒模型的内外边距全为0:

* {margin: 0;padding: 0;box-sizing: border-box;
}

设置页面中的css样式:

.container {width: 300px;margin: 20px auto;padding: 20px;border: 2px dashed #ccc;
}.box {background-color: #f5f5f5;padding: 15px;border: 1px solid #333;margin-bottom: 15px;
}h2 {font-size: 20px;margin-bottom: 10px;
}p {line-height: 1.6;
}

最终HTML页面代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>盒模型示例</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}.container {width: 300px;margin: 20px auto;padding: 20px;border: 2px dashed #ccc;}.box {background-color: #f5f5f5;padding: 15px;border: 1px solid #333;margin-bottom: 15px;}h2 {font-size: 20px;margin-bottom: 10px;}p {line-height: 1.6;}</style>
</head>
<body><div class="container"><div class="box"><h2>标题一</h2><p>这是一个使用盒模型的示例段落。注意内边距、边框和外边距的效果。</p></div><div class="box"><h2>标题二</h2><p>另一个使用相同样式的盒子,展示了CSS的一致性和可重用性。</p></div></div>
</body>
</html>

页面效果图如下:

 十、页面布局技术

页面布局技术经历了从传统方法到现代强大模型的演进。以下是目前所有主流的页面布局技术,我将它们分为三类:传统布局现代布局响应式布局技术。

(一)传统布局技术

传统布局技术基于文档流、浮动流和定位流,这些是CSS2.1时代的主要布局手段,现在多用于特定场景或维护老项目。

1.文档流 

(1)描述:浏览器默认的、未经任何控制的布局方式。

(2)如何实现:块级元素垂直排列,内联元素水平排列。

(3)适用场景:简单文本页面、文章内容区域等基础结构。

2.浮动流

(1)描述:最初用于文字环绕图片,后被广泛用于实现多栏布局。

(2)如何实现:使用 float: left/right; 让元素并排。

(3)缺点:布局脆弱,需要大量计算和清除浮动,代码维护困难。

(4)现状:不推荐用于主要布局,但其“文字环绕”的本职工作依然无可替代。

3.定位流

(1)描述:通过 position 属性精确控制元素位置。

(2)如何实现:

——relative: 相对自身原位置偏移,原空间保留。

——absolute: 相对于最近的非 static 定位祖先元素定位,脱离文档流。

——fixed: 相对于浏览器视口定位,脱离文档流(常用于固定导航栏、弹窗)。

——sticky: 在滚动时在 relative 和 fixed 之间切换(常用于粘性表头)。

(3)适用场景:叠加元素(如弹窗、下拉菜单)、固定元素、微调元素位置。不适合多栏主体结构布局。

(二)现代布局技术

现代布局技术(CSS3)是目前构建页面布局的首选和标准,功能强大、灵活且易于维护。

1.Flex 布局

(1)描述:专门为一维布局(行或列)设计,提供了一种更有效的方式来分配容器内项目之间的空间和对齐项目。

(2)核心思想:通过父容器来控制子项目的排列、顺序、对齐、大小和分布。

(3)适用场景:导航栏,垂直居中,不均匀分布的内容区域,移动端页面结构等

2.Grid 布局

(1)描述:这是最强大的布局系统,专为二维布局(同时处理行和列)设计。将页面划分为网格,可以任意将项目放入这些网格单元格中。

(2)核心思想:先定义网格结构(几行几列),再往网格里放东西。

(3)适用场景:整个页面的总体规划,复杂的杂志式、图片墙布局,任何需要同时精确控制行和列的布局等

3.Flex 和 Grid 如何选择

(1)用 Flex:当你需要针对一个维度(一行或一列)进行布局时。例如:导航栏、一组按钮、垂直居中的卡片。

(2)用 Grid:当你需要针对两个维度(整个页面的行和列)进行布局时。例如:整个页面的框架、照片墙、仪表盘。

(三) 响应式布局技术

响应式布局技术不是独立的布局模型,而是与Flex、Grid等技术结合,使页面能适应不同屏幕尺寸的理念和方法。

/* 基础样式(移动端优先) */
.container {width: 100%;
}/* 平板设备(≥768px) */
@media (min-width: 768px) {.container {display: flex;width: 90%;margin: 0 auto;}
}/* 桌面设备(≥1200px) */
@media (min-width: 1200px) {.container {width: 1200px;}
}

本文主要介绍页面的传统布局技术(浮动布局和定位布局),其他内容将在CSS3模块详细讲解!

十一、页面布局——浮动

1.定义

浮动最初的设计目的是为了实现文字环绕图片的排版效果(类似于杂志中的版式)。它通过 float 属性来实现,会使元素脱离正常的文档流,并尽可能地向左或向右移动,直到它的外边缘碰到包含框另一个浮动框的边缘为止。

2.属性值

属性值描述
left元素向左浮动。
right元素向右浮动。
none默认值。元素不浮动,处于标准文档流中。

那么利用浮动进行一个简单的布局:

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>浮动示例</title><style>.fl {width: 200px;height: 200px;background-color: red;float: left;}.fr {width: 200px;height: 200px;background-color: blue;float: right;}</style>
</head><body><div class="fl"></div><div class="fr"></div>
</body></html>

效果如下:

3.浮动的特性与影响

(1)脱离文档流

——浮动元素会从正常的文档布局中移除,不再占据原来的空间。

——它后面的非浮动块级元素会当它不存在一样,向上移动占据其原本的位置。

——但是,它后面的内联元素(通常是文字) 会感知到它的存在,并环绕在浮动元素的周围。这正是“文字环绕”效果的实现原理。

示例1:

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>浮动示例</title><style>.fl {width: 200px;height: 200px;background-color: red;float: left;}.fr {width: 200px;height: 200px;background-color: blue;float: right;}.normal {width: 100%;height: 300px;background-color: rgb(200, 0, 255);}</style>
</head><body><div class="fl"></div><div class="fr"></div><div class="normal"></div>
</body></html>

示例1效果如下:

如上图所示,浮动元素(红色方块和蓝色方块)会从正常的文档布局中被移除,脱离文档流,从而不再占据原来的空间。那么它后面的非浮动块级元素(紫色方块)就会当它不存在一样,向上移动占据其原本的位置。

示例2:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>文字环绕示例</title><style>.container {width: 80%;max-width: 800px;margin: 50px auto;padding: 20px;border: 1px solid #e0e0e0;}.fl {/* 核心:设置浮动方向 */float: left;/* 图片 */width: 200px;height: 200px;background-color: red;/* 与文字的间距 */margin-right: 20px;margin-bottom: 15px;}</style>
</head>
<body><div class="container"><h2>文字环绕示例</h2><div class="fl"></div><p>这是一个文字环绕图片的示例。当图片设置了 float: left 之后,文字会自动环绕在图片的右侧和下方。这种布局在文章、新闻和博客中非常常见,能够让图文排版更加紧凑和美观。</p><p>浮动元素会脱离正常的文档流,但不会脱离文本流,所以文字会自动避开浮动元素的区域,形成环绕效果。通过设置 margin 可以调整图片与文字之间的距离,让布局更加舒适。</p><p>这段文字会继续环绕在图片周围,直到图片下方的空间足够容纳完整的行,之后文字会恢复正常的排列方式。这种布局方式能够有效利用空间,同时增强内容的可读性。</p></div>
</body>
</html>

示例2效果如下:

(2)收缩与包裹

一个块级元素一旦被浮动,它的宽度会从默认的 100% 变为 auto,即由内容宽度来决定(除非手动设置一个宽度);高度默认为0。

(3)破坏性

由于浮动元素脱离了文档流,其父容器的高度无法被撑开,如果父容器内没有其他非浮动内容,就会出现“高度塌陷”的问题,布局会变得混乱。

4. 清除浮动(重点)

清除浮动是为了解决父元素高度塌陷的问题,是使用浮动时必须掌握的核心技巧。

清除浮动不是不使用浮动,而是移除浮动带来的不利影响

清除浮动的核心属性:clear

clear 属性规定元素的哪一侧不允许出现其他浮动元素。

浏览器会为设置了 clear 属性的元素添加足够的上外边距(top margin),使其垂直下降到所有指定侧的浮动元素下方。

属性值描述
clear: left;元素的左侧不允许有浮动元素。
clear: right;元素的右侧不允许有浮动元素。
clear: both;元素的左右两侧都不允许有浮动元素。
clear: none;默认值。允许浮动元素出现在两侧。

清除浮动一共有三个方法

(1)方法一及其示例

方法一:使用 clear 属性
在浮动元素的父容器末尾添加一个空的块级元素(如 <div>),并为其设置 clear 属性。

(只有块级元素能清除浮动)

缺点:在HTML中添加了毫无语义的冗余标签,难以维护,不推荐使用

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><style>.container {border: 3px solid #3498db;}.box {float: left;width: 100px;height: 100px;background-color: red;}/* 清除浮动 */.clear-box {clear: both;}</style>
</head><body><div class="container"><div class="box"></div><div class="box"></div><div class="clear-box"></div> <!-- 空清理元素 --></div><p>后续的正常内容</p>
</body></html>

如果不清除浮动,则会发生下图所示的结果,所以清除浮动是非常重要的。

(2)方法二及其示例

方法二:对父元素使用 overflow 属性
为浮动元素的父容器设置 overflow: auto;overflow: hidden;

这会触发 BFC (块级格式化上下文),而 BFC 可以包含浮动元素。

优点:代码简洁。

缺点:可能会隐藏内容或触发滚动条。

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><style>.container {border: 3px solid #3498db;overflow: hidden;}.box {float: left;width: 100px;height: 100px;background-color: red;}</style>
</head><body><div class="container"><div class="box"></div><div class="box"></div></div><p>后续的正常内容</p>
</body></html>

(3)方法三及其示例

方法三:使用伪元素 ::after
这是最推荐使用的方法。通过 CSS 为父容器添加一个看不见的块级伪元素,并让它清除浮动。

-创建伪元素:使用 ::after 在父容器内容的最后面创建一个伪元素。
-将其设为块级元素display: block; 才能正确应用 clear 属性。
-清除浮动clear: both; 确保这个伪元素落在所有浮动元素的下方
-隐藏伪元素content: ""; 内容为空(height: 0; 和 visibility: hidden; 确保它不可见。)

优点:保证HTML结构干净,没有多余的标签;定义一个 .clear 类,可以在整个项目中使用,可复用性高;最重要的是浏览器兼容性好。

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><style>.container {border: 3px solid #3498db;overflow: hidden;}.box {float: left;width: 100px;height: 100px;background-color: red;}.clear ::after{display: block;clear: both;content: "";/* 以下为可选,确保兼容性和隐藏 */height: 0;visibility: hidden;}</style>
</head><body><div class="container clear"><div class="box"></div><div class="box"></div></div><p>后续的正常内容</p>
</body></html>

随着 Flex 布局和 Grid 布局的普及,浮动已经不再是页面布局的首选工具。Flex 布局和 Grid 布局的容器天生不会出现高度塌陷问题。它们有自己的排列规则,根本不需要 clear 属性。

浮动的本职工作是实现文字环绕图片的效果。这依然是浮动最合适、最简单的应用场景。在这种场景下,你通常不需要清除浮动,因为文本的环绕正是你想要的效果。

当然许多老项目的代码仍然使用浮动进行布局,因此理解清除浮动对于维护和修改这些项目至关重要。

5.overflow

属性值作用说明
overflow:visible默认值,内容直接溢出容器,不裁剪、不出现滚动条(表格常用默认值,易导致布局错乱)
overflow:hidden裁剪溢出内容,不显示滚动条,溢出部分完全隐藏(需确保隐藏内容非关键信息)
overflow:scroll无论内容是否溢出,均显示水平 / 垂直滚动条(避免滚动条 “忽显忽隐” 导致布局跳动)
overflow:auto仅当内容溢出时显示对应方向的滚动条(按需显示,更简洁,推荐优先使用)
overflow-x:单独控制水平方向溢出(表格宽度过载时核心属性)
overflow-y:单独控制垂直方向溢出(表格行过多时核心属性)

十二、页面布局——定位流

定位布局提供了最精确的元素位置控制能力,优先级最高。

文档流 < 浮动流 < 定位流

设置定位必须指定位置属性

定位方向:left | right | top | bottom

(一)静态定位

静态定位就是文档流,属于默认值。

position: static;

(二)绝对定位

绝对定位是最常用的定位方式之一

1.绝对定位的核心特性

(1)脱离文档流:元素使用绝对定位后不再占据原来的位置

(2)默认定位基准:元素位置默认从浏览器的视口出发

(3)父级定位影响:

如果父元素没有设置定位,子元素绝对定位以浏览器为基准

如果父元素设置了定位(通常是relative),子元素绝对定位以父元素为基准

(4)元素类型转换:行内元素使用绝对定位后会转换为行内块元素

2.绝对定位的注意点

(1)绝对定位通常与相对定位配合使用
实践中常用"子绝父相"模式:子元素绝对定位,父元素相对定位

(2)使用绝对定位后,若父元素没有使用相对定位,则会逐级向上一级寻找,直到找到 body (浏览器视口)

.box {position: absolute;right: 100px;bottom: 200px;
}

3.脱离文档流、默认定位基准

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><style>.box1{width: 200px;height: 200px;background-color: red;}.box2{width: 200px;height: 200px;background-color: blue;}.box3{width: 200px;height: 200px;background-color: pink;}</style>
</head><body><div class="box1"></div><div class="box2"></div><div class="box3"></div>
</body></html>

刚开始我不进行任何定位,div作为块级元素,独占一行。根据如上代码生成如上图所示的效果。

修改 box2 的 CSS 属性后,效果如下图所示:

.box2{width: 200px;height: 200px;background-color: blue;position: absolute;top: 50px;left: 100px;
}

修改属性后,box2 从浏览器视口左上角出发进行偏移,并且不占据原来的位置了,影响了其他元素的布局( box3 占据了原来 box2 的位置)。

(三)相对定位

1.相对定位的核心特性

(1)位置基准:从元素自身原始位置出发进行偏移(脱标)
(2)保留原空间:仍然占据原来的位置,不影响其他元素布局
(3)元素类型:行内元素使用相对定位不会转换为行内块元素
(4)常见用途:通常作为绝对定位子元素的容器(子绝父相)

.box {position: relative;left: 100px;top: 50px;
}

2.位置基准、保留原空间

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><style>.box1{width: 200px;height: 200px;background-color: red;}.box2{width: 200px;height: 200px;background-color: blue;}.box3{width: 200px;height: 200px;background-color: pink;}</style>
</head><body><div class="box1"></div><div class="box2"></div><div class="box3"></div>
</body></html>

刚开始我不进行任何定位,div作为块级元素,独占一行。根据如上代码生成如上图所示的效果。

修改 box2 的 CSS 属性后,效果如下图所示:

.box2{width: 200px;height: 200px;background-color: blue;position: relative;top: 50px;left: 100px;
}

修改属性后,box2从自身原始位置出发进行偏移,并且原来的位置仍然被占据,不影响其他元素的布局,其他的元素并不会因为box2的移动而改变自身的位置。

3.子绝父相

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><style>.box1{width: 300px;height: 300px;background-color: red;position: relative;}.box2{width: 200px;height: 200px;background-color: blue;position: absolute;top: 50px;left: 100px;}</style>
</head><body><div class="box1"></div><div class="box2"></div>
</body></html>

子元素 box2 相对于父元素 box1 的位置改变而改变。

(四)固定定位

固定定位是让元素相对于浏览器窗口固定位置

1.固定定位的核心特性

(1)视口基准:相对于浏览器视口进行定位
(2)滚动不变:即使页面滚动,元素位置保持不变
(3)常见应用:悬浮按钮、固定导航栏、回到顶部按钮等

(4)元素类型转换:行内元素使用固定定位后会转换为行内块元素

.box {position: fixed;right: 0;bottom: 0;
}

(五)粘性定位

粘性定位是相对定位和固定定位的结合

1.粘性定位的核心特性

(1)混合特性:默认表现为相对定位,到达阈值后变为固定定位

(2)必须设置阈值:必须搭配 top / left / right / bottom 中的至少一个属性使用

(3)作用范围:在父元素范围内有效,滚动出父元素后恢复原状

.nav {position: sticky;top: 0;
}

2.粘性定位的注意点

(1)父容器的高度或宽度必须大于粘滞元素的高度或宽度,否则没有滚动空间,粘滞效果无法触发。
(2)粘滞元素只能在其父容器内固定。当父容器完全滚出视口时,元素会跟随父容器离开。

(六)定位实现的经典布局

这种布局方式实现了经典的"头部+侧边栏+主内容区"布局,适合后台管理系统等场景。

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><style>.box1 {position: absolute;left: 0;right: 0;height: 100px;background-color: red;}.box2 {position: absolute;top: 100px;left: 0;width: 200px;bottom: 0;background-color: blue;}.box3 {position: absolute;left: 200px;top: 100px;bottom: 0;right: 0;background-color: pink;}</style>
</head><body><div class="box1"></div><div class="box2"></div><div class="box3"></div>
</body></html>

(七)定位流总结

1.定位方式选择

需要元素相对于父元素定位:使用绝对定位+相对定位(子绝父相)

需要元素相对于视口固定:使用固定定位

需要滚动时固定某元素:使用粘性定位

2.性能考虑

过多使用绝对定位会影响页面性能

固定定位和粘性定位在滚动时可能引发重绘问题

3.响应式适配

使用百分比而非固定值提高布局灵活性

结合媒体查询适应不同屏幕尺寸

4.z-index使用

定位元素可使用z-index控制堆叠顺序(注意z-index只在定位元素上生效)

(1)在 CSS 中,z-index 是一个用于控制元素在 z 轴(垂直于屏幕的轴线)上堆叠顺序的属性。它决定了元素在视觉上哪个会显示在更上层,哪个会被其他元素覆盖。

(2)z-index 数值越大越靠上,值较高的元素会显示在值较低的元素上方。

(3)支持负值:负值会使元素显示在普通元素下方(可能被父元素背景覆盖)

合理使用 z-index 可以避免元素意外遮挡,保持界面的视觉层次清晰。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>CSS z-index 示例</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}.container {max-width: 1000px;margin: 0 auto;background-color: rgba(255, 255, 255, 0.9);border-radius: 15px;padding: 25px;box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);}h2 {color: #3498db;margin: 25px 0 15px;padding-bottom: 10px;border-bottom: 2px solid #eaeaea;}p {margin-bottom: 20px;font-size: 1.1rem;}.example {border: 2px dashed #bdc3c7;padding: 20px;margin: 25px 0;border-radius: 10px;position: relative;height: 300px;background: #f9f9f9;overflow: hidden;}.box {width: 150px;height: 150px;display: flex;justify-content: center;align-items: center;color: white;font-weight: bold;font-size: 1.2rem;position: absolute;border-radius: 8px;box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);transition: all 0.3s ease;}/* 基本z-index示例 */.z-index-1 {background: linear-gradient(135deg, #e74c3c, #c0392b);top: 50px;left: 50px;z-index: 1;}.z-index-2 {background: linear-gradient(135deg, #2ecc71, #27ae60);top: 80px;left: 80px;z-index: 2;}.z-index-3 {background: linear-gradient(135deg, #3498db, #2980b9);top: 110px;left: 110px;z-index: 3;}</style>
</head>
<body><div class="container"><h2>基本 z-index 示例</h2><p>z-index值越高,元素在堆叠顺序中的位置越高。</p>        <div class="example"><div class="box z-index-1">z-index: 1</div><div class="box z-index-2">z-index: 2</div><div class="box z-index-3">z-index: 3</div></div>
</body>
</html>

十三、页面初始化

不同浏览器对 HTML 元素有不同的默认样式,这可能导致相同代码在不同浏览器中显示效果不一致。为解决这个问题,开发者通常会使用 CSS 初始化代码来统一浏览器默认样式。

以下是主流浏览器初始化方案的总结和实现:

/* 1. 基础重置 */
* {margin: 0;padding: 0;box-sizing: border-box; /* 统一盒模型为border-box */
}/* 2. 列表元素 */
ul, ol {list-style: none; /* 移除默认列表样式 */
}/* 3. 文本元素 */
h1, h2, h3, h4, h5, h6 {font-size: inherit;font-weight: inherit; /* 继承父元素字体样式 */
}/* 4. 链接元素 */
a {color: inherit;text-decoration: none; /* 移除默认链接样式 */background-color: transparent; /* 解决IE链接背景问题 */
}/* 5. 表格元素 */
table {border-collapse: collapse; /* 合并表格边框 */border-spacing: 0;
}/* 6. 表单元素 */
input, button, select, textarea {font-family: inherit; /* 继承字体样式 */font-size: inherit;line-height: inherit;color: inherit;background: transparent;border: none;outline: none; /* 移除默认焦点样式 */
}textarea {resize: vertical; /* 仅允许垂直 resize */overflow: auto; /* 确保滚动条一致性 */
}button,
input[type="button"],
input[type="reset"],
input[type="submit"] {cursor: pointer; /* 鼠标悬停显示手型 */
}/* 7. 图片和媒体元素 */
img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {display: block; /* 移除 inline 元素默认间距 */max-width: 100%; /* 确保媒体元素不超出容器 */height: auto; /* 保持宽高比 */
}/* 8. 引用元素 */
blockquote, q {quotes: none;
}blockquote:before, blockquote:after,
q:before, q:after {content: '';content: none;
}/* 9. 其他元素 */
hr {box-sizing: content-box;height: 0;overflow: visible; /* 解决Firefox下的问题 */
}pre {font-family: monospace, monospace; /* 确保等宽字体一致性 */font-size: inherit;
}/* 10. 辅助性样式 */
[hidden] {display: none !important; /* 确保hidden属性生效 */
}/* 11. 基础字体设置 */
html {font-size: 16px; /* 设置基础字体大小 */line-height: 1.5; /* 设置基础行高 */
}body {font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;/* 使用系统默认字体栈,提升跨平台一致性 */
}

http://www.dtcms.com/a/391937.html

相关文章:

  • 【信创云架构 PACS系统】全网首发-基于JDK17+Vue3全新开发的信创国产化系统
  • 若依vue项目里面,使用到oss,这个 是什么
  • Linux中的Ubuntu系统安装配置 MATLAB 开发环境、离线安装非root安装vscode
  • 网站单页应用(SPA)和多页应用(MPA)的区别
  • 10cm钢板矫平机:一副“钢铁脊椎”的矫正日记
  • Nano Banana (Gemini 2.5 Flash Image) 完整体验教程:一键生成你的专属 3D AI 手办
  • Qt水平布局:深入解析与优化技巧
  • 【vLLM 学习】Multilora Inference
  • 【硬件-笔试面试题-102】硬件/电子工程师,笔试面试题(知识点:RC滤波器的参数怎么计算)
  • 整体设计 语言拼凑/逻辑拆解/词典缝合 之 2 逻辑拆解(“你”) 决定逻辑描述列项的非真“自由”:自由选择/自由创新/自由意志(豆包助手)
  • 前端性能优化实用方案(四):DOM批处理减少80%重排重绘
  • 速通ACM省铜第九天 赋源码(Divine Tree)
  • win10程序(七)暴力xls转xlsx程序
  • PINN物理信息神经网络驱动的Burgers偏微分方程求解MATLAB代码
  • Linux系统多线程的同步问题
  • Anaconda下载及使用详细教程
  • 第二部分:VTK核心类详解(第43章 vtkCharArray字符数组类)
  • 2025年9月19日NSSCTF之[陇剑杯 2021]日志分析(问1)
  • TDesign学习:(五)设置三级菜单的坑
  • 两步构建企业级AI知识库:技术实战与权限管理指南
  • 乐华显示工业一体机 10 大维护要点
  • 【MySQL ✨】MySQL 入门之旅 · 第七篇:MySQL 更新与删除数据(UPDATE / DELETE 语句)
  • 关于C++的入门基础
  • TDengine 标准差 STDDEV 函数使用场景及意义
  • color-printf一个轻量级、高兼容的终端彩色打印工具
  • Python实现等离子体反应优化 (Plasma Generation Optimization, PGO)(附完整代码)
  • 【C++】vector
  • LeeCode120. 三角形最小路径和
  • 元启发式算法分类
  • Ansible-file模块