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

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

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

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

相关文章

数字孪生:构建未来智慧社区的关键技术

随着科技的快速发展&#xff0c;数字孪生技术作为构建未来智慧社区的关键技术&#xff0c;正逐渐受到广泛关注。数字孪生技术能够实现物理世界与数字世界的交互映射&#xff0c;为智慧社区的建设提供强有力的支持。本文将探讨数字孪生技术在构建未来智慧社区中的作用和意义&…

枚举(Java)

一、概念 枚举是一种特殊的类。 格式&#xff1a; 修饰符 enum 枚举类名{ 对象名称1&#xff0c;对象名称2&#xff0c;....; 其他成员... } 二、枚举类的特点 1.枚举类的第一行只能罗列一些名称&#xff0c;并且这些名称都是常量&#xff0c;每个常量记住一个枚举类对象…

vue3 之 Pinia数据持久化

持久化用户数据说明 1️⃣用户数据中有一个关键的数据叫做token&#xff08;用来标识当前用户是否登陆&#xff09;&#xff0c;而token持续一段时间才会过期 2️⃣Pinia的存储是基于内存&#xff0c;刷新就丢失&#xff0c;为了保持登陆状态就要做到刷新不丢失&#xff0c;需要…

【芯片设计- RTL 数字逻辑设计入门 番外篇 9 -- SOC 中PL端与PS端详细介绍】

文章目录 Programmable Logic and Processing SystemPL&#xff08;Programmable Logic&#xff09;特点PS和PL之间的协同设计和开发工具 Programmable Logic and Processing System 在系统级芯片&#xff08;SoC&#xff09;的上下文中&#xff0c;“PL” 通常指的是可编程逻…

Qt可视化大屏布局

科技大屏现在非常流行&#xff0c;这里分享一下某个项目的大屏布局&#xff08;忘了源码是哪个博主的了&#xff09; 展示 这个界面整体是垂直布局&#xff0c;分为两个部分&#xff0c;标题是一个部分&#xff0c;然后下面的整体是一个layout布局&#xff0c;为另外一部分。 l…

学习Android的第五天

