前端【3】--CSS布局,CSS实现横向布局,盒子模型

盒子分类

1、块级盒子

2、内联级盒子

3、内联块级盒子

4、弹性盒子 

5、盒子内部分区

方法一:使用 float 普通盒子实现横向布局

方法二:使用 display: inline-block 内联块级元素实现横向布局

方法三:使用弹性盒子 flexbox(推荐)

1、父级属性:

 2、子级属性:

示例:


往期文章:

前端【2】html添加样式、CSS选择器-CSDN博客

盒子分类

1、块级盒子

块级元素布局:块级元素的特性,独占一行,竖向排列

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>块级元素</title><style>div {width: 200px;height: 100px;background-color: aquamarine;margin: 10px 0; /* 上下间距 */}</style>
</head>
<body><!-- 块级元素:独占一行,竖着布局对宽度高度支持 display:block --><div>块级元素 1</div><div>块级元素 2</div><p>段落文本</p><h1>标题</h1>
</body>
</html>

常见块级标签:div、p、h、ul、ol、li 

2、内联级盒子

内联元素的特性:不独占一行,对宽高不支持,行内元素连续排列。

<body>
<!-- 内联级元素 不独占一行 对宽度高度不支持 display: inline --><span>内联元素 1</span><span>内联元素 2</span><a href="#">超链接</a>
</body>

常见的有span、a、img、 

3、内联块级盒子

内联块级元素的特性:不独占一行,但支持宽高设置,连续排列。 

 <!-- 内联块级级元素 不独占一行 对宽度高度支持 display:inline-block --><img src="material/蒲公英.png" alt=""><img src="material/蒲公英.png" alt=""><img src="material/蒲公英.png" alt="">

4、弹性盒子 

弹性盒子(Flexbox)的特性:子元素默认横向排列,可灵活控制布局

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>弹性盒子</title><style>.container {display: flex; /* 弹性盒子 */width: 600px;height: 200px;background-color: yellow;justify-content: space-between; /* 子元素之间平均分布 */align-items: center; /* 垂直方向居中 */}.container div {width: 150px;height: 100px;background-color: pink;}</style>
</head>
<body><div class="container"><div>子元素 1</div><div>子元素 2</div><div>子元素 3</div></div>
</body>
</html>

5、盒子内部分区

CSS页面布局(超详解)_css布局-CSDN博客----推荐博客~~

每个元素的盒子由以下四个部分组成:

1. 内容区 (Content)

  • 元素的实际内容(如文字、图片等)所在的区域。
  • 它的大小由 widthheight 属性决定。

2. 内边距 (Padding)

  • 内容与边框之间的距离。
  • 使用 padding 属性设置,可以单独设置上下左右的内边距。

3. 边框 (Border)

  • 环绕内容区和内边距的边界。
  • 使用 border 属性设置,定义边框的宽度、样式和颜色。

4. 外边距 (Margin)

  • 元素与其他元素之间的距离。
  • 使用 margin 属性设置,可以单独设置上下左右的外边距。

这里放一张名图:

 浏览器默认给外边距和内边距设置一定的初值,可以对margin和padding的值来改变其样式,其代码如下:

