91、【Ubuntu】【Hugo】搭建私人博客:侧边导航栏(五)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Ubuntu】【Hugo】搭建私人博客:侧边导航栏(四)

分析了 Flexbox 和 Grid 两种布局方式,并给除了 sidebar-related-posts.html 模板,下面就 sidebar-related-posts.html 继续分析

搭建私人博客

OK,下面继续看双栏布局 .post-with-sidebar

  • display: flex:将容器设置为 Flexbox 弹性盒子,使子元素(文章内容 + 侧边栏)可以水平排列
  • flex-direction: row:子元素水平从左到右排列(默认值,显式声明更安全),配合 Flexbox 可以实现双栏布局
  • gap: 2rem:在文章和侧边栏之间自动添加 2rem 的间距,比手动设置 margin 更简洁

这里 display: flexflex-direction: row 是关键,没有设置它俩的话,文章内容和侧边栏就会挤在同一个垂直流中,也就是一个在上,一个在下,而不是左右并排,因为 HTML 元素默认是块级元素,遵循文档流,如果只有下面的 HTML

html 复制代码
<div class="post-with-sidebar">
  <div class="content">文章内容</div>
  <aside class="sidebar">侧边栏</aside>
</div>

在没有额外样式的情况下,浏览器会这样渲染:

就是所谓的挤在一起,其实是垂直堆叠,并不是期望的双栏,而使用 Flexbox 后,通过追加 CSS 样式

css 复制代码
.post-with-sidebar {
  display: flex;
  flex-direction: row; /* 默认值,可省略 */
}

就会变成下面这样

可以看到,两个子元素在同一行,并且可以控制各自宽度,gap 也能轻松加双栏间距

OK,来看下一个 CSS 样式

这段 CSS 代码主要对 .post-with-sidebar 容器中的侧边栏模块 .sidebar-related 样式(外观和行为)进行设置,其整体效果会表现为:对侧边栏内容进行布局和固定定位,让侧边栏在页面滚动时保持粘性(sticky),同时限制宽度,高度,并添加滚动,边框等视觉效果,下面详细解释型下

  • width: 300px:设置侧边栏的固定宽度为 300 像素
  • flex-shrink: 0:在弹性布局中,禁止该元素被压缩缩小,即使容器 .post-with-sidebar 空间不足
  • position: sticky使用粘性定位,当用户滚动页面时,该元素会在到达某个位置(由下面的 top 定义)后,粘在窗口的指定位置,知道离开其父容器
  • top: calc(var(--header-height, 80px) + 1rem):定义粘性定位的粘住位置,这里的 --header-height 是 CSS 自定义属性,如果未定义则默认为 80px(一般是网站顶部导航栏的高度),再加上 1rem(大概是 16px)的额外间距,所以侧边栏会在页面顶部导航栏下方再空出一点距离的位置开始站住
  • height: calc(100vh - var(--header-height, 80px) - 2rem):设置侧边栏的最大高度,100vh 是整个视口高度(viewport,指的是整个浏览器窗口的可视区域高度 ,不是侧边栏,也不是页面内容区,而是用户当前能看到的整个屏幕高度),减去顶部导航栏高度(--header-height 或默认 80px)再减去上下各 1rem 的边距(共 2rem),确保侧边栏不会超出可视区域
  • overflow-y: auto:如果侧边栏内容超过其高度,则显示垂直滚动条
  • padding-right: 1rem:右侧内边距为 1rem,让内容不紧贴边框
  • border-right: 1px solid var(--border-color, #eee):在侧边栏右侧添加一条 1 像素宽的实线边框,颜色来自 --border-color 变量,若未定义则用浅灰色 #eee
  • background: var(--theme-bg, #fff):背景色使用主题变量 --theme-bg,若未定义则用白色 #fff
  • box-sizing: border-box:使用 border-box 盒模型,宽度和高度包含 padding 和 border,避免尺寸计算出错
  • margin-top: 3rem; margin-bottom: 2rem:上方留 3rem 外边距,下方留 2rem,和正文内容格式保持一致

OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog

相关推荐
2401_892070981 天前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
雪可问春风1 天前
docker环境部署
运维·docker·容器
lwx9148521 天前
Linux-Shell算术运算
linux·运维·服务器
翻斗包菜1 天前
PostgreSQL 日常维护完全指南:从基础操作到高级运维
运维·数据库·postgresql
somi71 天前
ARM-驱动-02-Linux 内核开发环境搭建与编译
linux·运维·arm开发
双份浓缩馥芮白1 天前
【Docker】Linux 迁移 docker 目录(软链接)
linux·docker
海的透彻1 天前
nginx启动进程对文件的权限掌控
运维·chrome·nginx
黄昏晓x1 天前
Linux ---- UDP和TCP
linux·tcp/ip·udp
路溪非溪1 天前
Linux驱动开发中的常用接口总结(一)
linux·运维·驱动开发
此刻觐神1 天前
IMX6ULL开发板学习-01(Linux文件目录和目录相关命令)
linux·服务器·学习