《CSS 简易速速上手小册》第2章:CSS 布局与定位(2024 最新版)

news2024/11/24 2:44:16

在这里插入图片描述

文章目录

  • 2.1 Flexbox:灵活的布局解决方案
    • 2.1.1 基础知识
    • 2.1.2 重点案例:创建一个响应式导航菜单
    • 2.1.3 拓展案例 1:卡片布局
    • 2.1.4 拓展案例 2:中心对齐的登录表单
  • 2.2 Grid 布局:网格系统的魔力
    • 2.2.1 基础知识
    • 2.2.2 重点案例:创建一个新闻网站的布局
    • 2.2.3 拓展案例 1:画廊布局
    • 2.2.4 拓展案例 2:个人博客的文章布局
  • 2.3 定位技巧:Static、Relative、Absolute、Fixed 和 Sticky
    • 2.3.1 基础知识
    • 2.3.2 重点案例:创建一个固定在顶部的导航栏
    • 2.3.3 拓展案例 1:模态弹窗
    • 2.3.4 拓展案例 2:使用 Sticky 定位实现粘性页脚

2.1 Flexbox:灵活的布局解决方案

欢迎来到 Flexbox 的世界,一个让布局变得前所未有简单的 CSS3 新特性。Flexbox,全称为 Flexible Box,是一个为复杂布局而生的强大工具。它让我们可以在父容器中以一种灵活的方式对子元素进行排列和对齐,不论是水平还是垂直方向。

2.1.1 基础知识

  • Flex 容器(Flex Container):通过设置 display: flex;display: inline-flex; 在一个元素上,这个元素就变成了一个 Flex 容器,其所有直接子元素成为 Flex 项目(Flex Items)。
  • 主轴(Main Axis)和交叉轴(Cross Axis):Flex 布局中有两个轴,主轴默认为水平方向,交叉轴为垂直方向,这可以通过 flex-direction 属性进行调整。
  • Flex 方向(Flex Direction)flex-direction 属性决定 Flex 项目的排列方向,可以是行(row)、行逆序(row-reverse)、列(column)或列逆序(column-reverse)。
  • Flex 包裹(Flex Wrap)flex-wrap 属性控制 Flex 项目是否换行显示。
  • 对齐方式justify-content 控制主轴上的对齐方式,align-items 控制交叉轴上的对齐方式,align-content 控制多行/列间的对齐方式。

2.1.2 重点案例:创建一个响应式导航菜单

让我们来创建一个简单且响应式的导航菜单,这个菜单将在大屏幕上水平显示,在小屏幕上转换为垂直堆叠。

  • HTML 结构
<nav class="flex-nav">
  <a href="#">首页</a>
  <a href="#">关于我们</a>
  <a href="#">服务</a>
  <a href="#">联系我们</a>
</nav>
  • CSS 样式
.flex-nav {
  display: flex;
  list-style: none;
  padding: 0;
  margin: 0;
  background: #333;
}

.flex-nav a {
  color: white;
  padding: 10px;
  text-decoration: none;
  flex-grow: 1;
  text-align: center;
}

@media (max-width: 600px) {
  .flex-nav {
    flex-direction: column;
  }
}

在这个案例中,.flex-nav 容器在大屏幕上默认展示为一行,每个链接平等地占据空间(感谢 flex-grow: 1)。当屏幕尺寸小于 600px 时,通过媒体查询改变 flex-directioncolumn,使菜单垂直堆叠。

2.1.3 拓展案例 1:卡片布局

假设你需要创建一个产品展示页面,每个产品都是一个卡片,你想要它们在大屏幕上平均分布,在小屏幕上自适应堆叠。

  • HTML 结构
<div class="cards">
  <div class="card">卡片 1</div>
  <div class="card">卡片 2</div>
  <div class="card">卡片 3</div>
</div>
  • CSS 样式
.cards {
  display: flex;
  padding: 10px;
  justify-content: space-around;
  flex-wrap: wrap;
}

.card {
  flex: 1;
  margin: 10px;
  min-width: 100px;
  background: lightgrey;
  padding: 20px;
  box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}

