进一步了解CSS布局——WEB开发系列29

news2024/9/22 11:32:35

CSS 页面布局技术允许我们拾取网页中的元素,并且控制它们相对正常布局流、周边元素、父容器或者主视口/窗口的位置。


一、正常布局流(Normal Flow)

CSS的布局基础是“正常流”,也就是页面元素在没有特别指定布局方式时的默认排列方式。正常流分为两种主要类型:

  1. 块级元素:默认情况下,块级元素会独占一行,并且从上到下排列。常见的块级元素有​​<div>​​、​​<p>​​、​​<h1>​​、​​<ul>​​等。
  2. 行内元素:行内元素不会独占一行,它们会在一行内从左到右排列,直到空间不足再换行。常见的行内元素有​​<span>​​、​​<a>​​、​​<img>​​等。

举个简单的例子:

<div>
  <p>这是一个段落。</p>
  <p>这是另一个段落。</p>
</div>

两个段落​​<p>​​都是块级元素,它们会按照正常流的规则垂直排列。而且,即使你在​​<p>​​​标签之间加入了许多空格,段落依然会在页面中按照垂直方向排列。


二、Display属性

​display​​属性决定了元素的布局行为。最常见的​​display​​值包括​​block​​、​​inline​​、​​inline-block​​、​​none​​以及我们将在后文讨论的​​flex​​和​​grid​​。

  1. block:将元素定义为块级元素,使其独占一行。
  2. inline:将元素定义为行内元素,使其在行内排列。
  3. inline-block:结合了​​block​​和​​inline​​的特性,元素本身是行内元素,但可以设置宽高等属性。
  4. none:完全隐藏元素,元素不占据任何空间。

一个例子展示了这些不同的​​display​​​值的效果:

<div style="display: block;">这是一个块级元素</div>
<span style="display: inline;">这是一个行内元素</span>
<div style="display: inline-block; width: 100px;">这是一个inline-block元素</div>

​display​​​属性是理解CSS布局的基础,它控制了元素在页面上的布局行为。


三、弹性盒子(Flexbox)

弹性盒子(Flexbox)是CSS3引入的一种布局模式,用来为不同尺寸的屏幕设计复杂的布局。通过设置​​display: flex;​​,你可以将一个容器变成弹性容器(Flex container),而其内部的子元素则成为弹性项(Flex items)。


1. 设置 ​​display: flex;​

将父元素设置为​​display: flex;​​​后,子元素将自动按照水平(默认)或垂直方向排列,并且能够灵活调整大小以适应容器。

<div style="display: flex;">
  <div style="background-color: lightblue;">Item 1</div>
  <div style="background-color: lightgreen;">Item 2</div>
  <div style="background-color: lightcoral;">Item 3</div>
</div>

三个子元素在同一行水平排列,因为默认情况下​​flex-direction​​是​​row​​。


2. 设置 ​​flex​​ 属性

​flex​​属性是弹性盒子的核心,用于设置弹性项如何在弹性容器中分配空间。它通常写作​​flex: 1;​​、​​flex: 2;​​​等,表示子元素在容器中所占的相对比例。

<div style="display: flex;">
  <div style="flex: 1; background-color: lightblue;">Item 1</div>
  <div style="flex: 2; background-color: lightgreen;">Item 2</div>
  <div style="flex: 1; background-color: lightcoral;">Item 3</div>
</div>

​Item 2​​占据的空间是​​Item 1​​和​​Item 3​​​的两倍。


3. 弹性盒子布局的其他属性

  • justify-content​:控制弹性项在主轴(默认水平轴)上的对齐方式。常见值有​​flex-start​​(左对齐)、​​center​​(居中)、​​space-between​​(两端对齐,间隔均匀)等。
  • align-items​:控制弹性项在交叉轴(默认垂直轴)上的对齐方式。常见值有​​stretch​​(拉伸)、​​center​​(居中)、​​flex-start​​​(顶部对齐)等。
