【CSS in Depth 2 精译_043】6.5 CSS 中的粘性定位技术 + 本章小结

news2024/9/30 11:22:28

当前内容所在位置(可进入专栏查看其他译好的章节内容)

  • 第一章 层叠、优先级与继承(已完结)
  • 第二章 相对单位(已完结)
  • 第三章 文档流与盒模型(已完结)
  • 第四章 Flexbox 布局(已完结)
  • 第五章 网格布局(已完结)
  • 【第六章 定位与堆叠上下文】(已完结)
    • 6.1 固定定位
      • 6.1.1 创建一个固定定位的模态对话框
      • 6.1.2 在模态对话框打开时防止屏幕滚动
      • 6.1.3 控制定位元素的大小
    • 6.2 绝对定位
      • 6.2.1 关闭按钮的绝对定位
      • 6.2.2 伪元素的定位问题
    • 6.3 相对定位
      • 6.3.1 创建下拉菜单(上)
      • 6.3.2 创建 CSS 三角形(下)
    • 6.4 堆叠上下文与 z-index
      • 6.4.1 理解渲染过程与堆叠顺序(上)
      • 6.4.2 用 z-index 控制堆叠顺序(上)
      • 6.4.3 深入理解堆叠上下文(下)
    • 6.5 粘性定位 ✔️​
    • 6.6 本章小结 ✔️​
  • 第七章 响应式设计(精译中 ⏳)
    • 7.1 移动端优先

文章目录

    • 6.5 粘性定位 Sticky positioning
    • 6.6 本章小结 Summary

《CSS in Depth》新版封面

《CSS in Depth》新版封面

译者按
“千里之行,始于足下。”转眼来到了本章的最后一节——粘性定位。在第一版中,这个特性还处于试验阶段,很多地方都存在兼容性问题,介绍它的时候能切身感受到应用到实战时的繁琐。时隔六年,粘性定位这一特性已然成熟,内容也进行了同步更新。与时俱进这四个字,早已内化为这些前端大牛的撸码日常了。这值得我们学习。

6.5 粘性定位 Sticky positioning