这个布局利用了 `

flex-wrap: wrap; 来确保卡片在必要时可以换行,flex: 1;让每个卡片都尽可能平等地占据空间,但min-width` 确保它们不会被挤得太小。

2.1.4 拓展案例 2:中心对齐的登录表单

创建一个登录表单,无论在何种屏幕尺寸下,总是垂直和水平居中显示。

  • HTML 结构
<div class="login-container">
  <form class="login-form">
    <input type="text" placeholder="用户名">
    <input type="password" placeholder="密码">
    <button type="submit">登录</button>
  </form>
</div>
  • CSS 样式
.login-container {
  display: flex;
  height: 100vh;
  justify-content: center;
  align-items: center;
}

.login-form > * {
  margin: 10px;
  padding: 5px;
}

通过设置 .login-containerjustify-contentalign-items 属性,我们可以轻松地实现表单在容器中的中心对齐,无论容器的大小如何变化。

通过这些案例,我们可以看到 Flexbox 提供了一个灵活而强大的方式来处理网页布局的挑战。不仅仅是导航菜单、卡片布局或是登录表单,几乎任何你能想到的布局都可以用 Flexbox 轻松实现。所以,开始使用 Flexbox 吧,享受它带来的布局自由和乐趣!

在这里插入图片描述


2.2 Grid 布局:网格系统的魔力

在 CSS 的宝库中,Grid 布局无疑是一颗璀璨的明珠。它为我们提供了一个二维布局系统,通过行和列的方式来组织内容,极大地增强了我们对网页布局的控制能力。让我们深入探索 Grid 布局的魔法,看看如何利用它来创造精美且功能强大的布局吧!

2.2.1 基础知识

  • Grid 容器:通过将一个元素的 display 属性设置为 gridinline-grid,你可以定义一个 Grid 容器,其直接子元素将成为 Grid 项。
  • 行和列:可以使用 grid-template-rowsgrid-template-columns 属性来定义 Grid 容器中的行和列的大小。
  • Grid 网格线:Grid 布局是基于网格线的,这些网格线包括行网格线和列网格线,用于定位 Grid 项。
  • Grid 区域:通过 grid-area 属性,可以将 Grid 项放置在容器的任何区域内,这些区域是由行网格线和列网格线定义的。
  • 对齐和间隔justify-itemsalign-itemsjustify-contentalign-contentgap 属性允许你控制 Grid 项的对齐方式和行列之间的间隔。

2.2.2 重点案例:创建一个新闻网站的布局

想象你正在为一个新闻网站设计首页,需要一个包含头条新闻、多个新闻分类和侧边栏的复杂布局。

  • HTML 结构
<div class="news-grid">
  <div class="headline">头条新闻</div>
  <div class="category news">新闻</div>
  <div class="category sports">体育</div>
  <div class="category entertainment">娱乐</div>
  <div class="sidebar">侧边栏</div>
</div>
  • CSS 样式
.news-grid {
  display: grid;
  grid-template-columns: 2fr 1fr;
  grid-template-rows: auto 1fr 1fr;
  gap: 20px;
}

.headline {
  grid-column: 1 / -1; /* 占据整个宽度 */
}

.category {
  height: 200px;
}

.sidebar {
  grid-row: 2 / 4; /* 跨越两行 */
}

这个布局利用了 Grid 的强大功能,创建了一个响应性强、结构清晰的新闻首页布局,头条新闻占据了上方的整个宽度,新闻分类在左侧分列显示,侧边栏在右侧跨越两行的高度。

2.2.3 拓展案例 1:画廊布局

为一家艺术画廊创建一个展示作品的网页布局,其中作品需要以不同的大小展示,以吸引访问者的注意。

  • HTML 结构
<div class="gallery">
  <div class="art large">大型艺术作品</div>
  <div class="art medium">中型艺术作品</div>
  <div class="art small">小型艺术作品</div>
  <!-- 更多艺术作品 -->
</div>
  • CSS 样式
.gallery {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 10px;
}

.art {
  background-color: #f0f0f0;
  padding: 20px;
}

.large {
  grid-column: span 2;
}