<div style="display: flex; justify-content: space-between; align-items: center;">
  <div style="background-color: lightblue;">Item 1</div>
  <div style="background-color: lightgreen;">Item 2</div>
  <div style="background-color: lightcoral;">Item 3</div>
</div>

上面的代码展示了如何通过​​justify-content​​和​​align-items​​​控制子元素的排列方式。


四、Grid布局

Grid布局是CSS的一种二维布局系统,可以非常轻松地创建复杂的网页布局。与Flexbox相比,Grid布局能够同时控制行和列。

1. 设置 ​​display: grid;​

通过设置​​display: grid;​​​,你可以将一个容器变成网格容器(Grid container),并在其中定义行和列。

<div style="display: grid; grid-template-columns: 100px 100px 100px; grid-template-rows: 100px 100px;">
  <div style="background-color: lightblue;">Item 1</div>
  <div style="background-color: lightgreen;">Item 2</div>
  <div style="background-color: lightcoral;">Item 3</div>
  <div style="background-color: lightpink;">Item 4</div>
</div>

网格容器被定义为三列两行,每个单元格大小为100px。子元素将自动填充这些网格单元。


2. 在网格内放置元素

你可以通过​​grid-column​​和​​grid-row​​​属性来指定元素在网格中的位置。

<div style="display: grid; grid-template-columns: 100px 100px 100px; grid-template-rows: 100px 100px;">
  <div style="background-color: lightblue; grid-column: 1 / 3; grid-row: 1 / 2;">Item 1</div>
  <div style="background-color: lightgreen;">Item 2</div>
  <div style="background-color: lightcoral;">Item 3</div>
  <div style="background-color: lightpink;">Item 4</div>
</div>

此例中,​​Item 1​​​占据了网格的前两列和第一行。


3. Grid布局的其他属性

  • gap​:设置网格单元格之间的间隔。
  • grid-template-areas​​:定义命名网格区域,可以用于创建更语义化的布局。
<div style="display: grid; grid-template-columns: 1fr 1fr 1fr; grid-template-areas: 
  'header header header'
  'sidebar content content'
  'footer footer footer';">
  <div style="grid-area: header; background-color: lightblue;">Header</div>
  <div style="grid-area: sidebar; background-color: lightgreen;">Sidebar</div>
  <div style="grid-area: content; background-color: lightcoral;">Content</div>
  <div style="grid-area: footer; background-color: lightpink;">Footer</div>
</div>

通过​​grid-template-areas​​​,我们创建了一个包含头部、侧边栏、内容区和底部的布局。


五、浮动(Float)

浮动是CSS中的一个经典布局方法,用于将元素从正常流中移出,并使其在父容器内左右浮动。通过设置​​float: left;​​或​​float: right;​​​,可以使元素分别浮动到父容器的左侧或右侧。

<div style="overflow: hidden;">
  <img src="image.jpg" style="float: left; margin-right: 20px;">
  <p>这是一个浮动示例,图片将浮动到左侧,文本将围绕在图片周围。</p>
</div>

在这个例子中,图片浮动到左侧,文本则环绕在图片右侧。

需要注意的是,浮动元素之后的内容通常会出现“塌陷”问题,即元素的父容器高度会变为0。解决方法是在浮动元素之后使用清除浮动(clear)技术:

.clearfix::after {
  content: "";
  display: table;
  clear: both;
}

使用​​.clearfix​​​类可以确保父容器包裹住浮动的子元素。


六、定位技术(Position)

CSS定位是通过设置​​position​​属性来改变元素在文档中的位置。主要的定位方式包括:


1. 简单定位示例

简单的定位属性包括​​static​​(默认)、​​relative​​、​​absolute​​、​​fixed​​和​​sticky​​。

<div style="position: relative; top: 20px; left: 30px;">
  这是一个相对定位的元素
</div>


2. 相对定位(Relative)

相对定位使元素相对于其正常位置进行移动。它不会影响文档流中其他元素的布局。

