Skip to content

HTML 与 CSS

一、HTML:页面的骨架

HTML(超文本标记语言)用标签描述页面结构。一个商品卡片长这样:

html
<div class="product-card">
  <img src="/images/phone.jpg" alt="手机" />
  <h3>某品牌手机 512GB</h3>
  <p class="price">¥3999</p>
  <button>加入购物车</button>
</div>

高频标签速查:

标签用途
div / span通用容器(块级 / 行内)
h1~h6标题
p段落
a链接
img图片(必须写 alt
ul / li无序列表
button / input按钮 / 输入框
header / main / footer语义化布局(可读性更好)

语义化

能用 <header> 就别用 <div class="header">。语义化标签对 SEO 和可访问性友好,面试也常问。

二、CSS:页面的样式

CSS 三件套:选择器 + 属性 + 值

css
.product-card {
  width: 240px;
  border: 1px solid #eee;
  border-radius: 8px;
  padding: 16px;
  transition: transform 0.2s;
}
.product-card:hover {
  transform: translateY(-4px);   /* 悬停上浮,商城常见的卡片效果 */
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
}

盒子模型(面试必问)

CSS 中每个元素都是一个"盒子":

┌──────────────────────┐ ← margin 外边距(和其他元素的距离)
│  ┌────────────────┐  │ ← border 边框
│  │ ┌────────────┐ │  │ ← padding 内边距
│  │ │  content   │ │  │   内容区
│  │ └────────────┘ │  │
│  └────────────────┘  │
└──────────────────────┘
css
.box {
  box-sizing: border-box;   /* 推荐:width 包含 border 和 padding */
  width: 200px;
  padding: 20px;
}

布局两大神器:Flex 和 Grid

Flex(一维布局)——商品卡片一行排开:

css
.product-list {
  display: flex;
  gap: 16px;
  justify-content: space-between;  /* 主轴对齐 */
  align-items: center;             /* 交叉轴对齐 */
  flex-wrap: wrap;                 /* 换行 */
}

Grid(二维布局)——商品网格:

css
.product-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 16px;
}

minmax(240px, 1fr) 让卡片在窄屏自动变一列、宽屏变多列,这就是最简单的响应式

移动端适配

html
<meta name="viewport" content="width=device-width, initial-scale=1" />
css
@media (max-width: 768px) {
  .product-grid { grid-template-columns: 1fr 1fr; }
}

三、CSS 在 Vue/React 里的写法

框架里的 CSS 基本一样,只是多了一些"作用域"写法:

  • Vue:<style scoped> 让样式只作用于当前组件。
  • React:*.module.css(CSS Modules)达到同样的隔离效果。

两者解决的是同一个问题:避免全局样式互相污染

这一章的核心目标

看到 HTML 能读懂结构,看到 CSS 能猜出布局。不用会背,但遇到要"把一个列表排成一行"时,能想起用 display: flex

基于 MIT 协议发布,可自由学习与修改