尧图网站设计 尧图网站设计YAOTU DESIGN
BEGINNER · 避坑指南

新手避坑指南

满屏 div 套娃、滥用 !important、图片不设宽高、抄框架不学基础——四类常见坑和避坑方法。

新手避坑指南
难度 · 入门 时长 · 约 11 分钟 更新 · 2026-07-17

网页设计新手避坑指南:四类常见坑与解法

作者 · 尧图设计编辑部 发布 · 2026-07-17 阅读 · 2.4k

新手踩的坑其实就那么几类,而且几乎每个人都踩过。这篇把最常见的四个坑摆出来,每个坑都给出“错误写法”和“正确写法”对比,告诉你为什么错、怎么改。提前看一遍,能少走不少弯路。

需要说明的是:这些“坑”不是语法错误,代码都能跑,但会让页面难维护、难扩展、难排查问题。属于典型的“能跑但不好”的代码。

提示:这四个坑不是独立存在的,常常几个一起出现。比如满屏 div 的代码往往也滥用 !important,图片不设宽高的页面通常也没做响应式。改的时候可以一起改。

坑一:满屏 div 不用语义化标签

这是新手最常踩的坑。哪里需要一块就套一个 div,再用 class 区分,页面能跑但结构是哑巴——浏览器不知道哪块是导航、哪块是正文,搜索引擎也读不出重点。

错误写法:全 div 套娃,结构没有任何语义信息。

<!-- 错误:全是 div,结构没语义 -->
<div class="header">
  <div class="nav">
    <div class="nav-item">首页</div>
    <div class="nav-item">教程</div>
  </div>
</div>
<div class="main">
  <div class="article">
    <div class="title">文章标题</div>
    <div class="content">正文……</div>
  </div>
</div>
<div class="footer">版权信息</div>

正确写法:用语义化标签表达结构含义,class 只用来补充样式。

<!-- 正确:语义化标签各司其职 -->
<header>
  <nav>
    <a href="index.html">首页</a>
    <a href="tutorials.html">教程</a>
  </nav>
</header>
<main>
  <article>
    <h1>文章标题</h1>
    <p>正文……</p>
  </article>
</main>
<footer>版权信息</footer>

改完之后,header 就是页头、nav 就是导航、main 就是正文、article 就是一篇文章。搜索引擎、屏幕阅读器、未来的你都能一眼看懂结构。

提示:不是所有地方都要强行用语义标签。header、nav、main、article、section、aside、footer 这七个记住,覆盖 90% 的场景。剩下的装饰性容器该用 div 就用 div,别走极端。

坑二:滥用 !important 强行覆盖

新手发现样式不生效,第一反应往往是加 !important 强行覆盖。短期看是解决了,长期看是噩梦——一旦 !important 满天飞,后面改样式根本覆盖不动,最后只能再加一个 !important,恶性循环。

错误写法:样式不生效就加 !important,越加越多。

/* 错误:到处用 !important 强行覆盖 */
.btn {
  color: #fff !important;
  background: #A8D5BA !important;
  padding: 12px 24px !important;
}

/* 后面想改改不动,只能再加 !important */
.hero .btn {
  background: #8ec6a3 !important;
}

正确写法:用更具体的选择器提高优先级,而不是靠 !important 强压。

/* 正确:靠选择器 specificity 提优先级 */
.btn {
  color: #fff;
  background: #A8D5BA;
  padding: 12px 24px;
}

/* 更具体的选择器,优先级自然更高 */
.hero .btn {
  background: #8ec6a3;
}

/* 或者用 BEM 命名避免冲突 */
.btn--hero {
  background: #8ec6a3;
}

选择器优先级是 CSS 的基本规则:行内样式 > ID > 类 > 标签。把这套规则用熟,绝大多数覆盖需求都不需要 !important。真正该用 !important 的场景很少,比如覆盖第三方库样式、强制覆盖不可控的行内样式。

