前端css(原生CSS讲解)

前端css(原生CSS讲解)
原生CSS讲解

原生 CSS(层叠样式表)是用于控制网页外观和布局的核心技术,以下从基础到进阶梳理其核心知识体系:

### 一、CSS 基础语法

1. **语法结构**由「选择器」和「声明块」组成,声明块包含一个或多个 `属性: 值;` 键值对:

css

```

选择器 {

属性1: 值1;

属性2: 值2;

}

```

![](<> "点击并拖拽以移动")

例:

css

```

p {

color: red;

font-size: 16px;

}

```

![](<> "点击并拖拽以移动")

1. **引入方式**

- **内联样式**:直接写在 HTML 标签的 `style` 属性中(优先级最高,不推荐):

html

预览

```

文本

```

![](<> "点击并拖拽以移动")

- **内部样式**:写在 HTML 的 `

```

![](<> "点击并拖拽以移动")

- **外部样式**:单独的 `.css` 文件,通过 `` 引入(推荐,可复用):

html

预览

```

```

![](<> "点击并拖拽以移动")

### 二、选择器(核心)

用于定位 HTML 元素,决定样式作用的目标:

1. **基础选择器**

- **元素选择器**:直接匹配标签名(如 `p`、`div`)。

- **类选择器**:匹配 `class` 属性,以 `.` 开头(如 `.active`)。

- **ID 选择器**:匹配 `id` 属性,以 `#` 开头(如 `#header`,唯一)。

- **通配符**:`*` 匹配所有元素(慎用,性能差)。

1. **组合选择器**

- **后代选择器**:`A B` 匹配 A 内部的所有 B(无论嵌套层级)。

- **子选择器**:`A > B` 仅匹配 A 的直接子元素 B。

- **相邻兄弟选择器**:`A + B` 匹配 A 后面紧邻的第一个 B。

- **通用兄弟选择器**:`A ~ B` 匹配 A 后面所有同级的 B。

1. **属性选择器**

- `[attr]`:匹配有 `attr` 属性的元素(如 `[disabled]`)。

- `[attr=value]`:匹配 `attr` 属性值为 `value` 的元素(如 `[type="text"]`)。

1. **伪类选择器**(动态 / 状态选择)

- 状态类:`:hover`(鼠标悬停)、`:active`(点击时)、`:focus`(获焦时)。

- 结构类:`:first-child`(第一个子元素)、`:nth-child(2)`(第 2 个子元素)。

- 否定类:`:not(.class)`(排除特定类的元素)。

1. **伪元素选择器**(创建虚拟元素)

- `::before`:在元素内容前插入虚拟元素(需配合 `content` 属性)。

- `::after`:在元素内容后插入虚拟元素。

- `::first-letter`:匹配文本的第一个字符。

### 三、优先级与层叠

当多个样式作用于同一元素时,优先级决定最终生效的样式:

1. **优先级规则**(从高到低):

- 内联样式(`style` 属性)。

- ID 选择器(`#id`)。

- 类 / 属性 / 伪类选择器(`.class`、`[attr]`、`:hover`)。

- 元素 / 伪元素选择器(`div`、`::before`)。

- 通配符(`*`)和继承样式。

1. **权重计算**:用四元组 `(a, b, c, d)` 表示,`a` 最高:

- `a`:内联样式(1 或 0)。

- `b`:ID 选择器数量。

- `c`:类 / 属性 / 伪类选择器数量。

- `d`:元素 / 伪元素选择器数量。例:`#header .nav li` 权重为 `(0, 1, 1, 1)`。

1. **`!important`**:强制提升样式优先级(如 `color: red !important;`),谨慎使用(破坏自然优先级)。

### 四、盒子模型(Box Model)

所有 HTML 元素都被视为盒子,由四部分组成(从内到外):

1. **内容区(content)** :显示文本和图像,大小由 `width`、`height` 控制。