*{              /*通用选择器,选择所有元素*/margin:0;  /*外边距清0*/padding:0; /*内边距清0*/
}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>盒子模型示例</title><style>.box {width: 200px;                /* 内容区宽度 */height: 100px;               /* 内容区高度 */background-color: lightblue; /* 内容区背景色 */padding: 20px;               /* 内边距 */border: 10px solid blue;     /* 边框 */margin: 30px auto;           /* 外边距:上下30px,左右居中 */}body {background-color: #f5f5f5;   /* 页面背景色 */}</style>
</head>
<body><div class="box">内容区</div>
</body>
</html>

 


在前端布局开发中,我们经常需要对元素进行横向布局。实现横向布局的方法有很多,从传统的 float 到现代的 flexbox,每种方式都有其特点和适用场景。本文将对三种常见方法进行详细介绍,分析它们的优缺点,并推荐最佳实践。


方法一:使用 float 普通盒子实现横向布局

通过为子元素设置 float 属性可以实现横向布局:

  • float: left; 子元素左浮动。
  • float: right; 子元素右浮动

存在的问题:父级元素高度坍塌:使用 float 后,父级元素的高度不会被子元素撑开,可能导致后续元素向上移动。

解决方法

  1. 设置父级高度:手动为父级元素设置固定高度,如 height: 150px;。但固定高度难以灵活适配内容。
  2. 清除浮动
    • 给父级元素添加 overflow: hidden;,使父级高度随子级内容变化。

无法解决的问题:

1、子级元素均分 父级元素需要计算设置宽度 ,但不一定能均分

2、子级元素想要在父级元素内均匀分布需要计算设置 margin,但不一定能均匀分布

3、书写比较繁琐,代码冗余

方法二:使用 display: inline-block 内联块级元素实现横向布局

将子元素设置为 inline-block,让其表现为块状元素,同时可以像文本一样在一行内排列。

存在的问题:空白间隙--inline-block 布局的子元素之间若存在换行符,会被浏览器解析为空白符,导致子元素之间有多余间隙。

解决方法

  1. 移除换行符:将子元素标签紧贴书写。
    <div class="parent"><div class="child"></div><div class="child"></div></div>
    
  2. 设置 font-size 为 0:在父级元素上设置 font-size: 0;,清除空白符影响。

无法解决的问题:

1、子级元素均分 父级元素需要计算设置宽度 ,但不一定能均分

 2、子级元素想要在父级元素内均匀分布需要计算设置 margin,但不一定能均匀分布

 3、书写比较繁琐,代码冗余

方法三:使用弹性盒子 flexbox(推荐)

  flexbox 是一种强大且灵活的现代布局方式,通过为父级元素设置 display: flex,即可实现横向布局,且能够轻松解决 floatinline-block 布局中的许多问题。 

1、父级属性

  • flex-direction:定义子元素排列方向。
    • row:从左到右排列(默认)。
    • row-reverse:从右到左排列。
    • column:纵向从上到下排列。
    • column-reverse:纵向从下到上排列。
  • flex-wrap:定义子元素是否换行。
    • nowrap:不换行(默认)。
    • wrap:自动换行。
  • justify-content:定义子元素在水平方向的分布方式。
    • flex-start:从起点开始排列。(需要结合flex-direction 来看)
    • flex-end:从终点开始排列。
    • center:居中排列。
    • space-between:代表空白元素均匀分布在元素中间-------经常用到
    • space-around:子元素之间及首尾均分空隙。
    • space-evenly:所有间隙(子元素之间及首尾)均等。
  • align-items:定义子元素在垂直方向上的对齐方式。
    • stretch(默认填满)、flex-start(顶端对齐)flex-end(底部对齐)center、baseline(基线对齐)

 2、子级属性

  • order设置子元素排列顺序,值越小越靠前。
  • flex(简写属性):
    • flex-grow:拉伸因子 根据每个属性的拉伸因子采用求和均分按比例将空余i部分分配给每个元素
    • flex-shrink:压缩因子 ,前提是子元素和>父级元素宽/高,原理与grow一致定义子元素在超出父级宽度时的压缩比例。
    • flex-basis:定义子元素的初始尺寸。

示例:

/* 父容器 .top 样式 */
.top {width: 800px; /* 设置父容器宽度 */background-color: palegreen; /* 背景颜色为淡绿色 */display: flex; /* 启用弹性布局 */flex-direction: row; /* 主轴方向为水平方向 */justify-content: space-between; /* 子元素在主轴方向均匀分布 */
}/* 左侧子容器 .left 样式 */
.left {flex-grow: 3; /* 拉伸因子,分配更多剩余空间 */order: 3; /* 排列顺序较低 */background-color: powderblue; /* 背景颜色为淡蓝色 */width: 200px; /* 固定宽度 */height: 100px; /* 固定高度 */
}/* 中间子容器 .middle 样式 */
.middle {flex-grow: 1; /* 拉伸因子,占用较少的剩余空间 */order: 1; /* 排列顺序最高 */background-color: yellow; /* 背景颜色为黄色 */width: 200px; /* 固定宽度 */height: 100px; /* 固定高度 */
}/* 右侧子容器 .right 样式 */
.right {order: 2; /* 排列顺序居中 */background-color: orange; /* 背景颜色为橙色 */width: 200px; /* 固定宽度 */height: 130px; /* 固定高度 */
}/* 底部容器 .bottom 样式 */
.bottom {width: 800px; /* 宽度与父容器一致 */height: 200px; /* 固定高度 */background-color: rgb(168, 51, 70); /* 背景颜色为深红色 */
}

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

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

相关文章

uni-simple-router史上最全使用方法教程

在 uni-app 项目中&#xff0c;随着应用的复杂度增加&#xff0c;传统的路由管理方式可能无法满足需求&#xff0c;尤其是在多页面和权限控制等场景下。这时&#xff0c;使用像 uni-simple-router 这样的路由管理库可以简化开发流程&#x1f44d;&#xff0c;如权限控制、路由守…

Android SystemUI——NavigationBar导航栏(七)

前面的文章我们分析了状态栏 StatusBar 的构建流程,而导航栏 NavigationBar 其实是状态栏的一种,也是在 StatusBar 中被创建的,这里我们来看一下与其相近的导航栏 NavigationBar 的窗口的创建过程。 一、导航栏窗口 对于导航栏 NavigationBar 窗口创建,前面的流程与 Statu…

Mockito+PowerMock+Junit单元测试

一、单元测试用途 1、日常开发团队要求规范&#xff0c;需要对开发需求代码进行单元测试并要求行覆盖率达到要求&#xff0c;DevOps流水线也会开设相关门禁阀值阻断代码提交&#xff0c;一般新增代码行覆盖率80%左右。 二、Mock测试介绍 1、Mock是为了解决不同的单元之间由于…

分频器code

理论学习 数字电路中时钟占有非常重要的地位。时间的计算都依靠时钟信号作为基本单元。一般而言&#xff0c;一块板子只有一个晶振&#xff0c;即只有一种频率的时钟&#xff0c;但是数字系统中&#xff0c;经常需要对基准时钟进行不同倍数的分频&#xff0c;进而得到各模块所需…

Ubuntu上,ffmpeg如何使用cuda硬件解码、编码、转码加速

本文使用 Ubuntu 环境。Ubuntu 直接使用 APT 安装的就支持 CUDA 加速。本文使用这样下载的版本进行演示&#xff0c;你自己编译或者其他源的版本可能会不同。 ffmpeg 的一些介绍&#xff0c;以及 macOS 版本的 ffmpeg 硬件加速请见《macOS上如何安装&#xff08;不需要编译安装…

WPS计算机二级•高效操作技巧

听说这里是目录哦 斜线表头 展示项目名称&#x1f34b;‍&#x1f7e9;横排转竖排&#x1f350;批量删除表格空白行&#x1f348;方法一方法二建辅助列找空值 能量站&#x1f61a; 斜线表头 展示项目名称&#x1f34b;‍&#x1f7e9; 选中单元格&#xff0c;单击右键➡️“设…

【Linux系列】查看服务器是否使用了 SSD 的多种方法

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

unity2022以上导出到AndroidStudio后更新步骤

1、unity里面Export出unityLibrary 2、导出apk&#xff0c;里面才包含libil2cpp(新版unity无法直接导出libil2cpp 3、注释AS项目app下的build.gradle里面包含unityLibrary的代码 4、注释AS项目settings.gradle包含unityLibrary的代码 5、删除AS项目里面的unityLibrary文件夹 6、…

Bash语言的函数实现

Bash语言的函数实现 Bash&#xff08;Bourne Again SHell&#xff09;是一种流行的命令行解释器&#xff0c;用于Unix和类Unix操作系统。它不仅支持命令行操作&#xff0c;还能通过脚本语言进行编程。函数是Bash脚本编程中的一个重要概念&#xff0c;可以帮助我们组织代码、提…

挖掘机检测数据集,准确识别率91.0%,4327张原始图片,支持YOLO,COCO JSON,PASICAL VOC XML等多种格式标注

挖掘机检测数据集&#xff0c;准确识别率91.0%&#xff0c;4327张图片&#xff0c;支持YOLO&#xff0c;COCO JSON&#xff0c;PASICAL VOC XML等多种格式标注 数据集详情 数据集分割 训练组70&#xff05; 3022图片 有效集20&#xff05; 870图片 测试集10&…

Android15源码编译问题处理

最近想在Raspberry Pi5上面运行自己编译的Android15镜像,参考如下链接来处理: GitHub - raspberry-vanilla/android_local_manifest GitHub - raspberry-vanilla/android_kernel_manifest 代码同步完后,编译就出问题了,总是提示: FAILED: analyzing Android.bp files and…

【框架篇】Spring MVC 介绍及使用(详细教程)

Spring MVC 介绍 1&#xff0c;MVC 设计模式 MVC&#xff08;Model-View-Controller&#xff09;是一种常见的软件设计模式&#xff0c;用于将应用程序的逻辑分离成三个独立的组件&#xff1a; 模型&#xff08;Model&#xff09;&#xff1a;模型是应用程序的数据和业务逻辑…

Spring Boot中的自动配置原理是什么

Spring Boot 自动配置原理 Spring Boot 的自动配置机制基于 条件化配置&#xff0c;通过 EnableAutoConfiguration 注解来启用。自动配置的核心原理是 基于类路径和环境条件来推断所需要的配置&#xff0c;Spring Boot 会根据项目中引入的依赖和当前环境来自动装配相关的配置项…

管理口令安全和资源(一)

学习目标 Manage passwords using profiles: 使用配置文件&#xff08;profiles&#xff09;来管理密码。这意味着你应该能够设置和修改密码策略&#xff0c;比如密码的复杂性、有效期、尝试次数限制等。在Oracle数据库中&#xff0c;配置文件是一组可以应用于所有用户的预定义…

qt vs ios开发应用环境搭建和上架商店的记录

qt 下载链接如下 https://download.qt.io/new_archive/qt/5.14/5.14.2/qt-opensource-mac-x64-5.14.2.dmg 安装选项全勾选就行&#xff0c;这里特别说明下qt5.14.2/qml qt5.14.2对qml支持还算成熟&#xff0c;但很多特性还得qt6才行&#xff0c;这里用qt5.14.2主要是考虑到服…

windows 极速安装 Linux (Ubuntu)-- 无需虚拟机

1. 安装 WSL 和 Ubuntu 打开命令行&#xff0c;执行 WSL --install -d ubuntu若报错&#xff0c;则先执行 WSL --update2. 重启电脑 因安装了子系统&#xff0c;需重启电脑才生效 3. 配置 Ubuntu 的账号密码 打开 Ubuntu 的命令行 按提示&#xff0c;输入账号&#xff0c;密…

AI编程工具使用技巧——通义灵码

活动介绍通义灵码1. 理解通义灵码的基本概念示例代码生成 2. 使用明确的描述示例代码生成 3. 巧妙使用注释示例代码生成 4. 注意迭代与反馈原始代码反馈后生成优化代码 5. 结合生成的代码进行调试示例测试代码 其他功能定期优化生成的代码合作与分享结合其他工具 总结 活动介绍…

C#表达式和运算符

本文我们将学习C#的两个重要知识点&#xff1a;表达式和运算符。本章内容会理论性稍微强些&#xff0c;我们会尽量多举例进行说明。建议大家边阅读边思考&#xff0c;如果还能边实践就更好了。 1. 表达式 说到表达式&#xff0c;大家可能感觉有些陌生&#xff0c;我们先来举个…

在Android 15的设备上关闭edge-to-edge功能

Android 15在开发上有很多更新&#xff0c;当APP的targetSdk设置为35&#xff0c;且设备系统为Android 15时&#xff0c;APP会自动启动edge-to-edge功能。虽然可视面积变大了&#xff0c;但界面布局也会受影响。 如果要强制关闭edge-to-edge功能。可以在style.xml中将windowOp…

pycharm+pyside6+desinger实现查询汉字笔顺GIF动图

一、引言 这学期儿子语文期末考试有一道这样的题目&#xff1a; 这道题答案是B&#xff0c;儿子做错了选了C。我告诉他“车字旁”和“车”的笔顺是不一样的&#xff0c;因为二者有一个笔画是不一样的&#xff0c;“车字旁”下边那笔是“提”&#xff0c;而“车”字是“横”&am…