<div style="position: relative; top: 10px; left: 15px;">
  这是一个相对定位的元素
</div>

元素相对于其原始位置向下移动了10px,向右移动了15px。


3. 绝对定位(Absolute)

绝对定位的元素相对于最近的已定位祖先元素进行定位(如果没有,则相对于初始包含块)。绝对定位的元素脱离了文档流,不会影响其他元素的布局。

<div style="position: relative;">
  <div style="position: absolute; top: 0; right: 0;">
    这是一个绝对定位的元素
  </div>
</div>

内部的绝对定位元素相对于其父元素的右上角进行定位。


4. 固定定位(Fixed)

固定定位的元素相对于浏览器窗口进行定位,即使页面滚动,元素也会保持在固定位置。

<div style="position: fixed; bottom: 0; right: 0;">
  这是一个固定定位的元素
</div>

一个固定在浏览器窗口右下角的元素,即使页面滚动,它的位置也不会改变。


5. 粘性定位(Sticky)

粘性定位结合了相对定位和固定定位的特点,当元素在页面中滚动到一定位置时,会“粘”住并保持在该位置。

<div style="position: sticky; top: 0; background-color: yellow;">
  这是一个粘性定位的元素
</div>

当页面滚动时,元素会在到达顶部时固定在顶部。


七、表格布局

表格布局是一种老式但仍然有效的布局方式,特别适用于展示结构化数据。表格布局使用​​<table>​​、​​<tr>​​、​​<td>​​等标签定义行和列。

<table border="1">
  <tr>
    <th>姓名</th>
    <th>年龄</th>
  </tr>
  <tr>
    <td>张三</td>
    <td>28</td>
  </tr>
  <tr>
    <td>李四</td>
    <td>24</td>
  </tr>
</table>

上述示例如何使用表格布局来展示数据。


八、多列布局

多列布局(Multi-column Layout)是一种将内容分为多个列的布局方式,类似于报纸的排版。通过​​column-count​​和​​column-width​​等属性,可以轻松实现多列布局。

<div style="column-count: 3; column-gap: 20px;">
  这是一个多列布局的示例。通过使用CSS的多列布局属性,我们可以将内容分为多个列。
  这种布局方式非常适合用于展示较长的文本内容,如新闻文章或博客文章。
</div>

文本被分成了三列,并且列与列之间有20px的间隔。


九、CSS布局综合练习题

为了更好地理解这些布局技术,我们来看看两个综合练习题,并提供相应的代码示例。

题1:创建一个三栏布局

使用Flexbox创建一个响应式三栏布局,其中左栏和右栏固定宽度,中间栏自适应剩余空间。

<div style="display: flex;">
  <div style="flex: 0 0 200px; background-color: lightblue;">左栏</div>
  <div style="flex: 1; background-color: lightgreen;">中间栏</div>
  <div style="flex: 0 0 200px; background-color: lightcoral;">右栏</div>
</div>


题2:创建一个简单的网格布局

使用Grid布局创建一个三行三列的网格,其中第一行的两个单元格合并为一个单元格,第三行的三个单元格合并为一个单元格。

<div style="display: grid; grid-template-columns: repeat(3, 1fr); grid-gap: 10px;">
  <div style="grid-column: span 2; background-color: lightblue;">合并两个单元格</div>
  <div style="background-color: lightgreen;">单元格2</div>
  <div style="background-color: lightcoral;">单元格3</div>
  <div style="background-color: lightpink;">单元格4</div>
  <div style="grid-column: span 3; background-color: lightgray;">合并三个单元格</div>
</div>


如有表述错误及欠缺之处敬请指正补充。 

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

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

相关文章

OPenCV结构分析与形状描述符(3)计算一个点集的最小外接矩形的函数boundingRect()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算一个点集的最小右上边界矩形或灰度图像中的非零像素。 该函数计算并返回指定点集或灰度图像中非零像素的最小右上边界矩形。 在OpenCV中&am…

