重学前端006 --- 响应式网页设计 CSS 弹性盒子

文章目录

  • 盒模型
    • 一、盒模型的基本概念
    • 二、两种盒模型的对比 举例
    • 三、总结
  • Flexbox 弹性盒子布局
    • 一、Flexbox 的核心概念​​
    • 二、Flexbox 的基本语法​​
      • ​​1. 定义 Flex 容器​
      • ​​2. Flex 容器的主要属性​​
      • ​​3. Flex 项目的主要属性​​
    • ​​三、Flexbox 的常见布局示例​​
    • ​​四、Flexbox vs Grid 布局​​
    • ​五、总结​​
  • img object-fit
  • gap
  • ​​CSS ::after伪元素详解​​
    • ​​1. 基本概念​​
    • ​​2. 基础语法​​
    • 3. 关键注意事项​​

以下内容,通过练习中提到的通过AI总结的。

<header></header>

盒模型

一、盒模型的基本概念

在 CSS 中,每个元素都被看作是一个“盒子”,这个盒子由以下几个部分组成:

​​内容区域(Content Box)​​:元素的实际内容(如文字、图片等)所在的区域。宽度和高度(width和 height)默认指的是这个区域的尺寸。 ​​
内边距(Padding)​:内容区域与边框之间的空白区域。通过 padding属性设置。
​​边框(Border)​​:围绕在内边距外部的线条。通过 border 属性设置。
外边距(Margin)​​:边框外部的空白区域,用于与其他元素分隔开。通过 margin属性设置。

​​注意​​:box-sizing 只影响 ​​内容区域、内边距和边框​​的计算方式,不会影响外边距(margin)。

作用:
box-sizing是一个用于控制元素​​盒模型(Box Model)​​计算方式的属性。
它决定了元素的宽度(width)和高度(height)如何计算,即是否将​​内边距(padding)​​、​​边框(border)​​和​​外边距(margin)​​包含在内。是否仅计算内容区域(content-box)的尺寸。

二、两种盒模型的对比 举例

1. box-sizing: content-box;(默认值)
​​宽度和高度的计算方式​​:width和 height仅表示​​内容区域​​的尺寸。​​内边距(padding)​​和​​边框(border)​​会额外增加到元素的宽度和高度之外。

​​公式​​:
实际宽度 = width + padding-left + padding-right + border-left + border-right
实际高度 = height + padding-top + padding-bottom + border-top + border-bottom

​​特点​​:
这是 CSS 的默认盒模型。宽度和高度的计算方式比较“直观”,但可能会导致布局计算复杂,尤其是在需要精确控制元素大小时。

​​示例​​:

<div class="box content-box-example">内容</div>
.content-box-example {box-sizing: content-box; /* 默认值,可以省略 */width: 200px;height: 100px;padding: 10px;border: 5px solid black;
}

​​实际效果​​:
内容区域的宽度是 200px,高度是 100px。
加上 padding(左右各 10px,共 20px)和 border(左右各 5px,共 10px)后:
实际宽度 = 200 + 20 + 10 = 230px
实际高度 = 100 + 20 + 10 = 130px

  1. box-sizing: border-box;
    ​​宽度和高度的计算方式​​: width和 height表示​​整个盒子​​的尺寸(包括内容区域、内边距和边框)。
    ​​内边距(padding)​​和​​边框(border)​​会包含在元素的宽度和高度之内,不会额外增加。

​​公式​​:
实际宽度 = width(已包含 padding 和 border)
实际高度 = height(已包含 padding 和 border)

​​特点​​:
更加直观和易于控制,尤其是在需要精确布局时。
开发者可以直接设置 width和 height,而不需要额外计算 padding和 border的影响。

​​示例​​:

<div class="box border-box-example">内容</div>
.border-box-example {box-sizing: border-box;width: 200px;height: 100px;padding: 10px;border: 5px solid black;
}

