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

CSS 入门与常用属性详解

目录

1. CSS 引入方式(三种)

2. 优先级与级联

Specificity(选择器优先级)计分规则:

3. 选择器(基础与复合)

3.1 基础选择器

3.2 复合选择器

4. 常用样式属性

4.1 字体相关

4.2 文本相关

4.3 背景相关

4.4 盒子模型

4.5 布局(display、flex、grid、定位)

4.5.1 display 属性

4.5.2 Flexbox 布局

4.5.3 Grid 布局(进阶)

4.5.4 定位(position)

4.6 其他常用属性

5. 常见不明概念详解

5.1 盒子模型(Box Model)

5.1.1 盒子构成

5.1.2 box-sizing属性

5.2 行内 / 块级 / 行内块 元素本质

5.3 z-index 和堆叠上下文(stacking context)

5.4 常见单位说明

6. 常见错误与易踩坑点


1. CSS 引入方式(三种)

引入方式写法示例写在页面的位置作用范围常用场景
行内样式<p style="color:red">文本</p>标签内部 style 属性仅对当前标签生效快速调试、临时覆盖(不推荐长期使用)
内嵌样式<style>p { color: red; }</style><head> 中当前页面小型页面、演示或单个页面样式
外链样式<link rel="stylesheet" href="style.css"><head> 中引入该 CSS 的所有页面项目开发、组件共享(推荐)

优先级简述

  • 相同选择器:行内样式 > 内嵌样式 > 外联样式(后引入的覆盖前面)

  • 不同选择器:优先级 = 行内样式 > id > class > 标签 > 通用选择器(*)


2. 优先级与级联

Specificity(选择器优先级)计分规则:

