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

前端【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>

 

2、内联级盒子

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

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

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-startflex-endcenter

 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.kler.cn/a/506349.html

相关文章:

  • 计算机网络 (42)远程终端协议TELNET
  • 使用docker-compose安装ELK(elasticsearch,logstash,kibana)并简单使用
  • 基于 K-Means 聚类分析实现人脸照片的快速分类
  • 南京地铁路线和站点2021-2030含规划线路shp数据arcmap地铁图坐标wgs84无偏移内容分析测评
  • 【混合开发】CefSharp+Vue 解决Cookie问题
  • 算法库里的heap算法,仿函数和模版进阶(续)
  • 信安大赛-应急响应
  • 智慧城市视联网一体化平台整体解决方案(Word原件)
  • 基于binlog恢复MySQL数据
  • 在 Navicat 17 中连接 ProxySQL 的详细教程
  • 瑞芯微 RK 系列 RK3588 使用 ffmpeg-rockchip 实现 RGA 2D 图形操作硬件加速-代码版
  • idea大小写转换快捷键,及设置快捷转换格式
  • C++实现设计模式---享元模式 (Flyweight)
  • 电控管理平台
  • [Qt] QSS | Qt Designer | 选择器
  • Linux/MacOS中如何远程调试C/C++程序
  • 无公网IP 实现外网访问本地 Docker 部署 Navidrome
  • NanoKVM简单开箱测评和拆解,让普通电脑实现BMC/IPMI远程管理功能
  • Redis基础3-主从复制
  • 得物App利用技术赋能,打造潮流消费“新玩法”
  • 全面了解 Web 前端技术:从基础到实践
  • JavaScript中的`void 0`:一个古老而安全的`undefined`获取方式
  • mac m4 安装 node
  • ResNet (Residual Network) - 残差网络:深度卷积神经网络的突破
  • Three.js+Vue3+Vite物体位移、缩放与旋转(二)
  • 【MySQL】使用C语言链接