提示:每次想敲 !important 之前,先问自己:是不是选择器写得太宽泛了?是不是 HTML 结构太深导致选择器太长?先解决这两个问题,再考虑 !important。

坑三:图片不设宽高导致布局抖动

新手写图片常常只写 src,不写 width 和 height。后果是:图片加载前浏览器不知道它有多大,会先占很小一块,加载完突然撑开,导致下方内容被顶下去——这就是布局抖动(CLS),体验很差。

错误写法:只写 src,没写尺寸。

<!-- 错误:没写宽高,加载时布局会抖 -->
<img src="images/hero.jpg" alt="首图">

<!-- 错误:只在外层 div 设宽,img 没设 -->
<div class="banner">
  <img src="images/banner.jpg" alt="横幅">
</div>

正确写法:给 img 标签加上 width 和 height,浏览器会预留空间,加载完不会撑动布局。

<!-- 正确:写明宽高,浏览器提前预留空间 -->
<img src="images/hero.jpg" alt="首图" width="1200" height="400">

<!-- 配合 CSS 控制实际显示尺寸(响应式) -->
<style>
  .banner img {
    width: 100%;
    height: auto;
  }
</style>
<div class="banner">
  <img src="images/banner.jpg" alt="横幅" width="1200" height="440">
</div>

关键点:HTML 里的 width/height 是给浏览器算比例用的,CSS 里的 width: 100% 才是控制实际显示宽度。两者配合,既响应式又不抖动。

提示:用 Chrome DevTools 的 Lighthouse 面板可以测出页面的 CLS 分数。如果某个图片导致布局抖动,分数会偏高,照着改就行。

坑四:抄框架不学基础

新手一开始就用 Bootstrap、Tailwind 这类框架,拖一个组件就能用,觉得“真香”。但框架是工具不是替代品,没基础直接抄框架,遇到样式不生效就懵了——不知道框架在背后做了什么,调不动也改不动。

错误心态:跳过 HTML/CSS 基础,直接用框架拖组件。

--- 错误的学习路径 ---
1. 听说 Bootstrap 好用,直接装
2. 复制组件代码,改改文字就上线
3. 想调样式发现看不懂框架的 class
4. 加 !important 强行覆盖(回到坑二)
5. 遇到框架没覆盖的需求就卡死

--- 结果 ---
页面能跑,但完全不知道为什么能跑
换个框架就不会写了
调样式全靠试,没有思路

正确路径:先把原生 HTML/CSS 学透,再上框架。

--- 正确的学习路径 ---
1. 用纯 HTML+CSS 写出完整页面(不靠任何框架)
2. 理解盒模型、选择器、布局、响应式
3. 能徒手写出卡片、导航、表单等常见组件
4. 这时候再学框架,会发现框架只是帮你少写重复代码
5. 框架出问题时,能看懂它的源码思路,能定位能改

--- 结果 ---
框架是加速器而不是拐杖
换框架也能快速上手
遇到问题知道往哪查

框架本质是别人写好的 CSS/JS 封装。你懂基础,框架就是帮手;不懂基础,框架就是黑盒,一旦出问题就抓瞎。学框架没问题,但顺序别反——先基础后框架,地基牢了楼才稳。

提示:判断自己基础够不够,试着不查任何资料,纯手写一个响应式卡片列表页。写出来不卡壳,就可以学框架了;卡在某一步,就回去补对应基础。

四个坑的共同病根

这四个坑看似独立,其实根子是一个:图省事、跳过基础。满屏 div 是因为没学语义化,滥用 !important 是因为不懂选择器优先级,图片不设宽高是因为不懂布局原理,抄框架是因为没打牢基础。

所以避坑的根本方法是慢下来,把每个动作背后的原理搞懂。写代码不是抄对了就完事,得知道为什么这么写、不这么写会怎样。原理通了,坑自然就避开了。

回到新手入门首页,可以再回顾一遍整个学习路线,看看哪一步还有漏洞。