1. **内边距(padding)** :内容区与边框的距离(`padding-top`、`padding: 10px 20px`)。

1. **边框(border)** :包裹内边距和内容区(`border: 1px solid #000`)。

1. **外边距(margin)** :盒子与其他元素的距离(`margin-bottom`、`margin: 0 auto` 水平居中)。

- **盒模型模式**:

- `box-sizing: content-box`(默认):`width`/`height` 仅包含内容区。

- `box-sizing: border-box`(推荐):`width`/`height` 包含内容区 + 内边距 + 边框(避免计算麻烦)。

### 五、布局技术

#### 1. 普通流(Normal Flow)

元素默认的布局方式:块级元素(`div`、`p`)垂直排列,行内元素(`span`、`a`)水平排列。

#### 2. 浮动(Float)

让元素脱离普通流,向左 / 右移动,直到碰到父元素边缘或其他浮动元素:

css

```

.float-left { float: left; }

.float-right { float: right; }

```

![](<> "点击并拖拽以移动")

- 注意:浮动会导致父元素高度坍塌,需清除浮动(如父元素加 `overflow: hidden` 或使用 `::after` 伪元素)。

#### 3. 定位(Position)

控制元素在页面中的精确位置:

- `static`(默认):遵循普通流,不接受 `top`/`left` 等属性。

- `relative`:相对自身原有位置偏移,不脱离普通流(占位)。

- `absolute`:相对最近的非 `static` 定位祖先元素偏移,脱离普通流(不占位)。

- `fixed`:相对浏览器窗口定位,固定在屏幕某个位置(如导航栏)。

- `sticky`:滚动时在指定位置(`top: 0`)固定,兼具 `relative` 和 `fixed` 特性。

#### 4. Flex 布局(弹性布局)

一维布局模型,通过「容器」和「项目」的属性控制排列:

- **容器属性**:

- `display: flex`:启用 Flex 布局。

- `flex-direction`:主轴方向(`row` 水平 /`column` 垂直)。

- `justify-content`:主轴对齐方式(`center` 居中 /`space-between` 两端对齐)。

- `align-items`:交叉轴对齐方式(`center` 居中 /`flex-start` 顶部对齐)。

- `flex-wrap`:项目是否换行(`wrap` 换行 /`nowrap` 不换行)。

- **项目属性**:

- `flex: 1`:项目占剩余空间的比例(自适应拉伸)。

- `order`:控制项目排列顺序(数值越小越靠前)。

- `align-self`:单独设置项目的交叉轴对齐方式。

#### 5. Grid 布局(网格布局)

二维布局模型,适合复杂的多行多列布局:

- **容器属性**:

- `display: grid`:启用 Grid 布局。

- `grid-template-columns`:定义列数和宽度(`repeat(3, 1fr)` 3 列等宽)。

- `grid-template-rows`:定义行数和高度(`100px 200px` 2 行,高度分别为 100px 和 200px)。

- `gap`:列 / 行之间的间距(`gap: 10px` 行列间距均为 10px)。

- `justify-items`/`align-items`:网格项在单元格内的对齐方式。

- **项目属性**:

- `grid-column: 1 / 3`:项目跨第 1 到第 3 列(占 2 列)。

- `grid-row: 2 / 4`:项目跨第 2 到第 4 行(占 2 行)。

### 六、文本与字体

1. **文本样式**

- `color`:文字颜色(`#ff0000`、`rgb(255,0,0)`、`red`)。

- `font-size`:字体大小(`16px`、`1rem`、`1.2em`)。

- `font-weight`:字重(`normal`、`bold`、`600`)。

- `text-align`:水平对齐(`left`、`center`、`right`)。

前端css(原生CSS讲解)

- `line-height`:行高(`1.5` 倍文字大小,垂直居中常用)。

- `text-decoration`:文本装饰(`none` 去除下划线、`underline` 下划线)。

1. **字体设置**