​​实际效果​​:
width和 height已经包含了 padding和 border。
实际宽度 = 200px(包括内容、内边距和边框)。
实际高度 = 100px(包括内容、内边距和边框)。

内容区域的实际宽度 = 200 - 20(padding) - 10(border) = 170px
内容区域的实际高度 = 100 - 20(padding) - 10(border) = 70px

三、总结

特性描述
作用控制元素的宽度和高度如何计算,即是否将内边距和边框包含在内。
​​取值​​content-box(默认值):宽度和高度仅表示内容区域的尺寸;
border-box:宽度和高度表示整个盒子的尺寸(包括内容、内边距和边框)。
​​默认值​​content-box
​​常见用途​精确控制元素尺寸、简化布局计算、响应式设计、表单元素样式调整等。
​​全局设置​​通常会在全局范围内设置 box-sizing: border-box;,以便统一盒模型的计算方式。

​​注意​​:box-sizing不会影响外边距(margin)的计算方式,外边距始终是在盒子的外部。

html, body {box-sizing: border-box;margin: 0;padding: 0;
}*, *::before, *::after {box-sizing: inherit; /* 继承父元素的 box-sizing */
}

Flexbox 弹性盒子布局

Flexbox(Flexible Box Layout,弹性盒子布局)是 CSS3 引入的一种​​一维布局模型​​,用于更高效地分配和对齐容器中的子元素,特别适合处理​​动态内容​​和​​响应式布局​​。它能够轻松实现​​水平居中、垂直居中、等高等宽、自动伸缩​​等传统布局难以完成的效果。

一、Flexbox 的核心概念​​

Flexbox 布局由两个主要部分组成:

  • ​​Flex 容器(Flex Container)​​
    通过 display: flex 或 display: inline-flex定义的元素,成为 Flex 容器。
    它的直接子元素会自动成为 **​​Flex 项目(Flex Items)**​​。

  • ​​Flex 项目(Flex Items)​​
    Flex 容器的子元素(默认是块级或行内元素,但会被 Flex 容器影响布局)。

二、Flexbox 的基本语法​​

​​1. 定义 Flex 容器​

  • display: flex:容器变为块级元素,占据整行。
  • display: inline-flex:容器变为行内元素,宽度由内容决定。

​​2. Flex 容器的主要属性​​

Flex 容器控制子元素的排列方式,主要属性包括 5个:
flex-direction(主轴方向)​​;justify-content(主轴对齐方式)​​;align-items(交叉轴对齐方式)​​;flex-wrap(是否换行)​​;align-content(多行对齐方式)​​

​​(1) flex-direction(主轴方向)​​
定义 Flex 项目在容器中的排列方向:

.container {flex-direction: row; /* 默认值,水平从左到右 */flex-direction: row-reverse; /* 水平从右到左 */flex-direction: column; /* 垂直从上到下 */flex-direction: column-reverse; /* 垂直从下到上 */
}
  • ​​row​​(默认):水平排列,从左到右。
  • ​​column​​:垂直排列,从上到下。

​​(2) justify-content(主轴对齐方式)​​
定义 Flex 项目在​​主轴​​(默认水平方向)上的对齐方式:

.container {justify-content: flex-start; /* 默认值,左对齐 */justify-content: flex-end; /* 右对齐 */justify-content: center; /* 居中对齐 */justify-content: space-between; /* 两端对齐,项目之间等距 */justify-content: space-around; /* 项目两侧等距 */justify-content: space-evenly; /* 项目之间和两侧等距 */
}
  • ​​space-between​​:两端对齐,项目之间等距。
  • ​​space-around​​:项目两侧等距(项目之间的间距是两侧的两倍)。
  • ​​space-evenly​​:项目之间和两侧完全等距。

​​(3) align-items(交叉轴对齐方式)​​
定义 Flex 项目在​​交叉轴​​(默认垂直方向)上的对齐方式:

.container {align-items: stretch; /* 默认值,拉伸填满容器高度 */align-items: flex-start; /* 顶部对齐 */align-items: flex-end; /* 底部对齐 */align-items: center; /* 垂直居中对齐 */align-items: baseline; /* 基线对齐(文字底部对齐) */
}

​​stretch​​(默认):项目拉伸填满容器高度(如果项目没有固定高度)。
​​baseline​​:项目的文字基线对齐(适用于文字排版)。

​​(4) flex-wrap(是否换行)
flex-wrap 属性决定当 flex 容器太小时项目的排列方式。
将它设置为 wrap 将允许项目换行到下一行/列。
nowrap(默认值)将阻止项目换行,此时项目可能会收缩以自适应或溢出。​​
定义 Flex 项目是否换行:

.container {flex-wrap: nowrap; /* 默认值,不换行 */flex-wrap: wrap; /* 换行,项目从上到下排列 */flex-wrap: wrap-reverse; /* 换行,项目从下到上排列 */
}

​​wrap​​:如果项目超出容器宽度,会自动换行。

**​​(5) align-content(多行对齐方式)**​​
定义多行 Flex 项目在交叉轴上的对齐方式(仅当 flex-wrap: wrap时生效):

.container {align-content: stretch; /* 默认值,拉伸填满容器 */align-content: flex-start; /* 顶部对齐 */align-content: flex-end; /* 底部对齐 */align-content: center; /* 垂直居中对齐 */align-content: space-between; /* 两端对齐 */align-content: space-around; /* 两侧等距 */
}

​​3. Flex 项目的主要属性​​

Flex 项目可以单独调整其在容器中的行为:

​​(1) order(排列顺序)​​
定义 Flex 项目的排列顺序(默认 0,数值越小越靠前):

.item {order: 1; /* 调整顺序 */
}

​​(2) flex-grow(放大比例)​​
定义 Flex 项目如何分配剩余空间:

.item {flex-grow: 1; /* 默认 0,不放大 */
}

如果所有项目 flex-grow: 1,则剩余空间均分。
如果某个项目 flex-grow: 2,则它占据 2 倍于其他项目的空间。

​​(3) flex-shrink(缩小比例)​​
定义 Flex 项目如何收缩以适应容器:

.item {flex-shrink: 1; /* 默认 1,允许缩小 */
}

如果所有项目 flex-shrink: 1,则空间不足时均分收缩。
如果某个项目 flex-shrink: 0,则它不会缩小。

​​(4) flex-basis(初始大小)​​
定义 Flex 项目的初始大小(类似 width,但优先级更高):

.item {flex-basis: 200px; /* 初始宽度 200px */
}

可以是固定值(如 200px)或百分比(如 50%)。

​​(5) flex(简写属性)​​
flex是 flex-grow、flex-shrink和 flex-basis的简写:

.item {flex: 1 1 200px; /* flex-grow: 1, flex-shrink: 1, flex-basis: 200px */
}

常用简写:
flex: 1→ flex: 1 1 0%(默认等分剩余空间)。
flex: auto→ flex: 1 1 auto(根据内容自动调整)。
flex: none→ flex: 0 0 auto(不伸缩,固定大小)。

​​三、Flexbox 的常见布局示例​​

​​1. 水平居中​​

.container {display: flex;justify-content: center; /* 水平居中 */
}

​​2. 垂直居中​​

.container {display: flex;align-items: center; /* 垂直居中 */
}

​​3. 水平垂直居中​​

.container {display: flex;justify-content: center; /* 水平居中 */align-items: center; /* 垂直居中 */
}

​​4. 等宽布局​​

.container {display: flex;
}
.item {flex: 1; /* 所有项目等分剩余空间 */
}

​​5. 导航栏布局​​

.nav {display: flex;justify-content: space-between; /* 两端对齐 */align-items: center; /* 垂直居中 */
}

