CSS“多列布局”(补充)——WEB开发系列35

多列布局是一种非常常见的布局方式,适用于内容丰富的页面,如新闻网站、杂志或博客。


一、CSS多列布局概述

CSS多列布局允许我们将内容分成多个垂直列,使页面布局更加灵活和多样化。多列布局的主要属性包括 ​​column-count​​、​​column-width​​ 和 ​​column-gap​​,这些属性可以单独或结合使用,以实现所需的列布局效果。


多列布局的基本属性

  • column-count​:指定列的数量。例如,​​column-count: 3;​​ 表示将内容分为三列。
  • column-width​:指定列的最小宽度。浏览器会根据这个宽度自动调整列数,以适应容器的宽度。
  • column-gap​:指定列与列之间的间距。可以使用像素(px)、百分比(%)等单位。

二、创建一个简单的三列布局

让我们从一个简单的三列布局示例开始。假设我们有一个包含大量文本的容器,我们希望将这些文本分成三列显示。

基本的三列布局示例

<!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 {
            column-count: 3;
            column-gap: 20px;
            padding: 20px;
            background-color: #f0f0f0;
            max-width: 800px;
            margin: 0 auto;
        }
        .container p {
            margin: 0;
            line-height: 1.6;
        }
    </style>
</head>
<body>
    <div class="container">
        <p>在书中看过一个故事。有只兔子腹部不小心被荆棘划伤,一下子就流血了。痛苦之下,它龇牙咧嘴地呻吟着。有几只路过的动物听到了,就走过来,一边同情地望着,一边安慰它。看到自己这么受重视,兔子内心非常享受。为了吸引更多的关注,它就放开嗓子,更加卖力地惨叫起来。果然围过来的动物越来越多,兔子更兴奋了,甚至还把伤口扒开,主动展示给别的动物看。结果由于没及时处理,没过一会儿,兔子就失血过多死掉了。</p>
        <p>现实中有很多像兔子那样的人,在遭遇伤痛后,到处吆喝卖惨,最终导致悲惨的结局。</p>
        <p>作家傅菲说,把伤口一次次撕开给别人看,其实是对自己的折磨。面对人生的种种不幸,懂得把伤痛藏起来,默默承担,才能疗愈自己,扭转命运。人生在世,永远不要兜售自己的苦难。</p>
    </div>
</body>
</html>

示例中我们使用 ​​column-count​​ 属性将容器的内容分为三列,使用 ​​column-gap​​ 属性设置列与列之间的间距为20px。你可以看到,文本会自动分成三列,并在列之间留有间距。


三、为多列布局添加样式

除了基本的列设置,我们还可以通过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 {
            column-count: 3;
            column-gap: 20px;
            padding: 20px;
            background-color: #f0f0f0;
            max-width: 800px;
            margin: 0 auto;
        }
        .container p {
            margin: 0;
            line-height: 1.6;
            padding: 10px;
            background-color: #fff;
            border: 1px solid #ddd;
            border-radius: 4px;
        }
        .container p:nth-child(odd) {
            background-color: #e0f7fa;
        }
        .container p:nth-child(even) {
            background-color: #f1f8e9;
        }
    </style>
</head>
<body>
    <div class="container">
         <p>在书中看过一个故事。有只兔子腹部不小心被荆棘划伤,一下子就流血了。痛苦之下,它龇牙咧嘴地呻吟着。有几只路过的动物听到了,就走过来,一边同情地望着,一边安慰它。看到自己这么受重视,兔子内心非常享受。为了吸引更多的关注,它就放开嗓子,更加卖力地惨叫起来。果然围过来的动物越来越多,兔子更兴奋了,甚至还把伤口扒开,主动展示给别的动物看。结果由于没及时处理,没过一会儿,兔子就失血过多死掉了。</p>
        <p>现实中有很多像兔子那样的人,在遭遇伤痛后,到处吆喝卖惨,最终导致悲惨的结局。</p>
        <p>作家傅菲说,把伤口一次次撕开给别人看,其实是对自己的折磨。面对人生的种种不幸,懂得把伤痛藏起来,默默承担,才能疗愈自己,扭转命运。人生在世,永远不要兜售自己的苦难。</p>
    </div>
</body>
</html>

此示例我们为每个段落添加了边框、背景色和圆角边框,并使用 ​​nth-child​​ 选择器为奇数和偶数的段落分别设置不同的背景色。这样可以使每列的内容更加突出。


四、处理列与内容折断

在实际应用中,我们可能希望控制列内的内容如何折断,以确保布局的整洁性。CSS提供了 ​​break-inside​​ 属性来处理列与内容的折断问题。


