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

相关推荐
可可嘻嘻大老虎4 小时前
nginx无法访问后端服务问题
运维·nginx
JiMoKuangXiangQu4 小时前
ARM64 进程虚拟地址空间布局
linux·arm64 虚拟地址布局
阳光九叶草LXGZXJ5 小时前
达梦数据库-学习-47-DmDrs控制台命令(LSN、启停、装载)
linux·运维·数据库·sql·学习
无忧智库5 小时前
某市“十五五“地下综合管廊智能化运维管理平台建设全案解析:从数字孪生到信创适配的深度实践(WORD)
运维·智慧城市
春日见5 小时前
如何避免代码冲突,拉取分支
linux·人工智能·算法·机器学习·自动驾驶
珠海西格5 小时前
“主动预防” vs “事后补救”:分布式光伏防逆流技术的代际革命,西格电力给出标准答案
大数据·运维·服务器·分布式·云计算·能源
无垠的广袤5 小时前
【VisionFive 2 Lite 单板计算机】边缘AI视觉应用部署:缺陷检测
linux·人工智能·python·opencv·开发板
阿波罗尼亚6 小时前
Kubectl 命令记录
linux·运维·服务器
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.6 小时前
Keepalived单播模式配置与实战指南
linux·服务器·负载均衡
IDC02_FEIYA6 小时前
Linux文件搜索命令有哪些?Linux常用命令之文件搜索命令find详解
linux·运维·服务器