.medium {
  grid-column: span 1;
}

.small {
  grid-column: span 1;
}

通过 grid-column: span X; 属性,我们可以控制每件艺术作品占据的列数,从而创造出一个动态且吸引人的画廊布局。

2.2.4 拓展案例 2:个人博客的文章布局

设计一个个人博客文章页面,包括文章内容、作者信息和相关文章推荐。

  • HTML 结构
<div class="blog-post">
  <div class="article">文章内容</div>
  <div class="author-info">作者信息</div>
  <div class="related-articles">相关文章</div>
</div>
  • CSS 样式
.blog-post {
  display: grid;
  grid-template-columns: 3fr 1fr;
  gap: 20px;
}

.article {
  grid-column: 1 / 2;
}

.author-info, .related-articles {
  grid-column: 2 / 3;
}

在这个布局中,文章内容在左侧占据更大的空间,而作者信息和相关文章推荐则在右侧的较小空间内垂直排列,实现了清晰且易于阅读的文章布局。

通过这些案例,我们可以看到 Grid 布局如何使得创建复杂和响应式的网页布局变得简单且直观。无论是新闻网站的首页、艺术画廊的展示,还是个人博客的文章页面,Grid 都提供了强大而灵活的布局解决方案。掌握了 Grid,你就掌握了创建美观、实用且响应式布局的魔法。

在这里插入图片描述


2.3 定位技巧:Static、Relative、Absolute、Fixed 和 Sticky

在 CSS 的世界里,元素的定位是实现精确布局的关键。定位属性定义了元素在页面上如何定位,包括其在文档流中的行为和如何与其他元素相互作用。让我们深入了解这五种定位模式:staticrelativeabsolutefixedsticky,并探索它们如何让我们的布局工作变得更加灵活和强大。

2.3.1 基础知识

  • Static(静态定位):这是所有元素的默认定位方式。它们按照正常的文档流进行布局,不会被 toprightbottomleft 属性影响。
  • Relative(相对定位):元素的位置相对于其在正常文档流中的位置进行调整。设置 toprightbottomleft 属性会使其移动,但不会影响其他元素的位置。
  • Absolute(绝对定位):元素的位置相对于最近的非 static 定位的祖先元素进行定位。它从文档流中脱离,不占据空间,可能会覆盖页面上的其他元素。
  • Fixed(固定定位):元素的位置相对于浏览器窗口进行定位,即使滚动页面也会保持在固定位置。
  • Sticky(粘性定位):元素根据用户的滚动位置在 relativefixed 定位之间切换。它在视口内滚动到达指定位置前是相对定位的,之后变为固定定位。

2.3.2 重点案例:创建一个固定在顶部的导航栏

一个常见的需求是,无论用户如何滚动页面,导航栏始终固定在页面的顶部。

  • HTML 结构
<div class="fixed-nav">
  <a href="#">首页</a>
  <a href="#">服务</a>
  <a href="#">关于我们</a>
  <a href="#">联系我们</a>
</div>
  • CSS 样式
.fixed-nav {
  position: fixed;
  top: 0;
  width: 100%;
  background-color: #333;
  padding: 10px 0;
  z-index: 1000;
  text-align: center;
}

.fixed-nav a {
  color: white;
  text-decoration: none;
  padding: 10px 15px;
}

通过设置 position: fixed;top: 0;,导航栏会固定在视口的顶部,不随页面滚动而移动。

2.3.3 拓展案例 1:模态弹窗

模态弹窗(Modal)是一种在当前页面上显示信息或表单的好方法,而不需要跳转到新页面。

  • HTML 结构
<div class="modal">
  <div class="modal-content">
    <span class="close-button">×</span>
    <p>这是一个模态弹窗!</p>
  </div>
</div>
  • CSS 样式
.modal {
  position: fixed;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  display: none;
}

.modal-content {
  position: relative;
  background-color: #fefefe;
  margin: 15% auto;
  padding: 20px;
  width: 80%;
  max-width: 600px;
}

设置 .modalposition: fixed; 可以确保背景覆盖整个视口,而 .modal-content 则在视口中央显示。

