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

在这里插入图片描述

文章目录

  • 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;,页脚在内容足够长时位于内容下方,内容不够长时则粘在视口底部。

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

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

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

相关文章

渗透测试练习题解析 3(CTF web)

1、[网鼎杯 2020 朱雀组]phpweb 1 考点&#xff1a;反序列化漏洞利用 进入靶场&#xff0c;查看检查信息&#xff0c;发现存在两个参数 func 和 p 查看页面源代码 payload&#xff1a;funcfile_get_contents&pphp://filter/resourceindex.php 整理后&#xff0c;就是 PHP 代…

数据结构与算法:单链表

朋友们大家好&#xff0c;本节来到数据结构与算法的新内容&#xff1a;单链表 在上篇文章中&#xff0c;我们知道顺序表通常需要预分配一个固定大小的内存空间&#xff0c; 通常以二倍的大小进行增容&#xff0c;可能会造成空间的浪费&#xff0c;本篇文章我们介绍的链表可以解…

去除vue自带的边距

使用vue时发现总有去不掉的外边距&#xff0c;在index.vue里面怎样设置样式都不管用 查阅资料后发现要在vue项目自带的index.html文件内添加下面的样式代码才行 <style>*{margin: 0;padding: 0;}body,html{margin: 0;padding: 0;} </style>

二、DataX安装

DataX安装 一、简介二、系统要求三、部署 一、简介 官方地址&#xff1a;https://github.com/alibaba/DataX/blob/master/userGuid.md 二、系统要求 LinuxJDK(1.8以上&#xff0c;推荐1.8) Centos7.9的java1.8安装命令&#xff1a;yum install java-1.8.0-openjdk.x86_64 Py…

【新书推荐】7.6节 相对基址加变址寻址方式

本节内容&#xff1a;基址加变址寻址方式。 ■基址加变址寻址方式&#xff1a;指令操作数为内操作数&#xff0c;操作数地址使用[基址寄存器变址寄存器]表示。 7.6.1 基址加变址寻址方式 基址加变址寻址方式的操作数在存储器中&#xff0c;操作数的有效地址由基地址寄存器&am…

day 20(补2.5)

fread 函数&#xff1a; 今日练习 C语言面试题5道~ 1. static 有什么用途&#xff1f;&#xff08;请至少说明两种&#xff09; 1) 限制变量的作用域 2) 设置变量的存储域 2. 引用与指针有什么区别&#xff1f; 1) 引用必须被初始化&#xff0c;指针不必。 2) 引用初始…

幻兽帕鲁服务器原来的存档不想玩了,怎么清档?如何重来?

如果需要备份原存档的话&#xff0c;就先把存档导出来备份。或者手动去服务器文件里找到游戏存档文件夹&#xff0c;保存下载。 如无需备份原存档&#xff0c;则可以直接使用幻兽帕鲁应用模板&#xff0c;来重装服务器的操作系统。 方法很简单&#xff1a; 详细教程地…

mysql经典4张表问题

1.数据库表结构关联图 2.问题&#xff1a; 1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数3.查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩4、查询名字中含有"风"字的学生信息5、查询课程名称为"数学"&…

网络协议与攻击模拟_17HTTPS 协议

HTTPShttpssl/tls 1、加密算法 2、PKI&#xff08;公钥基础设施&#xff09; 3、证书 4、部署HTTPS服务器 部署CA证书服务器 5、分析HTTPS流量 分析TLS的交互过程 一、HTTPS协议 在http的通道上增加了安全性&#xff0c;传输过程通过加密和身份认证来确保传输安全性 1、TLS …

【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱3(附带项目源码)

效果演示 文章目录 效果演示系列目录前言丢弃物品源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中&#xff0c;我们将探索如何用unity制作一个3D背包、库存、制作、快捷栏、存…

netstat命令

netstat 是一个计算机网络命令行工具&#xff0c;用于显示网络连接、路由表和网络接口等网络相关信息。netstat 命令可以在各种操作系统上使用&#xff0c;包括 Windows、Linux 和 macOS 等。 在使用 netstat 命令时&#xff0c;可以提供不同的选项来显示不同类型的网络信息。…

助力智能化农田作物除草,基于轻量级YOLOv8n开发构建农田作物场景下玉米苗、杂草检测识别分析系统

在我们前面的系列博文中&#xff0c;关于田间作物场景下的作物、杂草检测已经有过相关的开发实践了&#xff0c;结合智能化的设备可以实现只能除草等操作&#xff0c;玉米作物场景下的杂草检测我们则少有涉及&#xff0c;这里本文的主要目的就是想要基于最新的YOLOv8下最轻量级…

微信问一问·流量赚钱专栏

微信问一问流量赚钱专栏 1493读者&#xff0c;104内容 看专栏解百惑&#xff0c;赚到钱 问一问免费涨粉利器 独家更新 100 篇「问一问」经验贴。带你入门&#xff0c;解惑&#xff0c;提效&#xff0c;涨粉&#xff0c;赚小钱 零成本单日公众号涨粉 1000 &#xff0c;专栏成…

《Java 简易速速上手小册》第9章:Java 开发工具和框架 (2024 最新版)

文章目录 9.1 Maven 和 Gradle - 构建与依赖管理的神兵利器9.1.1 基础知识9.1.2 重点案例&#xff1a;使用 Maven 构建 Spring Boot 应用9.1.3 拓展案例 1&#xff1a;使用 Gradle 构建多模块项目9.1.4 拓展案例 2&#xff1a;利用 Gradle Wrapper 确保构建的一致性 9.2 Spring…

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

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

计算x的平方根x含负数和复数cmath.sqrt(x)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算x的平方根 x含负数和复数 cmath.sqrt(x) cmath.sqrt(-4)输出的结果是&#xff1f; import cmath import math a 4 print("【显示】a ",a) print("【执行】math.sqrt(a)&…

InstantBox:开箱即用的临时 Linux 环境

在云计算和虚拟化技术日益成熟的今天&#xff0c;我们有时需要一个快速、简单、临时的 Linux 环境来进行各种任务。这就是 InstantBox 的用武之地。 什么是 InstantBox&#xff1f; InstantBox 是一个开源项目&#xff0c;它可以快速启动临时的 Linux 系统&#xff0c;并提供…

HeidiSQL安装配置(基于小皮面板(phpstudy))连接MySQL

下载资源 对于这款图形化工具&#xff0c;博主建议通过小皮面板&#xff08;phpstudy&#xff09;来下载即可&#xff0c;也是防止你下载到钓鱼软件&#xff0c;小皮面板&#xff08;phpstudy&#xff09;如果你不懂是什么&#xff0c;请看下面链接这篇博客 第二篇&#xff1a;…

Vision Transformer Pytorch 实现代码学习记录

目前运营的社交平台账号&#xff1a; CSDN 【雪天鱼】: 雪天鱼-CSDN博客哔哩哔哩 【雪天鱼】: 雪天鱼个人主页-bilibili.com 可能后续有更新&#xff0c;也可能没有更新&#xff0c;谨慎参考 V1.0 24-02-13 ViT 代码的基本训练, 预测推理脚本运行 1 学习目标 能用官方的 ViT…

React18原理: 核心包结构与两大工作循环

React核心包结构 1 ) react react基础包&#xff0c;只提供定义 react组件(ReactElement)的必要函数一般来说需要和渲染器(react-dom,react-native)一同使用在编写react应用的代码时, 大部分都是调用此包的api比如, 我们定义组件的时候&#xff0c;就是它提供的class Demo ext…