楼主: renee0000
1079 0

[其他] CSS基础知识(持续更新中...) [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0.0104
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-8-1
最后登录
2018-8-1

楼主
renee0000 发表于 2025-12-12 11:53:30 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

CSS盒模型与背景属性详解

在CSS布局中,盒模型是构建页面结构的基础。每一个HTML元素都可以被视为一个矩形盒子,由内容区(content)、内边距(padding)、边框(border)和外边距(margin)组成。

box-sizing:

盒模型核心属性说明

  • width:默认情况下仅指内容区域的宽度。
  • 通过使用 box-sizing: border-box; 可使 width 包含 padding 和 border,即整个盒子的实际宽度。
border-box

当设置 box-sizing: border-box; 后,width 表示的是 content + padding + border 的总宽度,便于精确控制布局尺寸。

width/height

各部分作用与应用场景

width / height
设定内容区域大小(不包含 padding 和 border)
配合 box-sizing 可实现对整体盒子宽度的精准控制
padding
padding
定义内容与边框之间的间距
常用于按钮内部留白、卡片内容排版等场景
border
border
设置边框样式与厚度
适用于分割线设计、视觉边框效果等
margin
margin
控制元素外部间距
注意:垂直方向上会发生 margin 塌陷现象
可用于实现水平居中布局
margin: auto

属性简写方式

CSS支持多种属性的简写语法,提升代码简洁性:

padding: 20px 10px 60px 80px; /* 顺序为:上 右 下 左 */
padding: 20px 10px; /* 上下为20px,左右为10px */

该规则同样适用于 margin 等四边属性。

margin 塌陷问题解析

当两个块级元素在垂直方向相邻时,它们之间的实际间距并非两者 margin 之和,而是取其中较大的那个值,这种现象称为“margin 塌陷”。

因此,在设置垂直间距时,通常只需为上方元素设置 margin-bottom 即可。

而水平方向上的 margin 则正常相加,无塌陷现象。

实现水平居中的方法

利用 margin: 0 auto; 可使块级子元素在其父容器中水平居中。

前提条件:必须显式设置子元素的 width,否则该方式无效。

margin=0 auto

尽管现代布局中 flex 更为流行,但此方法仍是一种简单高效的居中方案。

选择器类型详解

基础选择器

  • 标签选择器:如 p { },选中所有 p 标签
  • 类选择器:如 .class { },选中具有指定 class 的元素
  • ID选择器:如 #id { },选中特定 ID 的元素

高级选择器

后代选择器
语法示例:.class li { }
作用:选中类名为 class 的元素内部所有的 li 元素(包括嵌套多层)
子选择器
语法示例:div > p { }
作用:仅选中 div 的直接子元素 p,不包含更深层的后代
交集选择器
语法示例:div.box { }
作用:选中同时满足 tag 为 div 且 class 为 box 的元素
并集选择器
语法示例:.box, p, #we { }
作用:为多个不同选择器统一设置相同样式,提升复用性

现代布局体系:Flexbox 实践

当前主流布局策略强调组合使用 Grid(二维布局)、Flexbox(一维对齐)、Gap(间距管理)以及流体单位(如 fr、%、vw),形成灵活响应式结构。

Flex 布局解决居中问题

主轴对齐:justify-content

控制项目在主轴方向上的排列方式(默认为水平方向):

flex-start 左对齐(默认) 适用于表单标签+输入框的标准布局
flex-end 右对齐 常用于页面底部操作按钮组
center 完全居中 适合导航栏logo或加载动画居中展示
space-between 两端对齐,中间等距分布 【最常用】适用于导航菜单、卡片列表、页头页脚
space-around 均匀分布,首尾间距为项目间距的一半 适合图标按钮组,避免紧贴边缘
space-evenly 所有间距完全相等 应用于相册布局、仪表盘指标卡片
flex-start
flex-end
center
space-between
space-around
space-evenly

特例说明:当主轴为垂直方向时,水平居中需依赖交叉轴属性处理。

flex-direction=colum
align-items:

交叉轴对齐:align-items

负责控制项目在交叉轴方向的对齐方式(默认为垂直方向):

stretch 拉伸填满容器(默认) 适用于卡片布局、侧边栏菜单
flex-start 顶部对齐 常见于图文混排卡片、标签云
flex-end 底部对齐 用于价格对比表、页脚操作区
center 垂直居中 【最常用】适用于导航菜单、图标+文字组合、模态框
baseline 基线对齐(基于文字底部) 适用于带图标的按钮、表单提示信息
stretch
flex-start
flex-end
center
baseline

类似地,若交叉轴变为水平方向,则对应调整为水平对齐行为,原理一致。

换行控制:flex-wrap

决定容器内项目是否换行及换行方向:

  • nowrap:不换行(默认),项目被压缩以适应容器 —— 适用于导航栏、工具栏
  • wrap:自动换行,从上至下排列 —— 常见于响应式卡片、标签云、图片画廊
  • wrap-reverse:换行且从下至上堆叠 —— 多用于特殊视觉效果,较少使用
nowrap
wrap
wrap-reverse

项目空间分配:flex 属性

用于控制项目如何占用主轴空间:

  • 设置具体数值(如 flex: 1;)可让项目按比例填充剩余空间
  • flex: none; 表示固定大小,不受容器影响
  • 允许项目超出容器范围(取决于 overflow 设置)
flex:none
flex:1

典型应用:构建自适应布局,如侧边栏与主内容区的比例分配。

主轴方向设定:flex-direction

定义项目的排列方向,即主轴方向:

  • row:从左到右(默认)
  • row-reverse:从右到左
  • column:从上到下
  • column-reverse:从下到上

定位机制

position 定位

通过 position 属性实现元素精确定位,常见值包括 static、relative、absolute、fixed、sticky。

float 定位

传统浮动布局方式,主要用于文本环绕图像或创建多列布局,现多被 Flex 和 Grid 替代。

伪类与伪元素

伪类(Pseudo-classes)

用于描述元素的特殊状态:

  • 事件伪类:如 :hover、:focus、:active,响应用户交互
  • 结构伪类:如 :first-child、:nth-child(),基于位置选择元素
  • 状态伪类:如 :disabled、:checked,反映表单控件状态
  • 链接伪类:如 :link、:visited,控制超链接样式

合理使用伪类可增强用户体验,并减少额外的JavaScript逻辑。

伪元素(Pseudo-elements)

用于创建不在DOM中的虚拟元素,常用于装饰性内容插入:

  • 常见伪元素:::before::after::first-line::first-letter
  • 必须配合 content 属性使用,即使为空也要声明
  • 生成的内容位于文档流之外,不影响原有结构

例如,可通过 ::before 和 ::after 实现边框线条、气泡提示等视觉效果。

content 属性

专用于伪元素中,定义插入的内容,可以是字符串、计数器、引用属性等。

列表相关伪类

针对列表项的特殊选择需求,可通过如下方式:

  • li:first-of-type:选中首个同类列表项
  • li:last-child:最后一个子元素为 li 的情况
  • li:nth-child(odd):奇数位置的列表项

可用于实现隔行变色、首尾特殊样式等效果。

CSS常见易错点总结

  • 忘记重置 box-sizing 导致宽度计算错误
  • margin 塌陷未考虑,造成垂直间距异常
  • flex 布局中未设置 flex-wrap 导致溢出不可见
  • 伪元素缺少 content 属性导致不显示
  • 选择器优先级混淆,样式被意外覆盖

补充知识

掌握 CSS 盒模型与布局机制是前端开发的核心技能之一。结合现代布局方式(如 Flex 与 Grid),能够高效实现复杂且响应式的界面设计。

理解伪类与伪元素的区别与应用场景,有助于提升样式的表达能力与维护性。

典型布局场景

水平排列(从左到右,默认方向)常用于导航栏、按钮组以及水平列表等界面元素的排布。

row

在需要支持RTL(从右到左)语言的场景中,采用水平从右到左的布局方式,适用于阿拉伯语、希伯来语等语言环境,也可用于特殊视觉顺序的设计需求。

row-reverse

垂直从上到下的排列是最常见的布局形式,广泛应用于手机端菜单、表单输入项、垂直步骤条等结构化内容展示。

column

垂直从下到上的排列较为少见,主要用于实现特殊的动效或交互体验,使用频率较低。

column-reverse

精确定位方法

核心属性与效果

自动 margin:通过设置 margin 为 auto 实现剩余空间的自动填充,是实现布局对齐最常用的方式之一。例如,在导航栏中将“登录”按钮靠右对齐即可使用该方法。

margin: auto

绝对定位(absolute):通过计算具体边距进行精确定位。使用时需注意,当项目应用 absolute 定位时,其父容器应设置为 relative,以确保定位基准正确:

.container {
    position: relative; /* 使子元素基于此容器定位 */
}
position:absolute

position 属性在 Flex 布局中的行为

static
relative
absolute
fixed
sticky
属性值 在 Flex 容器中的行为 是否脱离文档流 典型应用场景
static / relative(默认) 正常参与 Flex 布局 默认状态,无需额外定位处理
relative 保持原有 Flex 空间,仅进行位置偏移 微调元素位置,或作为其他元素的定位参照
absolute 完全脱离 Flex 布局,不影响其他项目排列 角标、删除图标、下拉菜单等浮动组件
fixed 脱离 Flex,相对于视口定位 悬浮按钮、固定导航栏、模态框
混合使用(如 sticky) 行为复杂,不完全受 Flex 控制 混合 表头固定等高级布局(建议谨慎使用)

注意事项:
使用 absolute 定位时,元素会相对于最近的非 static 定位祖先元素进行偏移。
fixed 定位则始终相对于浏览器视口(viewport)进行固定。

补充说明:
非 static 定位的元素具有层叠上下文,可通过 z-index 控制堆叠顺序,数值越大越靠前。
对于 static 元素,z-index 属性无效。

z-index:

float 定位

在现代布局中,float 已基本被 flex 和 grid 取代,但在处理文字环绕图片等传统排版需求时仍有应用价值。

CSS 伪类与伪元素

伪元素基础

伪元素(::before 和 ::after)必须配合 content 属性使用,常见用法包括:

.element::before {
    content: "";               /* 插入空内容(最常用) */
    content: "文本";           /* 添加字符串 */
    content: url(icon.png);    /* 引入图片资源 */
    content: counter(number);  /* 显示计数器值 */
}

伪元素默认为行内(inline)显示类型,位于宿主元素内容之前(::before)或之后(::after)。

调整伪元素位置

可通过为宿主元素设置 relative 定位,并对伪元素使用 absolute 定位来精确控制其位置:

.parent {
    position: relative; /* 创建定位上下文 */
}
.parent::before,
.parent::after {
    position: absolute;
    content: ''; /* 必须声明 */
}

常用事件伪类

  • p:hover:鼠标悬停时触发样式
  • p:active:鼠标点击按下时生效

注意: hover 样式规则必须写在 active 之前。因为当点击时元素同时处于 :hover 和 :active 状态,后定义的样式会覆盖前者。

焦点与交互状态

当元素被点击并获得焦点时,可使用 p:focus 设置对应样式。此外,伪类还可影响其他相关元素:

  • 通过父级伪类控制子元素:div:hover > span { ... }
  • 通过伪类影响相邻兄弟元素:div:hover + div { ... }

列表类伪类选择器

可用于选中容器内的特定子元素,常见格式如下:

  • 选中 div 中的第一个 p 元素
  • div>p:first-child{效果}
  • 选中 div 中的最后一个 p 元素
  • div>p:first-child
  • 选中第 n 个 p 元素
  • div>p:nth-child(n)

语法说明:括号中的 n 表示位置序号,“nth-child”为固定写法。例如:

ul > li:nth-child(3) {
    background-color: #3687FC;
    color: #FFFFFF;
}

该技术也可用于绘制边框线等视觉效果。使用时请先参考“伪元素位置”部分的方法,合理调整宿主与伪元素的关系。

若要对伪元素应用列表伪类,写法如下:

div:first-child::before {
    /* 样式定义 */
}

CSS 常见易错点解析

  • 行内元素的 width 无效:其宽度由内部文字长度决定,即使设置了 width 属性也不会生效。
  • flex-wrap: wrap 时行间距问题:换行后行与行之间的间距由父容器决定。若 gap=0 仍存在较大间距,可能是父 container 过宽所致。解决方案是新建一个仅包裹该项目的独立容器,从而缩小实际占用空间,减小间距。
  • 方形图变圆形:只需设置 border-radius: 50% 即可实现。
  • fixed 定位元素不会随页面滚动消失:因其固定于视口,适合做悬浮类组件。

补充知识

利用 calc() 函数可动态计算尺寸,例如:

width: calc(100% - 200px);

表示元素宽度等于当前容器总宽度减去 200px,适用于响应式布局中的灵活适配。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:基础知识 Javascript Background container Direction

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
扫码
拉您进交流群
GMT+8, 2026-2-13 21:04