最后一种定位类型是 粘性定位(sticky positioning。粘性定位有点像相对定位和固定定位的结合体:正常情况下,元素会随着页面滚动;当到达屏幕的特定位置后,继续滚动屏幕则会“锁定”在该位置。其最常见的应用场景为侧边栏导航。

回到前面那个含有模态对话框以及下拉菜单的示例页,本节将基于该页面添加一个粘性定位的右侧边栏,实现如图 6.14 所示的双列布局效果:

图 6.14 粘性定位的侧边栏在初始状态下为普通定位

【图 6.14 粘性定位的侧边栏在初始状态下为普通定位】

页面刚加载时,侧边栏位置一切正常。页面一滚动,它也跟着滚动到某个位置;待到侧边栏即将离开视口时,则会锁在该位置不动;而当页面其余部分继续滚动时,侧边栏又像一个设置了固定定位的元素,继续停留在屏幕上,效果如图 6.15 所示:

图 6.15 侧边栏继续“固定”在视口内的效果

【图 6.15 侧边栏继续“固定”在视口内的效果】

为了方便演示,页面结构需略作调整,再重新定义一下两栏。根据代码清单 6.14 更新示例页。该代码将之前的内容(即下拉菜单与标题栏)放在了左侧边栏,同时在右侧边栏放置一个类名为 “affix”(译注:这里的 affix 可以理解为“附件、附加物”)的菜单。

代码清单 6.14 将页面改为带侧边栏的双列布局

<main class="container">
  <div class="col-main"><!-- 将现有内容用 col-main 包起来,作为正文栏 -->
    <nav>
      <div class="dropdown">
        <div class="dropdown-label">Main Menu</div>
        <div class="dropdown-menu">
          <ul class="submenu">
            <li><a href="/">Home</a></li>
            <li><a href="/coffees">Coffees</a></li>
            <li><a href="/brewers">Brewers</a></li>
            <li><a href="/specials">Specials</a></li>
            <li><a href="/about">About us</a></li>
          </ul>
        </div>
      </div>
    </nav>
    <h1>Wombat Coffee Roasters</h1>
  </div>

  <aside class="col-sidebar"><!-- 再加一个侧边栏元素 -->
    <div class="affix"><!-- 新的侧边栏里面放一个 affix 元素 -->
      <ul class="submenu">
        <li><a href="/">Home</a></li>
        <li><a href="/coffees">Coffees</a></li>
        <li><a href="/brewers">Brewers</a></li>
        <li><a href="/specials">Specials</a></li>
        <li><a href="/about">About us</a></li>
      </ul>
    </div>
  </aside>
</main>

接着更新页面样式,将容器设置为弹性容器,并指定两栏的列宽。本例复用了下拉菜单中的子菜单样式,您也可以给侧边栏添加其他想要的元素与样式。根据代码清单 6.15 更新本地样式表。

代码清单 6.15 创建一个两栏布局及粘性定位的侧边栏的 CSS 样式

.container {
  display: flex; /* 将容器设置为两栏布局的弹性容器 */
  width: 80%;
  max-width: 1000px;
  margin: 1em auto;
  min-height: 100vh; /* 特意给容器设置高度 */
}
 
.col-main {
  flex: 1 80%;  /* 给两栏布局 */
}
 
.col-sidebar {
  flex: 20%;  /* 给两栏布局 */
}
 
.affix {
  /* 给侧边栏菜单设置粘性定位,放在距视口顶部 1em 的位置 */
  position: sticky;
  top: 1em;
}

以上样式主要用于设置两栏布局。布局搞定后,affix 元素的粘性定位声明只需要两句就行了。其中 top 值指定了该元素最终固定的位置——距离视口顶部 1em

粘性定位元素永远不会超出父元素(本例中即为 col-sidebar 元素)的范围,随着页面的滚动,col-sidebar 会一直正常滚动,而 affix 元素则会在滚动到指定位置后停下来。如果继续滚动得足够远,粘性元素还会自行解锁恢复滚动。这种情况只在父元素的底边到达粘性菜单元素的底边时才会发生。注意,要让粘性元素能按预期粘性定位无误,父元素就必须高于粘性元素——这也是我给弹性容器手动设置 min-height 来增加其高度的根本原因。当父元素快要完全滚出视口时,一旦父元素底边碰到了粘性元素,那么该粘性元素将再次恢复滚动。


6.6 本章小结 Summary

  • 固定定位时放置元素的参照物为 视口(viewport)
  • 相对定位则以 该元素初始状态下的静态位置(initial static position)为参照物 进行定位;页面上的其他元素也将继续基于该初始位置排布。
  • 绝对定位时放置元素的参照物为 距离该元素最近的祖先级定位元素(nearest positioned ancestor element)
  • 粘性定位能让目标元素在页面其余内容滚动时固定在屏幕某个位置。它们将始终位于其父元素内部。
  • z-index 仅对 已定位的元素(positioned elements) (译注:即 position: relative | absolute | fixed | sticky)生效,并且使用时会创建一个新的 堆叠上下文(stacking context)


关于《CSS in Depth》(中译本书名《深入解析 CSS》)

第 1 版第 2 版
读者评分原版:4.7(亚马逊);中文版:9.3(豆瓣)原版:5.0(亚马逊);中文版:暂无,待出版
出版时间原版:2018 年 3 月;中文版:2020 年 4 月原版:2024 年 7 月;中文版:暂无,待出版
原价原版:$44.99;中文版:¥139.00原版:$59.99;中文版:暂无,待出版
现价原版:$36.49;中文版:¥52.54 起步原版:$52.09;中文版:暂无,待出版
原版国内预订起步价 ¥461.00起步价 ¥750.00

本专栏为该书第 2 版高分译文专栏,全网首发,精译精校,持续更新,计划今年内完成全书翻译,敬请期待!!!

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

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

相关文章

在起草行业标准时,如何确保格式统一?

一、遵循相关规范 1. 严格按照国家有关标准编写规范以及行业特定的标准编写指南进行起草。熟悉并掌握规范中对于标准结构、条款编号、字体字号、图表格式等方面的具体要求。 2. 参考已发布的同行业成熟标准的格式&#xff0c;学习其成功的格式布局和表达形式。 二、建立模板 1…

9.24-k8s服务发布

Ingress 使用域名发布 K8S 服务 部署项目 一、先部署mariadb [rootk8s-master ~]# mkdir aaa [rootk8s-master ~]# cd aaa/ [rootk8s-master aaa]# # 先部署mariadb [rootk8s-master aaa]# # configmap [rootk8s-master aaa]# vim mariadb-configmap.yaml apiVersion: v1 ki…

Leecode刷题之路第五天之最长回文子串

题目出处 05-最长回文子串 题目描述 个人解法 思路&#xff1a; 1.找出所有子串 2.过滤回文子串 3.回文子串长度排序 4.输出最长回文子串 代码示例&#xff1a;&#xff08;Java&#xff09; todo复杂度分析 todo 官方解法 最长回文子串 方法1&#xff1a;动态规划 思路&…

新能源汽车储充机器人:能源高效与智能调度

新能源汽车储充机器人&#xff1a;开启能源高效利用与智能调度的未来之门 随着全球能源危机的日益加剧和环境污染问题的不断恶化&#xff0c;新能源汽车成为了未来交通领域的重要发展方向。然而&#xff0c;新能源汽车的普及不仅需要解决电池技术的瓶颈&#xff0c;还需要构建一…

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】 一、TFLM是什么&#xff1f;二、TFLM开源项目2.1 下载TFLM源代码2.2 TFLM基准测试说明2.3 TFLM基准测试命令 三、TFLM初步体验3.1 PC上运行Keyword基准测试3.2 PC上运行Person detection基准测试3.3 No module nam…

netty之基础aio,bio,nio

前言 在Java中&#xff0c;提供了一些关于使用IO的API&#xff0c;可以供开发者来读写外部数据和文件&#xff0c;我们称这些API为Java IO。IO是Java中比较重要知识点&#xff0c;且比较难学习的知识点。并且随着Java的发展为提供更好的数据传输性能&#xff0c;目前有三种IO共…

怎么在Windows系统中使用Chrome的语音搜索功能

在Windows系统中使用谷歌浏览器的语音搜索功能是一种快速且方便的搜索方式。本文将详细介绍如何在Windows系统中启用和使用Chrome的语音搜索功能。 &#xff08;本文由https://chrome.cmrrs.com/站点的作者进行编写&#xff0c;转载时请进行标注。&#xff09; 一、 启用语音搜…

《Cell》|单细胞+空间转录组绘制人类鳞状细胞癌组成和空间结构图谱

文章信息 文章题目&#xff1a;Multimodal Analysis of Composition and Spatial Architecture in Human Squamous Cell Carcinoma 发表期刊&#xff1a;《Cell》 影响因子&#xff1a;45.5 PART 1 研究背景 皮肤鳞状细胞癌&#xff08;cSCC&#xff09;主要特征是组织极…

如果您忘记了 Apple ID 和密码,按照指南可重新进入您的设备

即使您的 iPhone 或 iPad 由于各种原因被锁定或禁用&#xff0c;也可以使用 iTunes、“查找我的”、Apple 支持和 iCloud 解锁您的设备。但是&#xff0c;此过程需要您的 Apple ID 和密码来验证所有权并移除激活锁。如果您忘记了 Apple ID 和密码&#xff0c;请按照我们的指南重…

基于基于微信小程序的社区订餐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

64.【C语言】再议结构体(下)

本文衔接第63篇63.【C语言】再议结构体(上) 目录 目录 6.复习 7.修改默认对齐数 8.结构体传参 01.传递非指针参数 02.传递指针参数(传递地址) 03.对比 9.结构体实现位段 01.位段的定义 02.格式 03.例题 答案速查 分析 10.位段跨平台问题 11.位段的应用 12.其他…

ubuntu20.04系统下,c++图形库Matplot++配置

linux下安装c图形库Matplot&#xff0c;使得c可以可视化编程&#xff1b;安装Matplot之前&#xff0c;需要先安装一个gnuplot&#xff0c;因为Matplot是依赖于此库 gnuplot下载链接&#xff1a; http://www.gnuplot.info/ 一、gnuplot下载与安装(可以跳过&#xff0c;下面源码…

EasyCVR视频汇聚平台:解锁视频监控核心功能,打造高效安全监管体系

随着科技的飞速发展&#xff0c;视频监控技术已成为现代社会安全、企业管理、智慧城市构建等领域不可或缺的一部分。EasyCVR视频汇聚平台作为一款高性能的视频综合管理平台&#xff0c;凭借其强大的视频处理、汇聚与融合能力&#xff0c;在构建智慧安防/视频监控系统中展现出了…

如何设计能吸引下载的截图以及注意事项

应用商店优化包括两个方面&#xff1a;关键字优化&#xff08;吸引人们查看您的应用页面&#xff09;和屏幕截图优化&#xff08;将浏览量转化为下载量&#xff09;。两者相互依存&#xff0c;两者相辅相成&#xff0c;让您的应用获得应有的下载量。但是&#xff0c;如果浏览量…

MySQL_视图

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

计算机毕业设计Python抖音可视化 抖音大数据分析 抖音爬虫 抖音用户行为分析 抖音大数据 Hadoop Spark 数据仓库 推荐系统 机器学习 深度学习

Python抖音可视化开题报告 一、研究背景与意义 随着移动互联网的迅猛发展&#xff0c;短视频平台如抖音已成为人们日常生活中不可或缺的一部分。抖音以其独特的算法和内容推荐机制&#xff0c;吸引了数以亿计的用户。然而&#xff0c;随着用户规模的不断扩大&#xff0c;如何…

海信给AI电视打样,12大AI智能体全面升级大屏体验

9月29日&#xff0c;海信在秋季新品发布会上正式推出了百吋AI新品阵容&#xff0c;通过全新升级的ULED AI画质平台和行业首发的12大电视AI智能体&#xff0c;再一次引领AI电视创新方向&#xff0c;让用户在任意环境和场景下享受超高画质体验。同时可以用最简单的交流获得最想要…

WingetUI:可视化Windows常用的命令行包管理工具

推荐一个Windows工具&#xff0c;可以轻松地下载、安装、更新和卸载任何在支持的包管理器上发布的软件。 01 项目简介 WinGetUI 是一个基于 .NET 的开源项目&#xff0c;它旨在提供一个图形用户界面&#xff08;GUI&#xff09;来管理包&#xff0c;支持命令比如 Winget、Sco…

Javase学习day1-前置知识

1、什么是计算机 2、 硬件及冯诺依曼结构 3、软件及软件开发 4、常用的快捷键 5、常用的Dos命令 常用的Dos命令&#xff1a;(基本都是在cmd里面写的) #盘符切换&#xff1a;直接输入那个盘符的名字加一个冒号就行。 #切换目录&#xff1a; cd change directory&#xff08;这是…

阿里云ACP认证考试题库

最近有好些同学&#xff0c;考完阿里云ACP了&#xff0c;再来跟我反馈&#xff1a;自己花700买的阿里云ACP题库&#xff0c;结果答案是错的&#xff01; 或者考完后发现&#xff0c;买的阿里云ACP题库覆盖率只有50%&#xff01; 为避免大家继续踩坑&#xff0c;给大家分享一个阿…