2.3.4 拓展案例 2:使用 Sticky 定位实现粘性页脚

假设你希望页脚在内容足够长时位于页面底部,但当内容不够长无法填满视口时,页脚始终粘在视口底部。

  • HTML 结构
<div class="content">这里是内容...</div>
<footer class="sticky-footer">粘性页脚</footer>
  • CSS 样式
.sticky-footer {
  position: sticky;
  bottom: 0;
  background-color: #333;
  color: white;
  text-align: center;
  padding: 10px 0;
}

通过设置 position: sticky;bottom: 0;,页脚在内容足够长时位于内容下方,内容不够长时则粘在视口底部。

通过这些案例,我们可以看到定位技巧在实现各种布局需求时的强大能力和灵活性。无论是创建固定导航栏、模态弹窗还是粘性页脚,理解并掌握这些定位技巧将使你能够更加自信地设计和实现复杂的布局。继续探索和实践,让你的网页更加动态和互动吧!

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

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

相关文章

Apache网站部署

站点添加及linux防火墙和selinux启动和停止 apache站点添加 linux系统防火墙和selinux起停 1、防火墙firewall操作 查看防火墙的状态&#xff0c;如下&#xff08;默认开启&#xff09;&#xff1a; systemctl status firewalld 关闭服务 systemctl stop firewalld 关闭…

PySpark(四)PySpark SQL、Catalyst优化器、Spark SQL的执行流程、Spark新特性

目录 PySpark SQL 基础 SparkSession对象 DataFrame入门 DataFrame构建 DataFrame代码风格 DSL SQL SparkSQL Shuffle 分区数目 DataFrame数据写出 Spark UDF Catalyst优化器 Spark SQL的执行流程 Spark新特性 自适应查询(SparkSQL) 动态合并 动态调整Join策略 …

【数据结构】哈希表的开散列和闭散列模拟

哈希思想 在顺序和树状结构中&#xff0c;元素的存储与其存储位置之间是没有对应关系&#xff0c;因此在查找一个元素时&#xff0c;必须要经过多次的比较。 顺序查找的时间复杂度为0(N)&#xff0c;树的查找时间复杂度为log(N)。 我们最希望的搜索方式&#xff1a;通过元素…

Mybatis Day02

增删改查 环境准备 创建一个emp表创建一个新的springboot工程&#xff0c;选择mysql、lombok、mybatis依赖application.properties中引入数据库连接信息创建对应的实体类Emp准备Mapper接口EmpMapper&#xff0c;mapper代表程序运行时自动创建接口的代理对象&#xff0c;并放入…

Linux下的容器化技术:从入门到实践

你是否曾经遇到过这样的困境&#xff1a;在不同的环境中部署应用程序时&#xff0c;总是因为各种依赖关系和环境配置问题而头痛不已&#xff1f;如果有的话&#xff0c;那么容器化技术将是你的救星&#xff01;在Linux系统下&#xff0c;容器化技术以其轻量级、隔离性和可移植性…

蓝桥杯每日一题------背包问题(二)

前言 本次讲解背包问题的一些延申问题&#xff0c;新的知识点主要涉及到二进制优化&#xff0c;单调队列优化DP&#xff0c;树形DP等。 多重背包 原始做法 多重背包的题意处在01背包和完全背包之间&#xff0c;因为对于每一个物品它规定了可选的个数&#xff0c;那么可以考虑…

Spring 如何解决循环依赖?Spring三级缓存

什么是循环依赖 说白是一个或多个对象实例之间存在直接或间接的依赖关系&#xff0c;这种依赖关系构成了构成一个环形调用。 自己依赖自己 两个对象间的依赖关系 多个对象间的依赖关系 Spring出现循环依赖的场景 单例的setter注入 Service public class A {Resourceprivate…

【精选】java多态进阶——多态练习测试

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

InternLM大模型实战-4.XTuner大模型低成本微调实战

文章目录 前言笔记正文XTuner支持模型和数据集 微调原理跟随文档学习快速上手自定义微调准备数据准备配置文件 MS-Agent微调 前言 本文是对于InternLM全链路开源体系系列课程的学习笔记。【XTuner 大模型单卡低成本微调实战】 https://www.bilibili.com/video/BV1yK4y1B75J/?…

