博客

  • CSS Grid:用二维布局掌控整个页面

    Grid 是 CSS 原生提供的二维布局系统,让你像画表格一样精准定义行、列、区域和间距。它不是 Flexbox 的替代品,而是互补工具:**Flexbox 用于组件内部排版,Grid 用于整体页面结构**。

    为什么选择 CSS Grid?

    • ✅ 真正的二维控制:同时定义行和列
    • ✅ 直观的区域命名(grid-template-areas)
    • ✅ 自动响应式:配合 fr 单位和 minmax()
    • ✅ 所有现代浏览器全面支持(包括移动端)

    一句话总结:想搭页面骨架?用 Grid。想调组件细节?用 Flexbox。

    基础语法:三步创建网格

    1. 将容器设为网格:
      .container {
        display: grid;
      }
    2. 定义列和行:
      .container {
        grid-template-columns: 200px 1fr 1fr;
        grid-template-rows: auto 100px;
      }

      这里表示:3 列(第一列固定 200px,后两列平分剩余空间),2 行(第一行自适应内容,第二行固定 100px)。

    3. (可选)放置子元素:通过 grid-column / grid-row 或命名区域定位。

    实战案例 1:经典网页布局(页眉 + 侧边栏 + 主体 + 页脚)

    用 Grid 几行代码就能实现传统“圣杯布局”:

    <div class="page">
      <header>页眉</header>
      <aside>侧边栏</aside>
      <main>主要内容</main>
      <footer>页脚</footer>
    </div>
    .page {
      display: grid;
      grid-template-areas:
        "header header"
        "sidebar main"
        "footer footer";
      grid-template-rows: 80px 1fr 60px;
      grid-template-columns: 200px 1fr;
      min-height: 100vh;
    }
    
    .page > header { grid-area: header; background: #3498db; }
    .page > aside  { grid-area: sidebar; background: #2c3e50; color: white; }
    .page > main   { grid-area: main; background: #ecf0f1; padding: 16px; }
    .page > footer { grid-area: footer; background: #7f8c8d; }

    ✨ 关键点:grid-template-areas 让你用“可视化字符串”定义布局,清晰又易维护。

    实战案例 2:响应式图片画廊

    想要一个自动换行、等宽等高的图片网格?Grid 的 repeat() + minmax() 是神器:

    <div class="gallery">
      <div class="item">1</div>
      <div class="item">2</div>
      <div class="item">3</div>
      <!-- 更多图片... -->
    </div>
    .gallery {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
      gap: 16px;
    }
    
    .item {
      background: #ddd;
      aspect-ratio: 1 / 1; /* 正方形 */
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 24px;
    }

    📱 效果:在大屏显示多列,在手机上自动变成单列,且每项保持正方形比例。

    核心概念速览

    概念 说明 示例
    fr 单位 “fraction”单位,表示剩余空间的比例 1fr 2fr → 第二列是第一列的两倍宽
    repeat() 重复列/行定义 repeat(3, 1fr) = 三等分
    minmax(min, max) 定义轨道的最小/最大尺寸 minmax(100px, 1fr)
    gap 网格线之间的间距 gap: 10px;
    grid-area 给子元素命名,用于 grid-template-areas grid-area: main;

    Grid vs Flexbox:怎么选?

    别纠结“哪个更好”,关键看场景:

    • ✅ 用 Grid 当你需要:
      • 整体页面结构(如 header / sidebar / main / footer)
      • 对齐行和列(如表单、仪表盘、日历)
      • 元素跨多行或多列
    • ✅ 用 Flexbox 当你需要:
      • 单行或单列内的对齐(如按钮组、导航栏)
      • 内容动态伸缩(如聊天消息气泡)
      • 垂直居中(依然最简单!)

    现实中,**一个页面往往同时使用两者**:Grid 搭骨架,Flexbox 调细节。

    学习建议

    • 动手玩:CSS Grid Garden(游戏化学习,超有趣)
    • 调试技巧:在 Chrome DevTools 中选中网格容器,勾选 “Display line numbers” 和 “Show area names”
    • 不要怕写“实验性布局”——Grid 让你快速试错,迭代设计

    结语

    CSS Grid 解放了前端开发者对复杂布局的恐惧。它让我们不再依赖浮动、绝对定位,甚至不再需要框架(如 Bootstrap)来实现基本网格。

    掌握 Grid 后,你会发现:**设计稿到代码的距离,比想象中更近**。

    接下来,我计划写一篇关于 **“用 HTML + CSS 从零搭建个人博客首页”** 的综合实战,把前面学的 HTML 结构、CSS 基础、Flexbox 和 Grid 全部串起来。敬请期待!

    如果你有任何布局难题,或者想看某个具体案例的实现,欢迎留言告诉我 👇

    — Han

  • Flexbox 布局实战:告别浮动,轻松实现现代网页排版

    你好,我是 Han。

    在上一篇《CSS 入门指南》中,我们学会了如何用 CSS 控制颜色、间距和基本样式。但当你想让几个盒子“并排显示”、“垂直居中”或“自动填满剩余空间”时,传统的 float 或 position 往往让人抓狂。

    好消息是:**CSS Flexbox(弹性盒子)** 就是为解决这些问题而生的。它简洁、直观、强大——而且已被所有现代浏览器完美支持。

    今天,我们就通过几个实际场景,手把手掌握 Flexbox 的核心用法。

    什么是 Flexbox?

    Flexbox 是一种一维布局模型,用于在容器内沿主轴或交叉轴排列子元素。你可以用它轻松实现:

    • 水平或垂直居中
    • 等宽/自适应列布局
    • 元素顺序调整
    • 响应式导航栏

    关键思想:**给父容器设置 display: flex,它的直接子元素就变成了“弹性项目”(flex items),可以被灵活控制。

    基础语法:两步开启 Flexbox

    1. 将父容器设为弹性容器:
      .container {
        display: flex;
      }
    2. (可选)调整子元素的行为,比如对齐方式、伸缩比例等。

    就这么简单!接下来,我们通过三个常见例子深入理解。

    实战案例 1:垂直+水平居中一个盒子

    这是前端面试经典题,用 Flexbox 只需两行代码:

    <div class="center-box">
      <div class="item">我被居中了!</div>
    </div>
    .center-box {
      display: flex;
      justify-content: center; /* 主轴居中(默认水平) */
      align-items: center;     /* 交叉轴居中(默认垂直) */
      height: 300px;           /* 必须有高度才能看到垂直居中效果 */
      background-color: #f0f0f0;
    }
    
    .item {
      padding: 16px;
      background: #4CAF50;
      color: white;
      border-radius: 4px;
    }

    ✅ 效果:无论内容多长,`.item` 始终在容器正中央。

    实战案例 2:三栏自适应布局(侧边栏 + 主内容)

    想象一个页面:左侧固定宽度菜单,右侧主内容区自动占满剩余空间。

    <div class="layout">
      <aside class="sidebar">菜单</aside>
      <main class="main">主要内容</main>
    </div>
    .layout {
      display: flex;
      min-height: 100vh; /* 占满视口高度 */
    }
    
    .sidebar {
      width: 200px;
      background: #333;
      color: white;
      padding: 16px;
    }
    
    .main {
      flex: 1; /* 关键!自动填充剩余空间 */
      padding: 16px;
      background: #eee;
    }

    ✨ 注意:flex: 1 是 flex-grow: 1 的简写,意思是“请占满所有可用空间”。

    实战案例 3:响应式导航栏

    让导航链接在桌面端水平排列,在手机端垂直堆叠?Flexbox + 媒体查询轻松搞定。

    <nav class="navbar">
      <a href="#">首页</a>
      <a href="#">关于</a>
      <a href="#">项目</a>
      <a href="#">联系</a>
    </nav>
    .navbar {
      display: flex;
      gap: 16px; /* 元素之间的间距 */
      padding: 16px;
      background: #2c3e50;
    }
    
    .navbar a {
      color: white;
      text-decoration: none;
      padding: 8px 12px;
      border-radius: 4px;
    }
    
    .navbar a:hover {
      background: #34495e;
    }
    
    /* 手机端:垂直排列 */
    @media (max-width: 600px) {
      .navbar {
        flex-direction: column; /* 改变主轴方向为垂直 */
      }
    }

    📱 在小屏幕上,导航会自动变成纵向列表,无需额外 JS!

    核心属性速查表

    属性 作用 常用值
    display: flex 启用 Flexbox —
    flex-direction 主轴方向 row(默认,水平), column(垂直)
    justify-content 主轴对齐方式 flex-start, center, space-between
    align-items 交叉轴对齐方式 stretch(默认), center, flex-start
    flex 子元素伸缩比例 1, 0 1 auto, 2 等
    gap 子元素间距 10px, 1rem 等

    学习建议

    • 先掌握 display: flex + justify-content + align-items 这三个核心。
    • 用浏览器开发者工具实时调试:选中容器,Chrome 会高亮主轴/交叉轴方向。
    • 推荐交互式学习工具:Flexbox Froggy(游戏化练习)。

    结语

    Flexbox 极大地简化了网页布局的复杂度。一旦掌握,你会发现很多“看似很难”的排版需求,其实几行 CSS 就能解决。

    下一篇文章,我计划聊聊 **CSS Grid** —— 它是 Flexbox 的“二维兄弟”,适合构建整体页面网格结构。两者结合,几乎能应对所有布局挑战。

    如果你正在用 Flexbox 做项目,或者卡在某个布局问题上,欢迎在评论区留言!

    — Han

  • CSS 入门指南:让你的网页从“能用”变“好看”

    你好,我是 Han。
    今天,我想和你聊聊前端三剑客之一的 CSS(层叠样式表)——它负责让 HTML 内容变得美观、有层次、有呼吸感。

    如果你刚写完第一个 <h1>Hello, World!</h1>,却发现页面只是黑底白字、毫无美感,别担心——CSS 就是来拯救你的!

    什么是 CSS?

    CSS(Cascading Style Sheets,层叠样式表)是一种用来描述 HTML 元素外观和布局的语言。简单说:

    • HTML 负责“内容是什么”(比如标题、段落、按钮),
    • CSS 负责“看起来什么样”(比如颜色、大小、间距、位置)。

    没有 CSS 的网页就像没有装修的房子——结构完整,但不够舒适。

    如何引入 CSS?

    有三种常见方式:

    1. 内联样式(不推荐)
      直接写在 HTML 标签里:

      <p style="color: blue; font-size: 18px;">这是一段蓝色文字。</p> 

      优点:简单直接;缺点:难以维护,无法复用。

    2. 内部样式表(适合单页)

      在 <head> 中使用 <style> 标签:

      <head>
      <style>
      p { color: blue; }
      </style>
      </head>
    3. 外部样式表(推荐!)
      创建一个 .css 文件(如 styles.css),然后在 HTML 中链接: <link rel="stylesheet" href="styles.css"> 这是专业开发中最常用的方式,便于团队协作和代码复用。

    CSS 基本语法

    CSS 规则由 选择器 + 声明块 组成:

    selector {
      property: value;
    }
    

    例如:

    h1 {
      color: #333;
      font-size: 24px;
      text-align: center;
    }
    

    这段代码的意思是:所有 <h1> 标题 都会变成深灰色、24 像素大小,并居中显示。

    常用 CSS 属性速览

    类别常用属性作用说明
    文本样式color, font-size, font-family, text-align控制文字颜色、大小、字体、对齐方式
    盒模型width, height, padding, margin, border控制元素尺寸与内外边距
    背景background-color, background-image设置背景色或图片
    布局display, flex, grid, position控制元素排列与定位
    响应式@media 查询让网页在手机/电脑上都能看

    💡 小贴士:每个 HTML 元素其实都是一个“盒子”(Box Model)——由内容(content)、内边距(padding)、边框(border)和外边距(margin)组成。理解这一点,是掌握布局的关键!

    一个简单例子

    假设我们想做一个简单的卡片:

    <div class="card">
      <h2>欢迎来到我的博客</h2>
      <p>这里记录我的编程学习之旅。</p>
    </div>
    

    对应的 CSS:

    .card {
      width: 300px;
      padding: 20px;
      margin: 20px auto;
      background-color: #f9f9f9;
      border: 1px solid #ddd;
      border-radius: 8px;
      box-shadow: 0 2px 6px rgba(0,0,0,0.1);
      font-family: Arial, sans-serif;
    }
    
    .card h2 {
      color: #2c3e50;
      margin-top: 0;
    }
    

    效果:一个居中、带圆角和阴影的白色卡片——是不是立刻有了“设计感”?

    学习建议

    1. 多动手:改一行 CSS,看页面变化,是最高效的学习方式。
    2. 用开发者工具:在浏览器按 F12,可以实时编辑 CSS 并预览效果。
    3. 不要死记:先掌握常用属性,其他查文档(MDN Web Docs 是权威资源)。
    4. 从模仿开始:看到喜欢的网页?试着用 CSS 复现它的某个部分。

    结语

    CSS 看似简单,却蕴含强大表现力。它不仅是“美化工具”,更是表达设计意图的语言。随着你深入学习 Flexbox、Grid、动画、响应式设计等进阶内容,你会发现:网页的视觉可能性,远比想象中广阔。

    下一篇文章,我打算聊聊 Flexbox 布局实战——它是现代网页布局的基石之一。如果你也在学 CSS,欢迎留言交流!

    — Han