[项目][CMP][项目介绍及知识铺垫]详细讲解

目录 1.这个项目做的是什么&#xff1f;2.此项目涉及知识面3.什么是内存池&#xff1f;1.池化技术2.内存池3.内存池主要解决的问题 4.理解malloc 1.这个项目做的是什么&#xff1f; 实现一个高并发内存池&#xff0c;参考原型为Google的一个开源项目tcmalloc(Thread-Caching M…

61、Python之函数高级:为函数添加方法,实现属性可变的装饰器

引言 今天文章的标题&#xff0c;初读起来可能有些拗口&#xff0c;什么叫“为函数添加方法”&#xff1f;但是&#xff0c;如果真正对“Python函数也是对象”这个理念有清晰的理解的话&#xff0c;其实&#xff0c;也是不难理解的&#xff0c;本质上就是给一个对象新增一个自…

通用代码生成器还可以这么用,将MariaDB数据库连数据迁徙到PostgreSQL

通用代码生成器是一种非常方便的软件开发工具&#xff0c;除了简单直接的生成代码&#xff0c;制作快速原型以外。通用代码生成器还可以应用在各种场景上。比如可以使用通用代码生成器&#xff0c;将MariaDB数据库连数据迁徙到PostgreSQL。操作并不复杂&#xff0c;却十分适用。…

【学习笔记】SSL证书之混合加密(Hybrid Encryption)与签名(Signatures)

1、非对称密钥对可以用来进行加密&#xff08;Confidentiality保密性&#xff09; 举个栗子&#xff0c;现在有2个人&#xff0c;Pam和Jim&#xff0c;两人之间需要通过非对称密钥对来给另一方发送数据。Pam通过某种途径将公钥分享给Jim&#xff0c;两人都各自保存着自己的私钥…

算法打卡 Day29(回溯算法)-复原 IP 地址 + 子集 + 子集 Ⅱ

文章目录 Leetcode 93-复原 IP 地址题目描述解题思路 Leetcode 78-子集题目描述解题思路 Leetcode 90-子集 Ⅱ题目描述解题思路 Leetcode 93-复原 IP 地址 题目描述 https://leetcode.cn/problems/restore-ip-addresses/description/ 解题思路 这是一道切割问题&#xff0c;…

【ShuQiHere】“初识人工智能:智能机器的基础入门”

1.1. 引言 (Introduction) &#x1f9e0;&#x1f916; 人工智能&#xff08;Artificial Intelligence, AI&#xff09; 是计算机科学的一个分支&#xff0c;目标是让计算机或机器具备像人类一样的智能。自计算机发明以来&#xff0c;计算机执行各种任务的能力呈指数增长。随着…

思科IP访问控制列表2

#网络安全技术实现# #任务二标准访问控制列表的控制2# #1配置计算机的IP 地址、子网掩码和网关 #2配置Router-A的主机名称和接口IP地址 Router>enable Router#config t Router(config)#hostname Router-A Router-A(config)#int g0/0 Router-A(config-if)#ip add 192.1…

iKun主页 最新2.0版本 无需数据库 带页面音乐版本~

源码介绍 iKun主页 最新2.0版本 无需数据库 带页面音乐版本~ 无需数据库&#xff0c;没有后台 记事本修改里面的内容即可 效果预览 源码获取 iKun主页 最新2.0版本 无需数据库 带页面音乐版本~

Seataf分布式事务的使用

一、事务的四大特征&#xff08;面试题&#xff09; 原子性&#xff1a;一个事务是不可分割的&#xff0c;要不都做&#xff0c;要不都不做一致性&#xff1a;事务必须是使数据库从一个一致性变成另一个一致性状态隔离性&#xff1a;一个事务的执行不被其他事务干扰&#xff0…

比较.NET框架中的IEnumerable和IQueryable性能差异的核心原理