使用 ​​break-inside​​ 属性

​break-inside​​ 属性用于控制元素在多列布局中的折断行为。常见的值包括:

  • auto​:默认值,允许内容在列中折断。
  • avoid​:尽量避免在列之间折断,适用于较大的块元素,如图片或广告。
  • avoid-page​:尽量避免在页面之间折断,通常用于分页内容。

<!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 {
            column-count: 3;
            column-gap: 20px;
            padding: 20px;
            max-width: 800px;
            margin: 0 auto;
        }
        .container p {
            margin: 0;
            line-height: 1.6;
            break-inside: avoid;
            background-color: #e0f7fa;
            padding: 10px;
            border: 1px solid #ddd;
            border-radius: 4px;
        }
        .container img {
            max-width: 100%;
            height: auto;
            display: block;
            margin: 10px 0;
        }
    </style>
</head>
<body>
    <div class="container">
       
        <img src="example.jpg" alt="示例图片">
         <p>在书中看过一个故事。有只兔子腹部不小心被荆棘划伤,一下子就流血了。痛苦之下,它龇牙咧嘴地呻吟着。有几只路过的动物听到了,就走过来,一边同情地望着,一边安慰它。看到自己这么受重视,兔子内心非常享受。为了吸引更多的关注,它就放开嗓子,更加卖力地惨叫起来。果然围过来的动物越来越多,兔子更兴奋了,甚至还把伤口扒开,主动展示给别的动物看。结果由于没及时处理,没过一会儿,兔子就失血过多死掉了。</p>
        <p>现实中有很多像兔子那样的人,在遭遇伤痛后,到处吆喝卖惨,最终导致悲惨的结局。</p>
        <p>作家傅菲说,把伤口一次次撕开给别人看,其实是对自己的折磨。面对人生的种种不幸,懂得把伤痛藏起来,默默承担,才能疗愈自己,扭转命运。人生在世,永远不要兜售自己的苦难。</p>
    </div>
</body>
</html>

​break-inside: avoid;​​ 确保段落不会被分割到不同的列中。注意,​​break-inside​​ 的效果可能会因浏览器支持情况而有所不同。


五、高级应用和布局技巧

创建响应式多列布局

在响应式设计中,我们可以使用媒体查询来调整多列布局,以适应不同的屏幕尺寸。