选择器类型分值
内联样式(style=)1000
ID 选择器(#id)100
Class、属性选择器、伪类(.class、[type="text"]、:hover)10
元素/类型选择器(div, p)和伪元素(::before)1
通配符 *0

示例:

div { color: black; }      /* specificity: 0-0-1 */
.box { color: blue; }      /* specificity: 0-1-0 */
#header { color: red; }    /* specificity: 1-0-0 */
  • 当多个规则作用于同一元素时,优先级高的规则生效。
  • 相同优先级时,后定义的规则覆盖前定义的。

3. 选择器(基础与复合)

3.1 基础选择器

  • 标签选择器:div { }
  • class 选择器:.btn { }
  • ID 选择器:#main { }
  • 通配符选择器:* { }

3.2 复合选择器

选择器类型语法示例说明
后代选择器nav a {}选中 nav 内所有 a 元素
子选择器ul > li {}选中 ul 的直接子元素 li
相邻兄弟选择器h1 + p {}选中紧跟在 h1 后面的第一个 p
通用兄弟选择器h1 ~ p {}选中 h1 后面的所有同级 p
属性选择器input[type="text"] {}选中属性为指定值的元素
伪类:hover:first-child选中元素的特定状态
伪元素::before::after创建元素的虚拟子部分

伪类 vs 伪元素

  • 伪类(如 :hover):针对元素的状态。
  • 伪元素(如 ::before):创建元素的虚拟子部分,不是 DOM 中真实元素,但能添加样式和内容。

4. 常用样式属性

4.1 字体相关

body {font-family: "Microsoft YaHei", Arial, sans-serif;font-size: 16px;        /* 基本字体大小 */font-weight: 400;       /* 400 normal, 700 bold */font-style: normal;     /* normal / italic */color: #333333;
}
  • 推荐字体后备方案,最后用通用字体族 sans-serif 或 serif
  • 单位:
    • px:绝对像素
    • em:相对父元素字体大小
    • rem:相对根元素(html)字体大小,更稳定,推荐使用。

4.2 文本相关

p {line-height: 1.6;       /* 行高 */text-indent: 2em;       /* 首行缩进 */text-align: justify;    /* 两端对齐 */
}
a {text-decoration: none;  /* 去掉下划线 */
}
ul {list-style: none;       /* 去掉默认列表符号 */padding: 0;margin: 0;
}

4.3 背景相关

.header {background: url('bg.jpg') no-repeat center/cover;background-color: #f5f5f5;
}
  • background-size: cover; 保证背景图覆盖整个容器,可能会裁剪图片。
  • contain 保持图片完整显示,但可能会留空白。

4.4 盒子模型

  • 盒子模型结构:内容(content) → 内边距(padding) → 边框(border) → 外边距(margin)
  • 核心属性:widthheightpaddingbordermarginbox-sizing
/* 默认:content-box,宽度只包含内容,不含 padding 和 border */
box-sizing: content-box;/* 推荐:border-box,宽度包含 padding 和 border,更易布局 */
box-sizing: border-box;/* 推荐全局设置,减少计算误差 */
* {box-sizing: border-box;
}

4.5 布局(display、flex、grid、定位)

4.5.1 display 属性
  • block:块级元素,占满一行(如 divp
  • inline:行内元素,不独占一行(如 aspan
  • inline-block:行内块元素,可设置宽高
  • none:隐藏元素,不占空间
4.5.2 Flexbox 布局
<div class="container"><div class="item">A</div><div class="item">B</div><div class="item">C</div>
</div>
.container {display: flex;flex-direction: row;               /* 主轴方向 */justify-content: space-between;   /* 主轴对齐方式 */align-items: center;               /* 交叉轴对齐方式 */
}
.item {flex: 1;                          /* 子元素可伸展占满剩余空间 */
}
  • 主轴(main axis):由 flex-direction 决定方向。
  • 交叉轴(cross axis):垂直于主轴方向。

常用属性:

属性说明
flex-directionrow
justify-contentflex-start
align-itemsflex-start
flex (子元素)控制伸缩,常用 flex: 1; 表示等分剩余空间
order (子元素)改变元素显示顺序
4.5.3 Grid 布局(进阶)
  • 适合二维布局(行和列),初学者建议先掌握 Flex,后续深入学习 Grid。

4.5.4 定位(position)

父相子绝,如果要对子元素定位,一定要先确定父元素的位置,使用relative相对定位父元素的位置,再对需要定位的子元素使用absolute定位,就可以使用top,left等来移动子元素的位置了,此时的子元素是脱离文档流的。

常见误解absolute 定位不是相对于 body,而是相对于最近的非 static 定位祖先。

定位类型说明
static默认,元素按文档流排列,不受 top/right/bottom/left 影响
relative相对定位,元素仍占据原位置,但可用 top/left 等调整视觉位置
absolute绝对定位,脱离文档流,相对最近的已定位祖先定位(非 static 的祖先)
fixed固定定位,相对于视口固定,滚动时不移动
sticky粘性定位,滚动到指定阈值时表现为 fixed,之前表现为 static,常用于吸顶导航

示例:

.header {position: sticky;top: 0;background: #fff;
}

4.6 其他常用属性

  • overflowhidden | scroll | auto,控制内容溢出行为
  • z-index: 层级控制,需配合定位使用
  • transition: 过渡动画
  • transform: 位移、缩放、旋转等变换

5. 常见不明概念详解

5.1 盒子模型(Box Model)

5.1.1 盒子构成

网页元素被视为一个盒子,如图所示盒子可以由以下部分组成包含:

  • 内容区(content):内容区是盒子内部存放实际内容的区域,比如文字、图片等。
  • 内边距(padding):内边距是内容区与盒子边框之间的空白区域,用于控制内容与边框的距离。
  • 边框(border):边框位于内边距和外边距之间,包围着内容和内边距,可以设置宽度、样式和颜色。
  • 外边距(margin):外边距是盒子与其他外部元素之间的距离,用于控制盒子与父元素或相邻元素的间隔。

理解顺序和大小计算有助于布局。推荐使用 box-sizing: border-box;,这样 width 包含内容、内边距和边框,更直观。

5.1.2 box-sizing属性

1. 什么是 box-sizing?

box-sizing 是 CSS 中用来控制元素宽高(widthheight)计算方式的属性。它决定了设置的宽高是否包含内边距(padding)和边框(border)。

2. 两种常见取值及区别

取值计算方式说明计算示意
content-box默认值。width 和 height 只包含内容区大小,不包括内边距和边框。实际元素占用宽度 = 内容宽度 + 内边距 + 边框。设定 width: 200px; padding: 10px; border: 5px;,元素实际宽度 = 200 + 102 + 52 = 230px。
border-boxwidth 和 height 包含内容区、内边距和边框。即设置的宽高是元素实际占用的总宽高。设定 width: 200px; padding: 10px; border: 5px;,内容区宽度自动缩小为 200 - 102 - 52 = 160px。

3. 为什么要使用 border-box

  • 更易于布局计算:设置元素宽高时,无需再额外计算内边距和边框,避免尺寸超出预期。
  • 减少布局错误:避免因内边距和边框增加元素尺寸导致布局错乱。
  • 现代项目推荐:多数现代 CSS 框架和项目都会在全局设置 * { box-sizing: border-box; },统一盒模型计算方式。

5.2 行内 / 块级 / 行内块 元素本质

类型特点例子
块级元素独占一行,宽度默认撑满父容器divp
行内元素与其他元素在同一行显示,不能设置宽高(图片除外)aspan
行内块元素介于两者,可在一行显示且能设置宽高imgbutton

5.3 z-index 和堆叠上下文(stacking context)

  • z-index 控制元素前后显示顺序,但只有在元素有定位(position 非 static)或满足特定条件时生效。
  • 堆叠上下文是浏览器创建的独立层级环境,内部元素 z-index 只在该上下文内比较,不影响外部。
  • 产生新堆叠上下文的条件包括:
    • 元素有 position 且 z-index 不为 auto
    • opacity 小于 1
    • CSS 变换(transform
    • filtermix-blend-mode 等

5.4 常见单位说明

单位说明推荐用法
px绝对像素精确控制,适合边框、图像尺寸
em相对于父元素字体大小(复合)用于字体大小、间距,需注意继承影响
rem相对于根元素(html)字体大小更稳定,推荐用于响应式字体和间距
vw/vh相对于视口宽度/高度(1vw=视口宽度1%)适合全屏布局和响应式设计

6. 常见错误与易踩坑点

  • 忘记设置 box-sizing: border-box;,导致内边距和边框增加元素实际大小,布局错乱。
  • 使用 float 布局后忘记清除浮动,推荐用现代布局 flex 或 grid 替代。
  • 过度使用 position: absolute; 导致响应式和流式布局丢失。
  • z-index 失效通常因为元素没有定位或被包含在新的堆叠上下文中。
  • 使用 target="_blank" 打开新窗口时,忘记加 rel="noopener noreferrer",存在安全风险(防止新窗口通过 window.opener 操控原窗口)。
  • 过度使用 !important,导致样式难以维护和调试。

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

相关文章:

  • Linux 下 PostgreSQL 安装与常用操作指南
  • 【Linux】CentOS7网络服务配置
  • 使用C++编写的一款射击五彩敌人的游戏
  • 【LeetCode hot100|Week3】数组,矩阵
  • linux-环境配置-指令-记录
  • 自学嵌入式第四十四天:汇编
  • RTX 4090助力深度学习:从PyTorch到生产环境的完整实践指南——模型部署与性能优化
  • PythonOCC 在二维平面上实现圆角(Fillet)
  • Unity 性能优化 之 实战场景简化(LOD策略 | 遮挡剔除 | 光影剔除 | 渲染流程的精简与优化 | Terrain地形优化 | 主光源级联阴影优化)
  • [GXYCTF2019]禁止套娃1
  • 【论文阅读】-《Triangle Attack: A Query-efficient Decision-based Adversarial Attack》
  • 云微短剧小程序系统开发:赋能短剧生态,打造全链路数字化解决方案
  • 《从延迟300ms到80ms:GitHub Copilot X+Snyk重构手游跨服社交系统实录》
  • 力扣2132. 用邮票贴满网格图
  • Halcon学习--视觉深度学习
  • LeetCode:40.二叉树的直径
  • dplyr 是 R 语言中一个革命性的数据操作包,它的名字是 “data plier“ 的缩写,意为“数据折叠器“或“数据操作器“
  • 使用Node.js和PostgreSQL构建数据库应用
  • 设计模式(C++)详解—享元模式(1)
  • C++线程池学习 Day08
  • VALUER倾角传感器坐标系的选择
  • 解决 win+R 运行处以及文件资源管理器处无法使用 wt、wsl 命令打开终端
  • R语言 生物分析 CEL 文件是 **Affymetrix 基因芯片的原始扫描文件**,全称 **Cell Intensity File**。
  • Apache Spark Shuffle 文件丢失问题排查与解决方案实践指南
  • xtuoj 0x05-C 项链
  • STM32F429I-DISC1【读取板载运动传感器数据】
  • 【Kafka面试精讲 Day 21】Kafka Connect数据集成
  • 2025数据资产管理平台深度分析:技术特性、与选型逻辑
  • RabbitMQ Java 解决消息丢失、重复和积压问题
  • 深入解析 Spring AI 系列:解析请求参数处理