主题
小兔鲜儿(四)
本页对应 小兔鲜儿,共 7 段视频,约 43 分钟。
学习目标
- 能够独立完成“新鲜好物”头部样式,并通过浏览器验证标题字号、字重、颜色、间距、图标、垂直居中及 hover 变色效果符合要求。
- 能够使用 Flex 布局搭建“新鲜好物”bd 模块,实现
ul两端对齐、li固定宽高,并按a > .pic > img + h4 + p结构组织商品内容。 - 能够完成 bd 模块单个
li的图片、标题和价格样式,验证文字水平居中、标题上下间距、价格字号差异及颜色显示正确。 - 能够对商品链接
a进行块级化与高度撑满处理,并添加title提示,使整个卡片区域可点击且悬停体验完整。 - 能够使用“禁止换行、溢出隐藏、省略号替代”三步法处理单行文字溢出,并将其封装为可复用类名后应用到商品标题。
- 能够复制并改造“人气推荐”模块,通过新增
recomment类名和层叠选择器单独修改该模块卡片底色与文字样式,且不影响“新鲜好物”模块。
知识点
先定盒子尺寸,再往里装内容
新鲜好物的下半部分(bd)是一个四列商品列表。先想布局:一行四个、间距均匀,还是用 flex——父级 .bd ul 加 display:flex 和 justify-content:space-between。
但比布局更重要的是先确定每个 li 多大。转写里反复强调:先把 li 的宽高写死,再一个个往里装内容,不要一上来就把四个 li 的结构全写完。因为 li 没有尺寸时,里面的 a、h4、p 摆出来位置全不准,后面还得返工。可以先给临时背景色方便看清盒子。
完整结构如下(alt 换成中文商品名):
html
<!-- 下部分 bd -->
<div class="bd">
<ul>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/goods1.png" alt="KN95级莫兰迪色防护口罩">
</div>
<h4 class="text-overflow">KN95级莫兰迪色防护口罩你值得拥有</h4>
<p>¥ <span>99.00</span></p>
</a>
</li>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/goods1.png" alt="KN95级莫兰迪色防护口罩">
</div>
<h4 class="text-overflow">KN95级莫兰迪色防护口罩你值得拥有</h4>
<p>¥ <span>99.00</span></p>
</a>
</li>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/goods1.png" alt="KN95级莫兰迪色防护口罩">
</div>
<h4 class="text-overflow">KN95级莫兰迪色防护口罩你值得拥有</h4>
<p>¥ <span>99.00</span></p>
</a>
</li>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/goods1.png" alt="KN95级莫兰迪色防护口罩">
</div>
<h4 class="text-overflow">KN95级莫兰迪色防护口罩你值得拥有</h4>
<p>¥ <span>99.00</span></p>
</a>
</li>
</ul>
</div>易错点:304 和 404 很容易写混,转写里就口误过一次,写完回头核对一遍;另外 li 的高度 404 = 图片区 304 + 文字区 100,这笔账要先算清楚。
图片为什么必须包一层 .pic
这是本节最值得记住的设计。
为什么需要:商品图是后台上传的,尺寸不可能永远精确。直接给 img 写死宽高,图会被拉伸变形;只写宽度,高度不够又会被裁掉。
怎么想:那就准备一个尺寸写死的"相框",图片按 100% 宽高塞进去,不管原图多大,都在框里完整显示。
还有第二个理由:以后学 JS 要换图时,只要拿到 .pic 这个父盒子,往里塞一张 img 就行;没有这层,就得从 ul → li → a 一路找下来,非常麻烦。
css
/* 好物内容 -- 公共样式 */
.bd ul {
display: flex;
justify-content: space-between;
}
.bd ul li {
width: 304px;
height: 404px;
background-color: #EEF9F4;
text-align: center;
transition: all .3s;
}
.bd ul li .pic {
width: 304px;
height: 304px;
background-color: skyblue; /* 占位色,图放进来就盖住了 */
}易错点:.pic 的宽高必须写死,不能写百分比——它是给图片当基准的。
a 要撑满整个 li
为什么需要:默认 a 是行内元素,范围只包住文字和图片,鼠标移到 li 的边角不会变成小手,点击区域不完整。
css
.bd ul li a {
display: block;
height: 100%;
}转成块元素后高度给 100%,a 就撑满了整个 404px 的 li。顺手给 a 加 title,鼠标悬停浮出完整商品名,弥补标题被截断的问题。
易错点:只写 display:block 不写 height:100%,a 还是只有内容那么高,等于白改。
h4 单行溢出显示省略号
为什么需要:商品名长短不一,字一多就换行,把下面的价格顶下去,整张卡片高度错乱。
怎么做:三句话,缺一不可,一般做成公共类放进 base.css:
css
.text-overflow {
white-space: nowrap; /* 1. 强制一行,不许换行 */
overflow: hidden; /* 2. 超出的部分切掉 */
text-overflow: ellipsis; /* 3. 切掉的地方用省略号代替 */
}易错点:只写 overflow:hidden 会得到一个被"咬掉一半"的字,很难看;text-overflow 必须配合前两句才生效,而且它只管单行,多行文本要另想办法。
价格与 hover 细节
css
.bd ul li h4 {
font-size: 20px;
margin: 18px 15px 9px;
}
.bd ul li p {
color: #AA2113;
font-size: 17px;
}
.bd ul li p span {
font-size: 22px;
}
.bd ul li:hover {
margin-top: -5px;
box-shadow: 0 15px 30px rgba(0, 0, 0, .42);
}"¥"小、数字大,视觉上分出主次;h4 左右各 15px 是让文字不贴边。hover 时上移 5px 加投影,配合 transition: all .3s 就有浮起的手感。
复用:人气推荐怎么改而不影响上面
人气推荐结构和新鲜好物一模一样,直接复制 bd 整块,只改标题、图片和底色。但改底色有坑:直接写 .bd ul li { background:#fff },上面新鲜好物也会跟着变白。
怎么想:利用层叠性,只在这个盒子范围内覆盖。给 wrapper 追加类名 recommend,再用后代选择器:
css
.recommend .bd ul li {
background-color: #fff;
}
.recommend .bd ul li p {
font-size: 16px;
color: #999;
}权重从 0,2,1 升到 0,3,1,比原规则高,所以只在人气推荐里生效。
易错点:不要为了加类名再套一层 div,直接在 wrapper 上追加即可;也不要直接去改 .bd ul li 本身,否则牵一发动全身。
先看问题:盒子宽度有限,文字却想一行显示

为什么需要:列表、卡片标题、商品名称等位置,盒子宽度通常是固定的,但文字内容长度不可控。如果文字一多就自动换行,会把卡片撑高、打乱布局;如果直接裁掉,又可能像“被咬了一半”,很难看。
怎么想:先准备一个固定宽高的盒子,往里面放一段较长文字,观察它默认会换行、溢出。转写稿里也是先写 .box:宽 200px、高 40px、粉色边框,再写入“里面多的文字123要显示省略号哦”,确认文字确实超出盒子。
怎么做:先搭出下面的完整结构,后续三句话都加在 .box 上。
易错点:不要一上来就写省略号,要先确认盒子有明确宽度;没有宽度限制,文字不会产生“溢出”的前提。
第一步:white-space: nowrap 强制文字不换行
为什么需要:文字默认像水一样,碰到盒子边缘就另起一行。只要换行发生,单行省略号就无从谈起。
怎么想:转写稿解释 normal 是正常换行,nowrap 就是“不要换行”,让文字强制在一行里显示。
怎么做:在 .box 中写 white-space: nowrap;。保存后可以看到文字不再往下掉,而是一直往右排,超出盒子的部分仍然存在。
易错点:拼写容易写成 no wrap 或 right-space,正确是 white-space: nowrap;。这一步只是不换行,还没有隐藏溢出。
第二步:overflow: hidden 把溢出部分隐藏
为什么需要:不换行后,超出盒子的文字还会露出来,需要先把它裁掉。
怎么想:转写稿说“多一个字一刀切掉”,也就是让盒子把超出自身范围的内容隐藏。
怎么做:继续加 overflow: hidden;。此时超出部分看不见了,但可能正好切在半个字上,视觉上比较生硬。
易错点:只写 overflow: hidden; 只能隐藏,不会自动出现省略号;而且如果前面没有 nowrap,文字换行后隐藏效果就不是单行截断。
第三步:text-overflow: ellipsis 用省略号代替
为什么需要:隐藏溢出后,用户不知道后面还有没有内容,省略号能提示“这里被截断了”。
怎么想:text-overflow 管的是文字溢出后的表现,ellipsis 就是省略号。转写稿反复强调这三句话“缺一不可”。
怎么做:再加 text-overflow: ellipsis;。保存后,超出部分会以“…”收尾,而不是硬切半个字。
易错点:ellipsis 容易拼错;它必须配合 overflow: hidden; 和 white-space: nowrap; 才能生效。它处理的是单行文字,多行省略不是这三句话直接解决的。
完整代码与调试过程
下面代码就是本节笔记中的完整示例,三句话按顺序写在 .box 里:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
width: 200px;
height: 40px;
border: 1px solid pink;
/* 1. 不允许文字换行 强制文字一行显示*/
white-space: nowrap;
/* 2. 溢出隐藏 */
overflow: hidden;
/* 3. 文字溢出用省略号代替 */
text-overflow: ellipsis;
}
</style>
</head>
<body>
<div class="box">里面多的文字123要显示省略号哦</div>
</body>
</html>调试时可以按转写稿的顺序观察:先只写盒子和文字,看到换行或溢出;加 nowrap 后文字强制一行;加 overflow: hidden 后超出部分消失;最后加 text-overflow: ellipsis,才出现省略号。这样能清楚知道每一句负责什么。
封装复用与易错点
为什么需要:页面中可能多个地方都要单行省略,例如商品标题、推荐标题。每次都写三句话容易漏。
怎么想:转写稿中把三句话封装成一个类,例如 .txt-overflow,放到公共样式里,需要的地方调用类名即可;如果只在一个标题上用,也可以直接写到对应选择器里。
怎么做:公共类里保留 white-space: nowrap; overflow: hidden; text-overflow: ellipsis;,给标题加上类名即可。
易错点:三句话顺序和配合不能少;盒子要有宽度;文字过长时不要让它自动换行;类名拼写要一致。还要注意,本节讲的是单行溢出省略号,多行文本的处理方式转写稿明确说后面再讲,不能把这三句话直接当成多行方案。
先看效果与结构:人气推荐是复用出来的模块