​​四、Flexbox vs Grid 布局​​

特性FlexboxGrid
​​布局方向​​一维(行或列)二维(行和列)
​​适用场景​​动态内容、导航栏、卡片布局复杂网格布局(如仪表盘)
​​对齐控制​​justify-content和 align-itemsjustify-items和 align-items
​​项目顺序​​order属性grid-column和 grid-row
  • ​​Flexbox 适合一维布局​​(如导航栏、卡片列表)。 ​​
  • Grid 适合二维布局​​(如仪表盘、复杂网格)。

​五、总结​​

​​Flexbox 是一种强大的 CSS 布局模型​​,适用于动态内容和对齐需求高的场景。

​​核心属性​​:

  • 容器:flex-direction, justify-content, align-items, flex-wrap, align-content。
  • 项目:order, flex-grow, flex-shrink, flex-basis, flex。

​​常见用途​​:

  • 水平/垂直居中。 等宽布局。 导航栏、卡片列表。

img object-fit

特性说明
作用​​控制图片/视频等替换元素在固定尺寸容器内的填充方式(是否拉伸、裁剪或留白)。
​​核心取值​​- fill(默认):拉伸填满容器(可能变形)。
- contain:完整显示内容(可能留白)。
- cover:填满容器并裁剪多余部分(保持比例)。
- none:保持原始尺寸(可能溢出)。
- scale-down:选择 none或 contain中更合适的(避免变形或溢出)。
​​常见场景​​- 响应式图片/视频布局(如卡片、弹窗)。
- 固定比例显示图标/Logo。
- 视频适配固定尺寸播放器。
​​兼容性​现代浏览器支持,IE 不支持(需用 background-image或 padding-top替代)。
​​搭配属性​​object-position:控制内容在容器内的对齐位置(如居中、左上角等)。

注意​​:object-fit只影响元素内容的显示方式,不会改变元素本身的尺寸(即 width和 height仍需显式设置)。

  • object-fit控制内容的缩放方式 object-position可以控制内容的​​对齐方式​​(类似于
    background-position)。

gap

gap CSS 缩写属性设置行和列之间的间隙,也被称为网格间距(gutter)。 gap 属性以及 row-gap 和 column-gap 子属性用来设置 flex、grid 和多列布局的间隙。 可以将此属性应用到容器元素。

​​CSS ::after伪元素详解​​

​​1. 基本概念​​

::after是 CSS ​​伪元素​​之一,用于在​​选定元素的内容之后​​插入一个​​虚拟的子元素​​(实际是生成的内容)。它常用于添加装饰性内容或实现特定布局效果。

​​注意​​:
::after生成的内容是​​独立的子元素​​,但不会出现在 HTML 源码中(纯 CSS 实现)。
类似伪元素还有 ::before(在内容之前插入内容)。

​​2. 基础语法​​

selector::after {content: "插入的内容"; /* 必须属性 *//* 其他样式属性(如 display、color、position 等) */
}

​​content​​:必需属性,定义插入的内容(可以是文本、空字符串或图像)。
​​默认显示​​:生成的元素是 inline行内元素(可通过 display修改)。

3. 关键注意事项​​

  • content属性必填​​ 即使不需要插入内容(如清除浮动),也必须设置 content: “”(空字符串)。
  • ​​生成的元素是行内元素​​ 默认 display: inline,可通过 display: block或 flex等修改布局。
  • ​​无法直接选中或绑定事件​​ ::after生成的内容无法通过 JavaScript 直接操作或绑定事件(它是纯样式层面的)。
  • ​​与 ::before的区别​​ ::before在内容前插入,::after在内容后插入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914761.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rLLM:用于LLM Agent RL后训练的创新框架

