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

相关推荐
阿巴~阿巴~17 小时前
从不可靠到100%可靠:TCP与网络设计的工程智慧全景解析
运维·服务器·网络·网络协议·tcp/ip·智能路由器
oMcLin17 小时前
如何在 Rocky Linux 8.6 上配置并调优 Nginx 与 Lua 脚本,提升 API 网关的性能与并发处理能力
linux·nginx·lua
Yana.nice18 小时前
Linux目录结构说明
linux
一殊酒18 小时前
【Figma】Figma自动化
运维·自动化·figma
EndingCoder18 小时前
箭头函数和 this 绑定
linux·前端·javascript·typescript
食咗未18 小时前
Linux iptables工具的使用
linux·运维·服务器·驱动开发·网络协议·信息与通信
tech-share18 小时前
【无标题】IOMMU功能测试软件设计及实现 (二)
linux·架构·系统架构·gpu算力
.hopeful.18 小时前
Docker——镜像仓库和镜像
运维·docker·容器
时兮兮时18 小时前
Linux 服务器后台任务生存指南
linux·服务器·笔记