现代页面布局应弃用float和table,优先采用flex和grid;但前提是html结构语义必须正确,否则css再强也无法解决错位、撑破和响应失效等问题。

直接说结论:现代页面布局不用 float、不靠 table,display: flex 和 display: grid 是当前最可靠、最易控的方案;但前提是必须先理清 HTML 结构语义,否则再强的 CSS 也救不了错位、撑破、响应失效这些问题。
HTML结构语义错了,CSS再怎么调都是白忙
很多初学者一上来就猛写 float: left 或堆 div class="left",结果 header 跑到 content 下面、footer 不贴底、侧边栏宽度算崩——根本原因不是 CSS 写得不对,而是 HTML 没按逻辑分层。
-
<header></header>只放站点标识、主标题,别塞导航菜单(那是<nav></nav>的事) -
<main></main>必须且只能有一个,里面不要再套一个<div class="container"> 当主体——它本身就是语义化的“主体”<li> <code><aside></aside>不等于“右边那个 div”,它代表与当前内容相关但非核心的辅助信息(比如文章页的“相关推荐”,不是全站通用的广告栏) - 避免无意义嵌套:
<div><div><p>文字</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill7761" title="Article To Html"><img src="https://img.php.cn/upload/skill/000/000/081/179168408018805.jpg" alt="Article To Html" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill7761" title="Article To Html" class="overflowclass">Article To Html</a> <p class="overflowclass">文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。</p> </div> <a rel="nofollow" href="/xiazai/skill7761" title="Article To Html" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div></div></div>—— 直接用<section><p>文字</p></section>更清晰,也更利于后续用 CSS 选中控制 - 外层用
flex-direction: column控制垂直流向:.page { display: flex; flex-direction: column; min-height: 100vh; } -
<main></main>单独设为 flex 容器,实现左右分栏:main { display: flex; flex: 1; } - 侧边栏固定宽、内容区自适应:
aside { width: 240px; }+section { flex: 1; }(注意这里不用flex: 1 1 auto,默认值已足够) - 别忘了清除浮动遗留影响:如果旧代码混用了
float,务必加overflow: hidden或display: flow-root到父容器,否则 flex 子项可能被 float 元素干扰 - 简单三栏仍推荐 Flex:语义清晰、浏览器兼容性好(IE11 都支持基本 flex)、调试直观
- Grid 更适合这类场景:
grid-template-columns: 240px 1fr 320px;+grid-template-rows: auto 1fr auto;,明确划分出 header / main / footer 的行高,以及 main 内部的 sidebar / content / ad 栏宽 - 注意
grid-area必须和grid-template-areas中的名字完全一致,大小写、空格、引号都不能错,否则整个区域塌陷为默认流 - 不要在同一个容器上既写
display: grid又写display: flex—— 后者会被完全忽略,容易误以为样式没生效 - 必须在 CSS 开头加:
* { box-sizing: border-box; margin: 0; padding: 0; } -
border-box让width包含padding和border,所见即所得;不用它,width: 300px+padding: 10px= 实际占宽 320px - 别只重置
div或section,*是唯一能覆盖input、button、textarea等表单元素默认边距的方式 - 某些 UI 框架(如 Bootstrap)已内置该重置,但自己手写时绝不能跳过——它不是“可选优化”,是布局稳定的底线
Flexbox 实现三栏自适应布局的关键写法
常见错误是把 display: flex 加在 上,然后发现 <header></header> 和 <footer></footer> 被强行拉伸、高度失控。正确做法是分层设 flex 容器。
Grid 布局适合复杂区域划分,但别过早替代 Flex
Grid 真正优势在于二维控制(行列同时定义),比如“头部跨两列、侧边栏固定行高、内容区自动填满剩余空间”。但新手常误用 grid-template-areas 写一堆字符串,结果改一个区域名字就要同步修七八处。
盒模型不初始化,布局随时会破
这是作业和实战中最隐蔽的扣分点:明明写了 width: 100%,元素却溢出容器;设置了 padding: 20px,内容区直接变窄还挤出滚动条——八成是忘了全局重置盒模型。
真正卡住人的从来不是 flex 怎么写,而是 header 里塞了 nav、main 里又包了一层 container、aside 放在 footer 下面还加了 float——结构一乱,所有 CSS 都在给错误买单。










