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

ops/2025/1/18 15:26:02/

盒子分类

1、块级盒子

2、内联级盒子

3、内联块级盒子

4、弹性盒子 

5、盒子内部分区

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

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

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

1、父级属性:

 2、子级属性:

示例:


往期文章:

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

盒子分类

1、块级盒子

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

css"><!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>

 

2、内联级盒子

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

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

3、内联块级盒子

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

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

 

4、弹性盒子 

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

css"><!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的值来改变其样式,其代码如下:

css">*{              /*通用选择器,选择所有元素*/margin:0;  /*外边距清0*/padding:0; /*内边距清0*/
}
css"><!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. 移除换行符:将子元素标签紧贴书写。
    css"><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-startflex-endcenter

 2、子级属性

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

示例:

css">/* 父容器 .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.ppmy.cn/ops/151123.html

相关文章

K8S 亲和性与反亲和性 深度好文

今天我们来实验 pod 亲和性。官网描述如下&#xff1a; 假设有如下三个节点的 K8S 集群&#xff1a; k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、镜像准备 1.1、镜像拉取 docker pull tomcat:8.5-jre8-alpine docker pull nginx…

node.js卸载与安装超详细教程

文章目录 一、卸载Step1&#xff1a;通过控制面板删除node版本Step2&#xff1a;删除node的安装目录Step3&#xff1a;查找.npmrc文件是否存在&#xff0c;有就删除。Step4&#xff1a;查看以下文件是否存在&#xff0c;有就删除Step5&#xff1a;打开系统设置&#xff0c;检查…

1.15寒假作业

web&#xff1a;nss靶场ez_ez_php 打开环境&#xff0c;理解代码 使用个体传参的方法&#xff0c;首先代码会检查file参数的前三个字符是不是php&#xff0c;如果是就输出nice&#xff0c;然后用include函数包含file&#xff0c;绕过不是则输出hacker&#xff0c;如果没有file…

Cadence笔记--原理图导入PCB

1、以PMU6050为例&#xff0c;首先在原理图双击PMU6050器件&#xff0c;在PCB_Footprint目录填写PCB封装名称并且保存&#xff0c;如下图所示&#xff1a; 2、确保原理图命名的名称不一样&#xff0c;否则会出错&#xff0c;这里PMU6050更改了NC等名称&#xff0c;如下图所示&a…

挖掘机检测数据集,准确识别率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&…

python学习笔记(PPT+代码)

访问官网&#xff1a;Welcome to Python.org 参考&#xff1a; Python安装与环境配置全程详细教学&#xff08;包含Windows版和Mac版&#xff09;_windows python环境配置-CSDN博客 最后在控制台输入python验证版本即可&#xff0c;不知道系统的可以再控制台输入systeminfo来查…

Kubernetes 集群中安装和配置 Kubernetes Dashboard

安装 Dashboard教程 上两篇文章已经成功部署了Kubernetes的集群&#xff0c;这篇来介绍安装Dashboard。Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中&#xff0c;也可以对容器应用排错&#xff0c;还能管理集群资源…

【数据结构】人生如栈

我在思考一个很有意思的事情就是假如我们的人生可以修改的话他应该是一个“栈” 的数据结构&#xff0c;而不是链表或者其他&#xff0c;因为我们的人生如果改了一个地方&#xff0c;肯定不能从中间的某一个时间开始改&#xff0c;那后面的结果都会变&#xff0c;所以它应该是类…