rLLM&#xff1a;用于LLM Agent RL后训练的创新框架 本文介绍了rLLM&#xff0c;一个用于语言智能体后训练的可扩展框架。它能让用户轻松构建自定义智能体与环境&#xff0c;通过强化学习进行训练并部署。文中还展示了用其训练的DeepSWE等智能体的出色表现&#xff0c;以及rLL…

rocky8 --Elasticsearch+Logstash+Filebeat+Kibana部署【7.1.1版本】

软件说明&#xff1a; 所有软件包下载地址&#xff1a;Past Releases of Elastic Stack Software | Elastic 打开页面后选择对应的组件及版本即可&#xff01; 所有软件包名称如下&#xff1a; 架构拓扑&#xff1a; 集群模式&#xff1a; 单机模式 架构规划&#xff1a…

【JVM】内存分配与回收原则

在 Java 开发中&#xff0c;自动内存管理是 JVM 的核心能力之一&#xff0c;而内存分配与回收的策略直接影响程序的性能和稳定性。本文将详细解析 JVM 的内存分配机制、对象回收规则以及背后的设计思想&#xff0c;帮助开发者更好地理解 JVM 的 "自动化" 内存管理逻辑…

Qt获取hid设备信息

Qt 中通过 HID&#xff08;Human Interface Device&#xff09;接口获取指定的 USB 设备&#xff0c;并读取其数据。资源文件中包含了 hidapi.h、hidapi.dll 和 hidapi.lib。通过这些文件&#xff0c;您可以在 Qt 项目中实现对 USB 设备的 HID 接口调用。#include <QObject&…

Anaconda Jupyter 使用注意事项

Anaconda Jupyter 使用注意事项 1.将cell转换为markdown。 First, select the cell you want to convertPress Esc to enter command mode (the cell border should turn blue)Press M to convert the cell to Markdown在编辑模式下按下ESC键&#xff0c;使单元块&#xff08;c…

[硬件电路-20]:模拟信号处理运算与数字信号处理运算的相同点与不同点

模拟信号处理运算与数字信号处理运算是信号处理领域的两大核心方法&#xff0c;二者在信号形式、处理机制、性能特点和应用场景上存在显著差异&#xff0c;但也共享一些基础目标与理论支撑。以下从多个维度进行系统对比分析&#xff1a;一、相同点1. 核心目标一致信号变换与分析…

Redis 高频面试题

1. 缓存穿透 1.1 描述 用户想要查询某个数据,在 Redis 中查询不到,即没有缓存命中,这时就会直接访问数据库进行查询。当请求量超出数据库最大承载量时,就会导致数据库崩溃。这种情况一般发生在非正常 URL 访问,目的不是为了获取数据,而是进行恶意攻击。 1.2 现象 1、应…

OWASP Top 10 攻击场景实战

OWASP (开放式Web应用程序安全项目) Top 10 榜单是全球公认的、针对Web应用最关键安全风险的权威指南。它不是一份详尽无遗的清单&#xff0c;而是一份凝聚了安全专家共识的“高危预警”。本文将不止于罗列这些风险&#xff0c;而是深入每个风险的核心&#xff0c;通过生动的比…

Three.js 实战:使用 PBR 贴图打造真实地面材质

在 Three.js 中&#xff0c;我们可以通过 MeshStandardMaterial 材质配合多张贴图来实现真实的地面效果。这种方式模拟了物理世界中光照与表面材质的复杂交互&#xff0c;常用于构建高质量场景&#xff0c;如数字孪生、建筑可视化、游戏等。 本文将以一个完整示例为基础&#x…

Java基础的总结问题(第一篇)

JDK和JRE的区别&#xff1f;JRE是Java运行环境&#xff08;Java Runtime Environment&#xff09;&#xff0c;包含了JVM和Java核心类库JDK是Java开发工具包&#xff08;Java Developers Kit&#xff09;,包含了JRE和Java常见的开发工具与equals的区别&#xff1f;可以用来比较…

[智能算法]MOEA/D算法的Python实现