1. 前言&#xff1a; 思考下这两份代码在性能上有哪些差异&#xff0c;如果你能很清楚的区分&#xff0c;那么可以跳过本文的内容。如果你还比较模糊不清楚其中的原理&#xff0c;那么可以花个几分钟了解下。 示例一&#xff1a; IEnumerable<Order> orders GetOrder…

C语言 | Leetcode C语言题解之第386题字典序排数

题目&#xff1a; 题解&#xff1a; int* lexicalOrder(int n, int* returnSize){int *ret (int *)malloc(sizeof(int) * n);int number 1;for (int i 0; i < n; i) {ret[i] number;if (number * 10 < n) {number * 10;} else {while (number % 10 9 || number 1 …

日志系统前置知识

日志&#xff1a;程序运行过程中所记录的程序运行状态信息。通过这些信息&#xff0c;以便于程序员能够随时根据状态信息&#xff0c;对系统的运行状态进行分析。功能&#xff1a;能够让用户非常简便的进行日志的输出以及控制。 同步写日志 同步日志是指当输出日志时&#xff…

【Python百日进阶-Web开发-音频】Day707 - 时域处理 librosa.autocorrelate

文章目录 一、时域处理1.1 librosa.autocorrelate1.1.1 语法与参数1.1.2 例子1.1.2.1 计算完全自相关y1.1.2.2 计算长达 4 秒的起始强度自相关 一、时域处理 1.1 librosa.autocorrelate https://librosa.org/doc/latest/generated/librosa.autocorrelate.html 1.1.1 语法与参…

3. GIS后端工程师岗位职责、技术要求和常见面试题

本系列文章目录&#xff1a; 1. GIS开发工程师岗位职责、技术要求和常见面试题 2. GIS数据工程师岗位职责、技术要求和常见面试题 3. GIS后端工程师岗位职责、技术要求和常见面试题 4. GIS前端工程师岗位职责、技术要求和常见面试题 5. GIS工程师岗位职责、技术要求和常见面试…

828华为云征文|华为云Flexus X实例docker部署MinIO对象存储系统obs

828华为云征文&#xff5c;华为云Flexus X实例docker部署MinIO对象存储系统obs 华为云最近正在举办828 B2B企业节&#xff0c;Flexus X实例的促销力度非常大&#xff0c;特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求&#xff0c;一定…

【Linux网络编程八】实现最简单Http服务器(基于Tcp套接字)

基于TCP套接字实现一个最简单的Http服务器 Ⅰ.Http请求和响应格式1.请求格式2.响应格式3.http中请求格式中细节字段4.http中响应格式中细节字段 Ⅱ.域名ip与URLⅢ.web根目录Ⅳ.Http服务器是如何工作的&#xff1f;一.获取请求二.分析请求2.1反序列化2.2解析url 三.构建响应3.1构…

虚拟机的安装-详细教程

目录 新建虚拟机 选择典型 安装操作系统 选择CentOS7 64位版本 虚拟机存放位置 磁盘容量 完成 编辑虚拟机 修改内存大小 设置处理器个数 选择镜像 开启虚拟机 进入界面&#xff0c;回车 选择语言 安装类型 磁盘分区 开启网络 设置密码和用户 重启 接受许可…

鸿蒙(API 12 Beta6版)图形【使用Text模块实现文本显示】方舟2D图形服务

场景介绍 ohos.graphics.text模块提供了接口创建复杂的文本段落&#xff0c;包括多样的文本样式、段落样式、换行规则等&#xff0c;并最终将这些信息转换为能在屏幕上高效渲染的布局数据。 接口说明 ohos.graphics.text常用接口如下表所示。 接口名描述pushStyle(textStyl…

【算法】单词出现次数和位置统计

【算法】单词出现次数和位置统计 题目描述 编写一个程序&#xff0c;用于统计一个给定单词在一段文本中出现的次数以及第一次出现的位置。如果单词在文本中出现&#xff0c;则输出出现次数和第一次出现的位置&#xff08;位置从0开始计算&#xff09;。如果单词没有出现&…