【MySQL进阶之路】生产案例:大量数据刷盘导致的数据库性能抖动问题优化

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

从汇编角度解释线程间互斥-mutex互斥锁与lock_guard的使用

多线程并发的竞态问题 我们创建三个线程同时进行购票&#xff0c;代码如下 #include<iostream> #include<thread> #include<list> using namespace std; //总票数 int ticketCount100; //售票线程 void sellTicket(int idx) {while(ticketCount>0){cou…

从零开始实现消息队列(二)

从零开始实现消息队列 .核心API交换机类型持久化网络通信Connection和Channel 消息应答模块划分 . 核心API 对于Broker来说,要实现以下核心API,通过这些API来实现消息队列的基本功能. 创建队列(queueDeclare)销毁队列(queueDelete)创建交换机(exchangeDeclare)销毁交换机(exc…

第4集《佛说四十二章经》

请大家打开讲议第四面&#xff0c;第一章&#xff0c;出家证果。 佛言&#xff1a;辞亲出家&#xff0c;识心达本&#xff0c;解无为法&#xff0c;名曰沙门。 在经文的刚开始啊&#xff0c;佛陀把修道的沙门提出了两个基本的条件&#xff1a; 第一个是辞亲出家&#xff0c;…

【Linux技术宝典】Linux入门:揭开Linux的神秘面纱

文章目录 官网Linux 环境的搭建方式一、什么是Linux&#xff1f;二、Linux的起源与发展三、Linux的核心组件四、Linux企业应用现状五、Linux的发行版本六、为什么选择Linux&#xff1f;七、总结 Linux&#xff0c;一个在全球范围内广泛应用的开源操作系统&#xff0c;近年来越来…

MySQL数据库-索引概念及其数据结构、覆盖索引与回表查询关联、超大分页解决思路

索引是帮助mysql高效获取数据的数据结构,主要用来提高检索的效率,降低数据库的IO成本(输入输出成本&#xff08;Input-Output Cost&#xff09;),同时通过索引对数据进行排序也能降低数据排序的成本,降低了CPU的消耗。 Mysql的默认存储引擎InnoDB&#xff0c;InnoDB采用的B树的…

代码随想录算法训练营第四十九天(动态规划篇)| 474. 一和零, 完全背包理论基础

474. 一和零 题目链接&#xff1a;https://leetcode.cn/problems/ones-and-zeroes/submissions/501607337/ 思路 之前的背包问题中&#xff0c;我们对背包的限制是容量&#xff0c;即每个背包装的物品的重量和不超过给定容量&#xff0c;这道题的限制是0和1的个数&#xff0…

Acwing 5469. 有效点对【正难则反+巧妙选择根节点】

原题链接&#xff1a;https://www.acwing.com/problem/content/5472/ 题目描述&#xff1a; 给定一个 n 个节点的无向树&#xff0c;节点编号 1∼n。 树上有两个不同的特殊点 x,y&#xff0c;对于树中的每一个点对 (u,v)(u≠v)&#xff0c;如果从 u 到 v 的最短路径需要经过…

【MySQL基础】:深入探索DQL数据库查询语言的精髓(上)

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; MySQL从入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. DQL1.1 基本语法1.2 基础查询1.3 条件查询1.3 聚合函数 &#x1f324;️ 全篇…

备战蓝桥杯---动态规划(理论基础)

目录 动态规划的概念&#xff1a; 解决多阶段决策过程最优化的一种方法 阶段&#xff1a; 状态&#xff1a; 决策&#xff1a; 策略&#xff1a; 状态转移方程&#xff1a; 适用的基本条件 1.具有相同的子问题 2.满足最优子结构 3.满足无后效性 动态规划的实现方式…

寻找最优的路测线 - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 评估一个网络的信号质量&#xff0c;其中一个做法是将网络划分为栅格&#xff0c;然后对每个栅格的信号质量计算。 路测的时候&#xff0c;希望选择一条信号最好…