一、初始化不同于NSGA-II&#xff0c;MOEA/D在进行迭代之前需要先进行初始化&#xff0c;初始化的主要内容是计算个体向量权重之间的欧氏距离&#xff0c;并得出其邻域集合。# 计算T个邻居 def cpt_W_Bi_T(moead):# 设置的邻居个数错误(自己不能是自己的邻居)if moead.T_size &…

Java设计模式之-组合模式

什么是组合模式&#xff1f; 组合模式允许你将对象组合成树形结构来表示"部分-整体"的层次结构。它让客户端能够以统一的方式处理单个对象和对象组合。 简单来说&#xff0c;就像公司的组织结构&#xff1a; 公司有部门部门有小组小组有员工但无论是对公司、部门还是…

2021-10-29 C++与反转数的和

缘由输入一个三位数 与它倒过来的数相加&#xff0c;输出和-编程语言-CSDN问答 直接写 int n0,nn0,nnn0; cin>>n;nnn; while(nn)nnn*10,nnnnn%10,nn/10; cout<<nnnn<<endl; 缘由https://ask.csdn.net/questions/7552128 int 反转数(int n) { int nn 0…

论安全架构设计(威胁与措施)

安全架构威胁与措施摘要2021年4月&#xff0c;我有幸参与了某保险公司的“优车险”项目的建设开发工作&#xff0c;该系统以车险报价、车险投保和报案理赔为核心功能&#xff0c;同时实现了年检代办、道路救援、一键挪车等增值服务功能。在本项目中&#xff0c;我被安排担任架构…

022_提示缓存与性能优化

提示缓存与性能优化 目录 缓存技术概述缓存工作原理实现方法详解成本优化策略性能优化实践高级应用场景最佳实践指南 缓存技术概述 什么是提示缓存 提示缓存是Claude API的一项优化功能&#xff0c;允许缓存提示的特定部分以便重复使用&#xff0c;从而显著减少处理时间和…

【AI交叉】地理:人工智能如何推动地理科学的智能转型?

随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;越来越多的传统学科开始与之融合&#xff0c;催生出一系列跨学科的新研究方向和应用场景。地理科学作为研究地球表层自然与人文现象的综合性学科&#xff0c;也在这一浪潮中迎来转型契机。 AI与地理学的交叉正…

iOS高级开发工程师面试——关于网络

iOS高级开发工程师面试——关于网络 一、谈谈对 HTTP、HTTPS 的理解1. HTTP协议:2. HTTPS 协议二、TCP、UDP 和 SocketTCPUDPTCP 和 UDP 的区别?Socket一、谈谈对 HTTP、HTTPS 的理解 1. HTTP协议: 超文本传输协议,他是基于TCP应用层协议。 是无连接 无状态 的,需要通过…

跟着Nature正刊学作图:回归曲线+散点图

&#x1f4cb;文章目录复现目标图片绘图前期准备绘制左侧回归线图绘制右侧散点图组合拼图 (关键步骤&#xff01;)跟着「Nature」正刊学作图&#xff0c;今天挑战复现Nature文章中的一张组合图–左边为 回归曲线、右边为 散点图。这种组合图在展示相关性和分组效应时非常清晰有…

LVS集群调度器

目录 集群和分布式 LVS运行原理 LVS概念 LVS的集群类型 实验配置 安装LVS ipvsadm命令参数 1.管理集群服务中的增删改 2.管理集群服务中的RS增删改 3.lvs调度策略的备份与恢复 4.lvs调度策略的开机启动 LVS-NAT模式 LVS-DR模式 集群和分布式 集群&#xff08;Clu…

【React Natve】NetworkError 和 TouchableOpacity 组件

NetworkError公共组件 import SimpleLineIcons from "expo/vector-icons/SimpleLineIcons"; import { StyleSheet, Text, View } from "react-native";export default function NetworkError() {return (<View style{styles.container}><SimpleL…