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

相关推荐
普马萨特8 小时前
GPS、WiFi、基站定位:为什么在 Agent 时代不仅不受影响,反而更重要
linux·运维·服务器
2501_941982059 小时前
别再手动发群消息了!企业微信外部群自动化推送的架构设计与实现
运维·自动化·企业微信
REDcker9 小时前
埋点系统设计:从成熟工具到自建方案
运维·服务器·网络·用户分析·埋点·埋点系统
予枫的编程笔记9 小时前
【Linux入门篇】Ubuntu和CentOS包管理不一样?apt与yum对比实操,看完再也不混淆
linux·人工智能·ubuntu·centos·linux包管理·linux新手教程·rpm离线安装
先做个垃圾出来………9 小时前
SSH密钥管理最佳实践
运维·ssh
RisunJan9 小时前
Linux命令-lpr(从命令行提交文件到打印机打印)
linux·运维·服务器
历程里程碑9 小时前
Linux 库
java·linux·运维·服务器·数据结构·c++·算法
Wpa.wk9 小时前
接口自动化 - 接口鉴权处理常用方法
java·运维·测试工具·自动化·接口自动化
Sheep Shaun9 小时前
如何让一个进程诞生、工作、终止并等待回收?——探索Linux进程控制与Shell的诞生
linux·服务器·数据结构·c++·算法·shell·进程控制
codingWhat9 小时前
Linux 入门指南
linux