示例:响应式三列布局
<!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 {
            column-count: 3;
            column-gap: 20px;
            padding: 20px;
            max-width: 800px;
            margin: 0 auto;
        }
        .container p {
            margin: 0;
            line-height: 1.6;
            background-color: #e0f7fa;
            padding: 10px;
            border: 1px solid #ddd;
            border-radius: 4px;
        }

        @media (max-width: 800px) {
            .container {
                column-count: 2;
            }
        }

        @media (max-width: 500px) {
            .container {
                column-count: 1;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <p>在书中看过一个故事。有只兔子腹部不小心被荆棘划伤,一下子就流血了。痛苦之下,它龇牙咧嘴地呻吟着。有几只路过的动物听到了,就走过来,一边同情地望着,一边安慰它。看到自己这么受重视,兔子内心非常享受。为了吸引更多的关注,它就放开嗓子,更加卖力地惨叫起来。果然围过来的动物越来越多,兔子更兴奋了,甚至还把伤口扒开,主动展示给别的动物看。结果由于没及时处理,没过一会儿,兔子就失血过多死掉了。</p>
        <p>现实中有很多像兔子那样的人,在遭遇伤痛后,到处吆喝卖惨,最终导致悲惨的结局。</p>
        <p>作家傅菲说,把伤口一次次撕开给别人看,其实是对自己的折磨。面对人生的种种不幸,懂得把伤痛藏起来,默默承担,才能疗愈自己,扭转命运。人生在世,永远不要兜售自己的苦难。</p>
    </div>
</body>
</html>

示例中使用媒体查询来根据屏幕宽度调整列数。当屏幕宽度小于800px时,列数变为2列;当屏幕宽度小于500px时,列数变为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>
        .container {
            column-count: 3;
            column-gap: 20px;
            padding: 20px;
            max-width: 800px;
            margin: 0 auto;
        }
        .container p {
            margin: 0;
            line-height: 1.6;
            background-color: #e0f7fa;
            padding: 10px;
            border: 1px solid #ddd;
            border-radius: 4px;
        }
        .container img {
            float: left;
            width: 30%;
            margin-right: 10px;
            margin-bottom: 10px;
        }
    </style>
</head>
<body>
    <div class="container">
        <img src="example.png" alt="示例图片1"> 
        <p>在书中看过一个故事。有只兔子腹部不小心被荆棘划伤,一下子就流血了。痛苦之下,它龇牙咧嘴地呻吟着。有几只路过的动物听到了,就走过来,一边同情地望着,一边安慰它。看到自己这么受重视,兔子内心非常享受。为了吸引更多的关注,它就放开嗓子,更加卖力地惨叫起来。果然围过来的动物越来越多,兔子更兴奋了,甚至还把伤口扒开,主动展示给别的动物看。结果由于没及时处理,没过一会儿,兔子就失血过多死掉了。</p>
        
        <img src="example2.png" alt="示例图片2">
         <p>现实中有很多像兔子那样的人,在遭遇伤痛后,到处吆喝卖惨,最终导致悲惨的结局。</p>
       
        <img src="example3." alt="示例图片3">
         <p>作家傅菲说,把伤口一次次撕开给别人看,其实是对自己的折磨。面对人生的种种不幸,懂得把伤痛藏起来,默默承担,才能疗愈自己,扭转命运。人生在世,永远不要兜售自己的苦难。</p>
    </div>
</body>
</html>

将图片设置为浮动,图片会在多列布局中和文本内容混排。浮动的图片不会影响列布局的结构,但会在列内呈现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《OpenCV计算机视觉》—— 图像轮廓检测与绘制

文章目录 一、轮廓的检测二、轮廓的绘制图像轮廓检测与绘制的代码实现 三、轮廓的近似 一、轮廓的检测 轮廓检测是指在包含目标和背景的数字图像中&#xff0c;忽略背景和目标内部的纹理以及噪声干扰的影响&#xff0c;采用一定的技术和方法来实现目标轮廓提取的过程注意:做轮…

GPS/LBS/Wi-Fi定位,全安排!—合宙Air201资产定位模组LuatOS快速入门04

经历了hello world、点灯、远程控制三期基础教程&#xff0c;小伙伴们是不是收获满满&#xff0c;期待更高阶的应用呢&#xff1f; 本期&#xff0c;我们将学习合宙Air201的核心功能之一——定位功能&#xff01; Air201定位示例教程 合宙Air201资产定位模组——是一个集成超…

TCP交互通讯在Windows中的频率

在基于TCP协议的交互式通讯中&#xff0c;通过网口进行数据传输时&#xff0c;Windows系统的通讯频率通常受到多方面的限制&#xff0c;很难稳定达到几千Hz。以下是关于频率范围的合理分析及提高频率的措施。 频率限制的原因&#xff1a; 网络延迟&#xff1a;TCP通讯的一个核心…

SpringBoot集成Thymeleaf模板引擎,为什么使用(详细介绍)

学习本技术第一件事&#xff1a;你为什么要使用&#xff0c;解决什么问题的&#xff1f; 1.为什么使用&#xff08;使用背景&#xff09;&#xff1f; 首先应用场景是单体项目&#xff0c;如果是前后端分离就不用关注这个了&#xff0c;因为单体项目你前后端都是写在一个项目…

【CTF MISC】XCTF GFSJ1086 [简单] 简单的base编码 Writeup(Base64编码+循环解码+Base92编码)

[简单] 简单的base编码 你懂base编码吗&#xff1f; 工具 在线BASE92编码解码&#xff1a;https://ctf.bugku.com/tool/base92 解法 Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSV01WbDNXa1JTVjAxV2JETlhhMUpUVmpBeFYySkVUbGhoTVVwVVZtcEJlRll5U2tWVWJHaG9UVlZ3VlZadGNFSmxSbGw1V…

MySQL详解:数据类型、约束

MySQL 1. 数据类型1.1 数值类型1.1.1 bit 位类型1.1.2 整数数据类型1.1.3 小数类型floatdecimal 1.2 字符类型1.2.1 char1.2.2 varchar 可变长字符串1.2.3 日期和时间类型datedatetimetimestamp 1.2.4 enum1.2.5 set集合查询函数 find_in_set 2. 表的约束2.1 NULL 空属性2.2 默…

《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署mongodb 7.0.14容器版副本集群》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&…

[Visual Stuidio 2022使用技巧]2.配置及常用快捷键

使用vs2022开发WPF桌面程序时常用配置及快捷键。 语言&#xff1a;C# IDE&#xff1a;Microsoft Visual Studio Community 2022 框架&#xff1a;WPF&#xff0c;.net 8.0 一、配置 1.1 内联提示 未开启时&#xff1a; 开启后&#xff1a; 开启方法&#xff1a; 工具-选…

基于微信小程序的垃圾分类(lw+演示+源码+运行)

摘 要 随着生态文明体制改革的不断推进,可持续发展的环保理念逐渐成为社会共识,而在推行环保措施的过程中却困难重重.针对生活废弃物肆意无序投放的问题,尽管目前各大城市相继推出垃圾分类强制性执行的政策法规,但因市民欠缺对垃圾种类的正确认识而导致垃圾分类的施行难度和成…

Luban策划开源工具

一、Luban游戏配置解决方案&#xff0c;是一个强大、易用、优雅、稳定的游戏配置解决方案。它设计目标为满足从小型到超大型游戏项目的简单到复杂的游戏配置工作流需求。luban标准化了游戏配置开发工作流&#xff0c;可以极大提升策划和程序的工作效率。 二、核心特性&#xf…

【代码随想录训练营第42期 Day58打卡 - 图论Part8 - 拓扑排序

目录 一、拓扑排序介绍 定义 特点 实现方法&#xff08;2种&#xff09; 应用 二、题目与题解 题目&#xff1a;卡码网 117. 软件构建 题目链接 题解&#xff1a;拓扑排序 - Kahn算法&#xff08;BFS&#xff09; 三、小结 一、拓扑排序介绍 对于拓扑排序&#xff0c…

攻防世界 ics-05

ics-05 隐藏的变量传参&#xff0c;php弱类型比较 只有设备维护中心可以点击进去 查看源码&#xff0c;发现有个隐藏的超链接变量传参 看到变量传参&#xff0c;有可能存在文件包含漏洞读取源码&#xff0c;这个站是php的站&#xff0c;所以可以使用php伪协议读取源码 index.p…

Web 原生组件化方案:Web Components

你好&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 Web 组件化是一种将Web应用的UI部分拆分成可复用的独立组件的架构方法。这种方法有助于提高代码的可维护性、可重用性和可测试性。 而Web Components 标准则提供了一套原生的API&#xff0c;允许开发者创建…

IDEA 通义灵码 插件使用体验

目录 前言 主要功能 演示代码 解释代码 生成单元测试 生成代码注释 生成优化建议 代码片段补全 总结 前言 自从 AI 技术开始大规模应用&#xff0c;老板就想让下面的牛马借助 AI 工具来提高编码效率&#xff0c;由于团队都没有在实际编码中深度使用过 AI 工具&#x…

视频推拉流/直播点播EasyDSS平台安装失败并报错“install mediaserver error”是什么原因?

TSINGSEE青犀视频推拉流/直播点播EasyDSS平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务&#xff0c;在应用场景中可实现视频直播、点播、转码、管理、录像、检索、时移回看等。此外&#xff0c;平台还支持用户自行上传视频文件&#xff0c;也可…

【物联网技术大作业】设计一个智能家居的应用场景

前言&#xff1a; 本人的物联网技术的期末大作业&#xff0c;希望对你有帮助。 目录 大作业设计题 &#xff08;1&#xff09;智能家居的概述。 &#xff08;2&#xff09;介绍智能家居应用。要求至少5个方面的应用&#xff0c;包括每个应用所采用的设备&#xff0c;性能&am…

【深度学习】神经网络-怎么分清DNN、CNN、RNN?

怎么分清DNN、CNN、RNN&#xff1f; 最“大”的概念是人工神经网络&#xff08;Artificial Neural Network, ANN&#xff09;&#xff0c;它是较为广泛的术语&#xff0c;通常指的是一类模拟生物神经网络的数学模型&#xff0c;其中包括神经元、权重和连接。在这个术语下&#…

【Redis】主从复制 - 源码

因为主从复制的过程很复杂, 同时核心逻辑主要集中在 replication.c 这个文件中, 避免篇幅过大, 所以将主从复制中涉及这个文件的代码集中到了另一篇文章。 在当前文章主要分析主从复制的大体代码逻辑, 如果需要了解整体的过程, 可以配合 Redis 主从复制 - relication 源码分析 …

iOS 知识点记录

王巍 博客地址&#xff1a;OneVs Den git地址&#xff1a;onevcat (Wei Wang) GitHub 江湖人称喵神&#xff0c;目前就职于line。喵神的博客涉及方面比较广, 有Obejctive-C, Swift, SwiftUI, Unity等等。博客内容很有深度&#xff0c;非常值得关注。 戴铭 博客地址&#xff1…

ESP32-WROOM-32 开篇(刚买)

简介 买了一个ESP32-WROOM-32模块的开发板, 记录板初上机细节。 模块简介 Look 连接PC 1. 解决驱动问题 https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tabdownloads 下载驱动, 如下图 解压缩下载的包&#xff0c; 然后电机64位的版本&#xff0c; 一直…