目录 Android ConstraintLayout 约束布局 简介 ConstraintLayout 约束布局分类 1、相对定位 (Relative positioning) 2、边距 ( Margins ) 3、居中定位和偏向 ( Centering positioning and bias ) 4、环形定位 ( Circular positioning ) 5、对可见性的处理 ( Visibilit…

利用知识图谱构建医疗问答

1、准备数据集 数据集下载地址&#xff1a;https://github.com/wangle1218/QASystemOnMedicalKG/blob/master/data/medical.json 2、导入相关包 from py2neo import Graph,Node,Relationship # 在cmd中&#xff0c;输入neo4j.bat console并回车 import pandas as pd3、连接N…

Rust基础拾遗--核心功能

Rust基础拾遗 前言1.所有权与移动1.1 所有权 2.引用3.特型与泛型4.实用工具特型5.闭包 前言 通过Rust程序设计-第二版笔记的形式对Rust相关重点知识进行汇总&#xff0c;读者通读此系列文章就可以轻松的把该语言基础捡起来。 1.所有权与移动 谈及内存管理&#xff0c;我们希望…

力扣hot100 -- 双指针

目录 &#x1f382;移动零 &#x1f319;盛最多水的容器 &#x1f33c;三数之和 &#x1f33c;接雨水 前缀和 辅助数组 双指针 单调栈 &#x1f382;移动零 283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 关于swap #include <iostream> #include <vec…

[SAP] ABAP设置非系统关键字代码提示功能

在事务码SE38(ABAP编辑器)屏幕右下角&#xff0c;点击【Options选项】图标 勾选【代码完成】|【建议文本中的非关键字】&#xff0c;并点击【保存】按钮 在下面的程序代码中&#xff0c;当我需要输入在11行的位置输入非关键字lv_str的时候&#xff0c;会有非关键字代码提示的功…

STM32 cubemx配置DMA+空闲中断接收不定长数据

文章目录 前言一、串口空闲中断二、DMA空闲中断接收不定长数据实现思路三、STM32Cubemx配置DMA空闲中断接收不定长数据四、代码编写总结 前言 本篇文章给大家讲解一下DMA串口空闲中断接收串口不定长数据&#xff0c;之前我们也是讲解过串口接收不定长数据的&#xff0c;那么本…

从Socket中解析Http协议实现通信

在网络协议中&#xff0c;Socket是连接应用层和运输层的中间层&#xff0c;主要作用为了通信。Http协议是应用层上的封装协议。我们可以通过Http协议的规范解析Socket中数据&#xff0c;完成Http通信。 首先&#xff0c;我们先回顾一下Http协议的规范。主要复习一下&#xff0c…

“OLED屏幕,色彩绚丽,画面清晰,让每一帧都生动无比。“#IIC协议【下】

"OLED屏幕&#xff0c;色彩绚丽&#xff0c;画面清晰&#xff0c;让每一帧都生动无比。"#IIC协议【下】 前言预备知识1. OLED显示一个点代码实现1.1 OLED显示一个点代码实现核心思路1.2和LCD1602一样需要初始化&#xff0c;看手册&#xff0c;写初识化函数1.3选择Pag…

知到答案在哪搜? #微信#笔记#其他

学习工具是我们的得力助手&#xff0c;帮助我们更好地组织学习内容和时间。 1.试题猪 这是一个公众号 总体来说还是很不错的&#xff0c;题库虽然不是特别全&#xff0c;但是大部分网课答案能够查询到&#xff0c;最重要的是免费的 下方附上一些测试的试题及答案 1、实验室…

C语言函数的栈帧与销毁(面试亮点)

目录 如果你能熟练的掌握函数的栈帧与销毁在面试中是及其亮眼的加分项&#xff0c;所以我们来以实例来将解函数是如何实现栈帧与销毁的。 一. 函数栈帧 二.寄存器 三. 用例题讲解创建栈帧的过程 3.1 main 函数的反汇编代码。 第一步&#xff1a;给调用main函数的函数分配…

STL之list容器的介绍与模拟实现+适配器

STL之list容器的介绍与模拟实现适配器 1. list的介绍2. list容器的使用2.1 list的定义2.2 list iterator的使用2.3 list capacity2.4 list element access2.5 list modifiers2.6 list的迭代器失效 3. list的模拟实现3.1 架构搭建3.2 迭代器3.2.1 正向迭代器3.2.2反向迭代器适配…

大脑是宇宙中最复杂的物体——科学家们试图破译它,读懂人们的思想

2023年&#xff0c;德克萨斯大学HuthLab进行的一项研究在神经科学和技术领域引发了震动。通过人工智能(AI)和脑成像技术的结合&#xff0c;无法与外界交流的人的思想首次被翻译成连续的自然语言。 这是迄今为止最接近读心术的科学方法。在过去的二十年里&#xff0c;神经成像技…

Qt中程序发布及常见问题

1、引言 当我们写好一个程序时通常需要发布给用户使用&#xff0c;那么在Qt中程序又是如何实现发布的呢&#xff0c;这里我就来浅谈一下qt中如何发布程序&#xff0c;以及发布程序时的常见问题。 2、发布过程 2.1、切换为release模式 当我们写qt程序时默认是debug模式&#x…

【51单片机】添加模块代码的常见问题(图示&代码演示)

前言 大家好吖&#xff0c;欢迎来到 YY 滴 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 本章节是Lcd1602章节的一部分&#xff0c;以把4个Lcd驱动程序添加为例子&#xff0c;完整传送门在下方传送门 欢迎订阅 YY滴C专栏&…

Red Panda Dev C++ Maker【2.0自创黑客版】使用说明

https://download.csdn.net/download/HappyStarLap/88825258https://download.csdn.net/download/HappyStarLap/88825258Red Panda Dev C&#xff08;旧名 Dev-C 2000&#xff09;是 Orwell Dev-C 的改进分支。包括heker.h、Heike.h、easxy.h 和Art_Text.h。Orwell Dev-C 自 20…