CSS开发技巧(四):解决flex多行布局的行间距异常、子元素高度拉伸问题

2023-11-10

在使用flex布局时,若出现换行,有两种较为特殊的现象是值得我们研究的:

  • 子元素高度被拉伸,其实际高度大于它的内容高度。
  • 各行子元素之间的行间距过大,甚至我们根本没有给子元素设置margin。

现在我们将要探究引发这两种现象的原因及解决方案。

一、子元素高度拉伸问题
  • 原因:没有明确声明子元素的高度。
  • 现象:子元素高度没有明确声明时,若容器有纵向空余高度,各行子元素将均分空余高度。
  • 解决方案:明确声明各子元素的高度。
  • 特别说明:不换行也会均分,与行数无关。
  • 案例:(可直接运行)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .container {
            margin: 0 auto;
            display: flex;
            flex-wrap: wrap;
            height: 600px;
            width: 800px;
            border: 1px solid red;
        }
        .item{
            margin-right: 20px;
            margin-bottom: 20px;
            width: 200px;
            background-color: green;
        }
        .item-content{
            height: 200px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">
            <div class="item-content"></div>
        </div>
        <div class="item">
            <div class="item-content"></div>
        </div>
        <div class="item">
            <div class="item-content"></div>
        </div>
        <div class="item">
            <div class="item-content"></div>
        </div>
        <div class="item">
            <div class="item-content"></div>
        </div>
        <div class="item">
            <div class="item-content"></div>
        </div>
    </div>
</body>
</html>

在以上案例中,每个.item元素的内容高度由.item-content撑起来,为200px,实际高度却为280px。这是由于我们没有显式声明.item元素的高度,采用flex多行布局并且容器有空余,那么各行子元素将均分容器的剩余高度,可采用给.item设置height为200px来解决该问题

二、行间距异常问题
  • 原因:没有明确声明各行元素的纵向排列方式。
  • 现象:默认情况下,若容器有纵向空余高度,且子元素高度已显示声明,那么各行将出现额外行间距,且每两行的行间距相等
  • 解决方案:设置align-content属性。
  • 特别说明:不换行也会均分,与行数无关。
  • 案例:(可直接运行)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .container {
            margin: 0 auto;
            display: flex;
            flex-wrap: wrap;
            /* align-content: flex-start; */
            height: 600px;
            width: 800px;
            border: 1px solid red;
        }
        .item{
            margin-right: 20px;
            margin-bottom: 20px;
            height: 200px;
            width: 200px;
            background-color: green;
        }
        .item-content{
            height: 200px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">
            <div class="item-content"></div>
        </div>
        <div class="item">
            <div class="item-content"></div>
        </div>
        <div class="item">
            <div class="item-content"></div>
        </div>
        <div class="item">
            <div class="item-content"></div>
        </div>
        <div class="item">
            <div class="item-content"></div>
        </div>
        <div class="item">
            <div class="item-content"></div>
        </div>
    </div>
</body>
</html>

在以上案例中,我们希望各行的行间距是我们设置的margin-bottom的值20px,那么我们只需给容器设置align-content: flex-start;即可。这将使得各行紧密排列,剩余空间都到了容器的底部。更多的排列方式可查阅align-content文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSS开发技巧(四):解决flex多行布局的行间距异常、子元素高度拉伸问题 的相关文章

  • 将 Bootstrap 导航栏列表项包裹在居中的品牌图像周围

    我整晚都在搞乱这个问题 没有解决办法 我正在使用 bootstrap 2 32 对于 joomla 模板 尚不支持 BS3 并且我将拥有动态数量的列表项 我需要将列表项居中 但也同样包裹在中心 brand img 的左侧和右侧 我可以把它分
  • 使用 Node-sass 缩小 CSS

    我在 NodeJS 项目中使用 SCSS 并让我的脚本使用以下命令将所有单独的 SCSS 文件转换为单个 CSS 文件 node sass w public css scss style scss public css style css
  • 使用 css 模块如何定义全局类

    我正在使用 css 模块 但是我在组件中使用的一个用 JavaScript 附加推文的库向我的组件添加了一些元素 结构如下 div class user div div class tweet div 我现在想在组件的 css 模块中设置这
  • 如何使 superfish 下拉菜单响应式?

    我正在使用带有骨架框架的 superfish 下拉菜单 我希望它也能在手机上运行 默认情况下 它显示下拉项目 但它将鼠标悬停在其下方的项目上 我想以某种方式拥有它 以便它将父项推到它下面 有什么解决办法吗 这是一个更好的答案 我能够将 Su
  • Safari 中透明颜色会发生什么情况?

    有一个块 其中接近末尾的文本逐渐消失 这是使用以下方法完成的 after 给定linear gradient从透明色到背景色 最近注意到 在当前版本的浏览器中 除了 safari 之外 一切都很好 在第 11 版中 情况太糟糕了 Autop
  • 如何在 html 中设置 alt 工具提示的样式? [复制]

    这个问题在这里已经有答案了 是否可以为 alt 属性设置工具提示的样式 我希望为 html 设置背景 字体颜色等样式alt属性 有人可以帮我解决这个问题吗 您无法设计默认的工具提示 即设置样式alt属性 但你可以使用 Javascript
  • 找不到模块:您尝试导入位于项目 src/ 目录之外的模块。不支持 src/ 之外的相对导入

    我刚刚开始React JS 但是我遇到了一个问题 尽管我进行了研究 但我无法得到结果 我尝试了很多方法 但我一直无法解决这个问题 你能帮忙吗 这是我在终端收到的错误 src App css node modules react script
  • 背景大小:封面在 Google Chrome 中突然停止工作?

    还有其他人有这个问题吗 我以创建网站为生 有些网站使用了 css 属性background size cover 大约 1 周前突然间 所有具有此属性的网站都不再在 Google Chrome 中正确显示 所有其他浏览器都工作正常 还有其他
  • CSS 中“body > *”是什么意思?

    我试图了解 jQTouch 实现的 CSS 效果 http www jqtouch com http www jqtouch com 它有一些 CSS 定义 其中包含如下语法body gt body gt webkit backface v
  • 支持 IE 中的“border-radius”

    有谁知道 Internet Explorer 是否 何时支持 border radius CSS 属性 是的 2011 年 1 月 IE9 发布时 假设您希望所有四个边均为 15px myclass border style solid b
  • 如何解决输入字段上的错误行高?

    如何为具有固定高度的输入字段提供其所包含文本的跨浏览器垂直对齐方式 截至目前看来line height是我最好的选择 但是 在 Chrome 或 Safari 等 webkit 浏览器上 复制 粘贴时光标会跳至顶部对齐 我注意到 WordP
  • CSS:100% 宽度和背景?

    在我的页面中 有 2 3 个部分的宽度和背景为 100 当我全屏打开它时 一切正常 但当屏幕小于 960px 本节内容的宽度 时 背景图像不是整个页面 右侧的瞬间隐藏在没有背景的地方 它是白色的 你可以在这里明白我的意思 http mico
  • 用左div填充剩余空间

    谁能告诉我如何让左侧 div 填充剩余空间 而不固定右侧 div 大小 我想要与以下示例完全相反的内容 left float left border 1px solid blue right overflow hidden border 1
  • 如何使用CSS更改iframe的src

    我有这段代码 并且不知道如何制作它 因此当我单击 菜单 中的项目时 不会重定向到其他页面 而是更改 iframe 的 src 我应该更改 Code
  • 如何为文本添加发光效果?

    我还没有真正找到任何好的简单的动画发光效果教程 如何为文本设置发光动画 如果您只想使用 CSS3 您甚至不必使用任何 jQuery JavaScript 只需在 CSS 中执行以下操作 confirm selection webkit tr
  • window.alert() 之后无法编辑输入文本字段

    我有这个 Electron 应用程序 使用 NodeJS Bootstrap AngularJS 其中包含一些可以编辑的文本输入字段 我有一个触发 window alert 的按钮 触发后 文本输入字段将不再可编辑 单击应用程序的其他元素不
  • 如何创建具有动态数量的网格列的 TailwindCSS 网格?

    我正在使用 Vue3 和 TailwindCSS 并希望创建一个具有动态的网格grid cols n 班级 我知道 TailwindCSS 默认情况下最多支持 12 列 但我无法自定义主题 因为列的数量完全是动态的 给出以下纯 HTML J
  • 使用 div 标签定位元素

    div class HeaderLink div class HeadPanelElement a href Blog a div div
  • 如何在一个元素上实现多个 CSS 过渡?

    这是一个非常简单的问题 但我找不到关于 CSS 转换属性的很好的文档 这是 CSS 片段 nav a text transform uppercase text decoration none color d3d3d3 line heigh
  • 通过使用 Jquery 添加类来触发 CSS3 转换

    目前我有一个正在运行的小提琴 当我向它添加一个类时 我试图让 css3 不透明过渡触发 基本设置是我单击一个按钮 然后通过 jquery 添加一个 div 到 dom 然后将该元素添加到 dom 然后向其中添加一个类 向该新 dom 元素添

随机推荐

  • Feign简介与简单应用

    一 点睛 Feign是Netflix开发的声明式 模板化的HTTP客户端 Feign可以帮助我们更快捷 优雅地调用HTTP API 在Spring Cloud中 使用Feign非常简单 创建一个接口 并在接口上添加一些注解 代码就完成了 F
  • 注册小鲸鱼88888专用网站

    点击注册充值即可 高效不限速 不限设备 注意这里的地址并没有错 只是你需要想办法正确能进入就行 懂的大佬一定知道用一定的方法访问的 有问题的话可以邮箱 grantwtt 163 com
  • Warning: failed to get default registry endpoint from daemon

    操作系统 CentOS 7 执行命令 docker info docker search docker pull 执行用户 非root 有sudo权限 Docker报错 1 报错现象及原因 2 其它报错 3 配置docker开机自启动 1
  • FFmpeg进阶: 音频变声滤镜

    声音最重要的两个元素就是语速和语调 改变声音的辨识度主要也是从这两方面入手 我们可以通过对音频数据进行插值或者抽值修改 以达到降低语速和增加语速的目的 同时我们也可以通过对数据进行线性拉伸来调节音调 语速调整 语调调整 就可以让我们的声音千
  • QtCreator编译 fatal error: Killed signal terminated program cc1plus问题解决

    原因 编译器消耗的内存超过了系统的限制 强制停止了 解决方式 减少编译时进程数量 make j4
  • 数学建模 层次分析法 python计算权重

    这里用python语言来计算判断矩阵的权重 网上大部分是matlab语言 里面也包含一致性检验的函数 具体各函数使用方法详见代码注释的部分 import numpy as np a np array 1 1 4 2 1 3 4 1 8 2
  • ==和equals的区别

    1 在八种基本类型中 比较的是值的本身 eg public class Damo2 public static void main String args int str 10 int str1 10 System out println
  • ROS navigation的学习和分析

    ROS navigation功能包简单来说就是输入传感器信息和机器人位姿 通过导航算法输出机器人的速度控制指令实现机器人的2D路径规划 贴出代码库 navigation github官方仓库 以下是ROS官方的文档 navigation官方
  • avue-crud 组件,form中实现树形下拉框联动输入框数据,省市区字典联动

    1 需要实现的功能是 当我选择一条数据的时候 后面几个输入框会自动带入 使用的是avue crud组件 参数配置
  • 数据结构--环形队列的介绍与实现

    数据结构 环形队列实现 一 环形队列实现原理 环形队列的几个判断条件 二 代码实现 1 环形队列类 CircleQueue 2 环形队列类测试类 3 程序运行结果 4 完整代码 环形队列可以用数组实现 也可以使用循环链表实现 在使用数组实现
  • 2023前端面试题总结(vue,react)

    Vue 1 MVC与MVVM的区别 MVC和MVVM的区别并不是VM完全取代了C ViewModel存在目的在于抽离Controller中展示的业务逻辑 而不是替代Controller 其它视图操作业务等还是应该放在Controller中实
  • Vue-条件渲染和循环渲染

    文章目录 条件渲染 循环渲染 条件渲染 条件渲染指令是用来辅助开发者控制DOM的显示与隐藏 条件渲染指令有如下两个 分别是 v show和v if v show和v if的区别 v show是通过动态的为元素添加或移除display non
  • 【计算机视觉】ViT:Vision Transformer 讲解

    有任何的书写错误 排版错误 概念错误等 希望大家包含指正 在阅读本篇之前建议先学习 自然语言处理 Attention 讲解 自然语言处理 Transformer 讲解 自然语言处理 BERT 讲解 ViT Vision Transforme
  • 眼光独到便能发现刷脸支付带来的商机

    2020年 属于扫码支付的时代已经过去 刷脸支付时代悄然而至 在5G和数字化时代的引领下 刷脸支付将充满无限可能 率先发现商机并加入刷脸支付的人 可以早日占据移动支付刷脸支付市场的一片天空 在现金支付还是主流的时代 人们对扫码支付的概念十分
  • 坦克大战JAVA程序(韩顺平老师)

    坦克大战java程序 目前程序完成的功能 1 打开游戏选择继续上一局游戏还是重新开始 2 页面打开后有一段背景音乐 增加体验感 3 页面显示击毁的敌方坦克数量 4 玩家坦克由wasd键控制方向 j键控制射击 敌方坦克被击中后 出现爆炸效果
  • Codeforces Round #752 (Div. 2) C. Di-visible Confusion (思维暴力))

    题解 根据题意如果2 i 1范围内没法整除就删掉嘛 所以这题其实最多暴力前100就行 证明 因为如果前100有不能整除的 那么这个数一定可以删掉 但是如果前100都能被整除 也就是前100每个数都是这个数的因子 那么这个数就太大了绝对超过了
  • 力扣简单算法题

    简单题 一分类 数组 1 两数之和 哈希表 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出 和为目标值 target 的那 两个 整数 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同
  • 数据结构作业:时间复杂度和二叉树

    计算时间复杂度 int x 0 i j 1 for i 1 i
  • 小程序可以通过以下几种方式下发消息

    1 模板消息 小程序可以通过模板消息向用户发送通知 例如订单状态更新 活动提醒等 开发者需要先在小程序后台设置好模板消息 并获取到模板消息的模板ID 然后在代码中调用相应的API 将模板消息的内容填充并发送给用户 以下是一个示例代码 用于发
  • CSS开发技巧(四):解决flex多行布局的行间距异常、子元素高度拉伸问题

    在使用flex布局时 若出现换行 有两种较为特殊的现象是值得我们研究的 子元素高度被拉伸 其实际高度大于它的内容高度 各行子元素之间的行间距过大 甚至我们根本没有给子元素设置margin 现在我们将要探究引发这两种现象的原因及解决方案 一