人气推荐和上面的“新鲜好物”结构非常接近:外层都是 .wrapper,里面分 .hd 和 .bd,.bd 里放 ul > li,每个 li 里用 a 包住图片、标题和说明文字。所以这里不需要从零重写,而是先复制新鲜好物模块,再改标题、图片和局部样式。
为什么需要:复用结构能减少重复劳动,也保证两个模块的间距、对齐方式一致。
怎么想:先确认哪些是公共结构,哪些是人气推荐自己的内容。公共结构保留,局部差异用新的类名和复合选择器覆盖。
怎么做:给外层加 recommend 类名,标题改成“人气推荐”,说明文字改成“人气爆款 不容错过”,图片换成 recommend1.png、recommend2.png、recommend3.png。
易错点:不要直接改公共的 .bd li 或 .bd li p,否则会影响上面的新鲜好物模块。
html
<!-- 人气推荐 -->
<!-- 人气推荐 -->
<div class="wrapper recommend">
<!-- 上侧 hd -->
<div class="hd">
<h2>人气推荐
<span>人气爆款 不容错过</span>
</h2>
</div>
<!-- 下部分 bd -->
<div class="bd">
<ul>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/recommend1.png" alt="">
</div>
<h4 class="text-overflow">特惠推荐</h4>
<p>我猜得到 你的需要</p>
</a>
</li>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/recommend1.png" alt="">
</div>
<h4 class="text-overflow">特惠推荐</h4>
<p>我猜得到 你的需要</p>
</a>
</li>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/recommend2.png" alt="">
</div>
<h4 class="text-overflow">特惠推荐</h4>
<p>我猜得到 你的需要</p>
</a>
</li>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/recommend3.png" alt="">
</div>
<h4 class="text-overflow">特惠推荐</h4>
<p>我猜得到 你的需要</p>
</a>
</li>
</ul>
</div>
</div>给外层加 recommend:用类名圈定修改范围
为什么需要:人气推荐要改白底和文字颜色,但新鲜好物不能跟着变。必须先把人气推荐这个盒子“圈”出来。
怎么想:笔记里的外层是 class="wrapper recommend",其中 recommend 就是本模块的独立标识。后面写样式时,用 .recommend .bd li 这种复合选择器,只命中人气推荐内部。
怎么做:保留 wrapper 的公共布局,同时追加 recommend。
易错点:只写 .bd li 会改到所有模块;把 recommend 加到错误层级也会导致选择器失效。
覆盖 li 白底:利用层叠性做局部覆盖
为什么需要:公共的小 li 可能有灰色底,而人气推荐需要白色底。
怎么想:不要改公共规则,而是在 .recommend 范围内重新声明背景色。复合选择器权重更高,会覆盖前面的公共样式。
怎么做:写 .recommend .bd li { background-color: #fff; }。
易错点:如果只写 .recommend li,可能因为权重或层级不够覆盖失败;调试时可在浏览器检查面板看最终生效的是哪条规则。
css
.recommend .bd li {
background-color: #fff;
}调整 p 的字号和颜色:只改人气推荐内部
为什么需要:人气推荐下方说明文字需要 16px、灰色,而其他模块的文字样式不能受影响。
怎么想:继续用 .recommend 限定范围,选中 .bd li p,只改字号和颜色。颜色使用项目里已有的 var(--hui),不要随手写一个近似灰。
怎么做:写 .recommend .bd li p { font-size: 16px; color: var(--hui); }。
易错点:不要写成全局 p;不要漏掉 .recommend;如果颜色没生效,先确认 --hui 变量是否已在公共样式中定义。
css
.recommend .bd li p {
font-size: 16px;
color: var(--hui);
}调试与收尾:先结构、再局部样式、最后检查影响范围
从调试过程看,合理的顺序是:先复制模块并改类名,再换标题和图片,最后补局部 CSS。改完后重点检查两件事:人气推荐是否变成白底、说明文字是否为 16px 灰色;同时回看上方新鲜好物有没有被误改。若白底没生效,优先检查 recommend 是否加在外层、选择器是否写成 .recommend .bd li;若文字颜色没变,检查是否被更高权重规则覆盖。这样既复用了结构,又把修改范围控制在本模块内。
课件图示(PPTX)

代码示例
示例 1:新鲜好物 bd 模块(结构 + 公共样式)
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>新鲜好物 - bd</title>
<style>
* { margin: 0; padding: 0; }
ul { list-style: none; }
a { text-decoration: none; color: #333; }
/* 好物内容 -- 公共样式 */
.bd ul {
display: flex;
justify-content: space-between;
}
.bd ul li {
width: 304px;
height: 404px;
background-color: #EEF9F4;
text-align: center;
transition: all .3s;
}
.bd ul li:hover {
margin-top: -5px;
box-shadow: 0 15px 30px rgba(0, 0, 0, .42);
}
/* A 转块 + 高度 100%,整个盒子都是点击区 */
.bd ul li a {
display: block;
height: 100%;
}
.bd ul li .pic {
width: 304px;
height: 304px;
background-color: skyblue;
}
/* 图片撑满 .pic 盒子,保证完整显示 */
.bd ul li .pic img {
width: 100%;
height: 100%;
}
.bd ul li h4 {
font-size: 20px;
margin: 18px 15px 9px;
}
.bd ul li p {
color: #AA2113;
font-size: 17px;
}
.bd ul li p span {
font-size: 22px;
}
/* 文字溢出显示省略号 —— 公共类 */
.text-overflow {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>
</head>
<body>
<!-- 下部分 bd -->
<div class="bd">
<ul>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/goods1.png" alt="">
</div>
<h4 class="text-overflow">KN95级莫兰迪色防护口罩你值得拥有</h4>
<p>¥ <span>99.00</span></p>
</a>
</li>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/goods1.png" alt="">
</div>
<h4 class="text-overflow">KN95级莫兰迪色防护口罩你值得拥有</h4>
<p>¥ <span>99.00</span></p>
</a>
</li>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/goods1.png" alt="">
</div>
<h4 class="text-overflow">KN95级莫兰迪色防护口罩你值得拥有</h4>
<p>¥ <span>99.00</span></p>
</a>
</li>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/goods1.png" alt="">
</div>
<h4 class="text-overflow">KN95级莫兰迪色防护口罩你值得拥有</h4>
<p>¥ <span>99.00</span></p>
</a>
</li>
</ul>
</div>
</body>
</html>关键行与易错点
display: flex加在ul(“亲爸爸”)上,不是加在li上;justify-content: space-between实现两端对齐。li的304px × 404px必须写死,text-align: center让图片和文字一起水平居中。.bd ul li a { display: block; height: 100%; }是重点:a默认是行内元素,不写这两句,鼠标只有落在文字上才出现小手,盒子边缘点不到。.pic用固定 304×304 的 div 包住图片,图片给width:100%; height:100%,这样不管上传的图多大都能完整显示;后面 JS 换图只需找到.pic往里塞图,不用在一堆标签里找。transition: all .3s写在li上,不要写在:hover里,否则移出时没有过渡。h4的margin: 18px 15px 9px中左右 15px 不能省,否则文字贴边,且配合.text-overflow才有可用的溢出宽度。p是 17px、p span是 22px,大小分开写;不写 span 就只能整行一个字号。
示例 2:溢出文字显示省略号(三步法)
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>溢出文字显示省略号</title>
<style>
.box {
width: 200px;
height: 40px;
border: 1px solid pink;
/* 1. 不允许文字换行,强制文字一行显示 */
white-space: nowrap;
/* 2. 溢出隐藏 */
overflow: hidden;
/* 3. 文字溢出用省略号代替 */
text-overflow: ellipsis;
}
</style>
</head>
<body>
<div class="box">里面多的文字123要显示省略号哦</div>
</body>
</html>关键行与易错点
- 三句话缺一不可,顺序就是:
white-space: nowrap→overflow: hidden→text-overflow: ellipsis。 white-space默认是normal,文字像水一样碰到边就换行,一换行就永远出不来省略号,所以第一步必须先nowrap。- 只写
text-overflow: ellipsis没有任何效果,它必须建立在“不换行 + 溢出隐藏”之上。 - 只写
overflow: hidden会把文字“一刀切”切一半,很难看,所以第三句用省略号替代。 - 这套写法只能处理单行,多行文本不适用。
- 页面中多处要用时,把它抽成公共类放进
base.css,例如.text-overflow { … },HTML 里直接class="text-overflow"调用,不要每处都复制三行。
示例 3:人气推荐(复用 bd 结构 + recommend 层叠覆盖)
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>人气推荐</title>
<style>
/* --hui 在 base.css 中定义,这里给出灰色取值以便直接运行 */
:root { --hui: #999; }
* { margin: 0; padding: 0; }
ul { list-style: none; }
a { text-decoration: none; color: #333; }
/* ===== 公共样式(与新鲜好物共用) ===== */
.bd ul {
display: flex;
justify-content: space-between;
}
.bd ul li {
width: 304px;
height: 404px;
background-color: #EEF9F4;
text-align: center;
transition: all .3s;
}
.bd ul li:hover {
margin-top: -5px;
box-shadow: 0 15px 30px rgba(0, 0, 0, .42);
}
.bd ul li a {
display: block;
height: 100%;
}
.bd ul li .pic {
width: 304px;
height: 304px;
background-color: skyblue;
}
.bd ul li .pic img {
width: 100%;
height: 100%;
}
.bd ul li h4 {
font-size: 20px;
margin: 18px 15px 9px;
}
.bd ul li p {
color: #AA2113;
font-size: 17px;
}
.text-overflow {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* ===== 人气推荐:只改自己,不影响上面的模块 ===== */
.recommend .bd li {
background-color: #fff;
}
.recommend .bd li p {
font-size: 16px;
color: var(--hui);
}
</style>
</head>
<body>
<!-- 人气推荐 -->
<div class="wrapper recommend">
<!-- 上侧 hd -->
<div class="hd">
<h2>人气推荐
<span>人气爆款 不容错过</span>
</h2>
</div>
<!-- 下部分 bd -->
<div class="bd">
<ul>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/recommend1.png" alt="">
</div>
<h4 class="text-overflow">特惠推荐</h4>
<p>我猜得到 你的需要</p>
</a>
</li>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/recommend1.png" alt="">
</div>
<h4 class="text-overflow">特惠推荐</h4>
<p>我猜得到 你的需要</p>
</a>
</li>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/recommend2.png" alt="">
</div>
<h4 class="text-overflow">特惠推荐</h4>
<p>我猜得到 你的需要</p>
</a>
</li>
<li>
<a href="#" title="KN95级莫兰迪色防护口罩">
<div class="pic">
<img src="./uploads/recommend3.png" alt="">
</div>
<h4 class="text-overflow">特惠推荐</h4>
<p>我猜得到 你的需要</p>
</a>
</li>
</ul>
</div>
</div>
</body>
</html>关键行与易错点
class="wrapper recommend":recommend不是在wrapper里再套一层盒子,而是直接在wrapper后面加类名,作用只是“标识这个盒子”,方便用后代选择器提高权重。.recommend .bd li权重是0,2,1(2 个类 + 1 个标签),高于公共的.bd ul li的0,1,2,所以只有人气推荐变成白底,上面的新鲜好物不受影响。- 易错点:图省事直接写
.bd ul li { background-color: #fff; }会把新鲜好物那一块也改成白底——必须通过.recommend圈定作用范围。 - 同理
.recommend .bd li p把描述文字改成 16px、灰色var(--hui),h4的大标题样式完全继承公共样式,不用重写。 - 结构上完全复用新鲜好物:
ul > li > a > .pic + h4 + p,复制后只换图片名(recommend1/2/3.png)和文字内容,不重写样式。 - 复制
li时先折叠再复制,避免多一个少一个。
常见错误
- 现象:图片直接塞进
li,换图后尺寸失控。→ 原因:缺少固定图片容器。→ 修法:先写.pic定宽高,再放img,并让图片宽高100%。 - 现象:鼠标只在文字上变小手,盒子空白处点不了。→ 原因:
li内a仍是行内元素且未撑满。→ 修法:给li a加display:block; height:100%。 - 现象:改人气推荐白底后,新鲜好物也变白。→ 原因:直接覆盖
.bd ul li公共样式。→ 修法:给外层加recommend,写.recommend .bd ul li局部覆盖。 - 现象:标题过长自动换行,把价格挤下去。→ 原因:未做单行溢出处理。→ 修法:给标题加
white-space:nowrap; overflow:hidden; text-overflow:ellipsis;,并保留左右margin。 - 现象:文字被切一半,没有省略号。→ 原因:省略号三件套缺项,常见是漏了
text-overflow或white-space。→ 修法:三句补齐,封装成.text-overflow类复用。 - 现象:价格中
¥和数字一样大,或p span不生效。→ 原因:未把数字单独包span,或选择器写错层级。→ 修法:p设常规字号,p span单独设更大字号。 - 现象:
hover上浮/阴影无过渡或效果不对。→ 原因:transition没加在li上或hover选择器不匹配。→ 修法:li加transition: all .3s,:hover写margin-top:-5px和box-shadow。
练习
- 为“新鲜好物”的每个
li补全a的点击范围,要求鼠标经过卡片任意位置都出现小手;写出需要修改的选择器和两条关键声明。 - 给商品标题实现单行省略号,并说明你会把三行 CSS 写在
base.css的公共类里,还是直接写在h4上;写出对应类名或选择器。 - 复制“新鲜好物”生成“人气推荐”,只修改白底和描述文字样式;写出局部覆盖选择器,并说明为什么不能直接改
.bd ul li、.bd ul li p。 - 给商品卡片加
hover上浮 5px、阴影0 15px 30px rgba(0,0,0,.42)和 0.3s 过渡;写出加在哪个元素上及关键 CSS。 - 调整价格结构,使
¥为常规字号、99.00更大;写出p内部 HTML 和对应 CSS 选择器。
原视频对照
| # | 视频 | 时长 |
|---|---|---|
| 1 | 新鲜好物头部完成 | 06:00 |
| 2 | 新鲜好物bd模块盒子搭建 | 08:42 |
| 3 | bd模块小li制作 | 05:45 |
| 4 | bd模块a链接特殊处理 | 04:51 |
| 5 | 文字溢出显示省略号 | 07:10 |
| 6 | 人气推荐模块制作 | 05:26 |
| 7 | 人气推荐模块结束 | 05:44 |
小结
- 结构搭建先大后小:先
ul/li,再a,再.pic/h4/p,不要一口气把所有内容铺完。 - 商品图必须优先考虑
.pic容器,图片宽高交给容器约束。 li内a要撑满整卡,点击区域和title提示才完整。- 公共模块复用后,局部差异用“外层类名 + 后代选择器”覆盖,避免污染其他模块。
- 单行文字溢出统一用省略号三件套,适合封装成公共类复用。
- 复制
li时先折叠结构再整段复制,减少多一个、少一个和结构错位。 hover动画、阴影、过渡属于增强项,应在基础布局稳定后再加。- 价格、标题等细节要用最小范围选择器处理,先保证结构正确,再调字号、颜色和间距。