- `font-family`:字体族(`"Microsoft YaHei", sans-serif`,优先使用前者,无则用系统默认 sans-serif)。

- `@font-face`:引入自定义字体:

css

```

@font-face {

font-family: "MyFont";

src: url("myfont.woff2") format("woff2");

}

```

![](<> "点击并拖拽以移动")

### 七、背景与边框

1. **背景**

- `background-color`:背景色(`#f0f0f0`)。

- `background-image`:背景图(`url("bg.jpg")`)。

- `background-repeat`:背景图是否重复(`no-repeat` 不重复)。

- `background-position`:背景图位置(`center` 居中)。

- `background-size`:背景图大小(`cover` 覆盖容器 /`contain` 完整显示)。

- 简写:`background: #f0f0f0 url("bg.jpg") no-repeat center/cover`。

1. **边框**

- `border: width style color`(`border: 1px solid #ccc`)。

- `border-radius`:圆角(`50%` 圆形,`8px` 圆角矩形)。

- `box-shadow`:阴影(`0 2px 4px rgba(0,0,0,0.1)` 水平偏移 0、垂直偏移 2px、模糊 4px、半透明黑)。

### 八、响应式设计

使网页在不同设备(手机、平板、电脑)上自适应显示:

1. **媒体查询(@media)** 根据屏幕尺寸应用不同样式:

css

```

/* 屏幕宽度 ≤ 768px 时生效 */

@media (max-width: 768px) {

.container {

width: 100%;

}

}

```

![](<> "点击并拖拽以移动")

常见断点:

- 手机:`max-width: 767px`

- 平板:`min-width: 768px and max-width: 1023px`

- 桌面:`min-width: 1024px`

1. **相对单位**

- `rem`:相对于根元素(`html`)的 `font-size`(默认 `1rem = 16px`)。

- `em`:相对于父元素的 `font-size`。

- `vw/vh`:相对于视口宽度 / 高度的 1%(`50vw` 即视口宽度的一半)。

1. **弹性图片**

css

```

img {

max-width: 100%; /* 图片不超过容器宽度 */

height: auto; /* 保持宽高比 */

}

```

![](<> "点击并拖拽以移动")

### 九、动画与过渡

1. **过渡(Transition)** 使样式变化更平滑(如 hover 效果):

css

```

.btn {

transition: background-color 0.3s, transform 0.3s; /* 监听属性及持续时间 */

}

.btn:hover {

background-color: blue;

transform: scale(1.1); /* 放大1.1倍 */

}

```

![](<> "点击并拖拽以移动")

1. **动画(Animation)** 更复杂的自定义动画,需定义关键帧:

css

```

/* 定义关键帧 */

@keyframes rotate {

0% { transform: rotate(0deg); }

100% { transform: rotate(360deg); }

}

/* 应用动画 */

.box {

animation: rotate 2s linear infinite; /* 动画名、持续时间、匀速、无限循环 */

}

```

![](<> "点击并拖拽以移动")

1. **变换(Transform)** 改变元素的形状、位置或角度:

- `translate(Xpx, Ypx)`:平移

- `scale(1.2)`:缩放

- `rotate(45deg)`:旋转

- `skew(10deg)`:倾斜

### 十、CSS 变量(自定义属性)

复用样式值,方便维护:

css

```

/* 定义变量(通常在 :root 伪类,全局可用) */

:root {

--primary-color: #3B82F6;

--font-size: 16px;

}

/* 使用变量 */

body {

color: var(--primary-color);

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

}

```

![](<> "点击并拖拽以移动")

### 总结

原生 CSS 核心围绕「选择器定位元素」→「通过属性控制样式」→「用布局技术排列元素」→「响应式适配多设备」→「动画提升交互体验」。掌握这些基础后,可进一步学习 CSS 架构(如 BEM 命名规范)、性能优化(减少重绘重排)等进阶内容。

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读