品优购:主体页,列表页,注册页

2023-12-03 07:52
文章标签 注册 列表 主体 品优购

本文主要是介绍品优购:主体页,列表页,注册页,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                    目录

main部分

recom推荐部分

新建列表list.html和list.css

创建register.html 和register.css


main部分

focus焦点图通过ul和li框住img,右侧分为三栏

  • 第一栏newsflash盒子,首先边框news-hd只写bottom,线条为dotted;然后news-bd包含四个li
  • 第二栏先有一个不包含顶部边框的大盒子,通过ul和li并将每个li浮动得到12个呈长方形摆放的小盒子,最后一行一开始会掉下去,通过调整ul的大小为252解决;这样会多一个边框,在lifeservice盒子里设置overflow:hidden,去除该边框。
  • 第二栏里文字显示省略号需要三步,先overflow:hidden,whitespace,text-overflow
  • .news-hd {height: 33px;line-height: 33px;border-bottom: 1px dotted #ccc;padding: 0 15px;}.news-hd h5 {float: left;font-size: 14px;font-weight: 400px;
    }.news-hd .more {position: relative;float: right;
    }.news-hd .more::after {position: absolute;font-family: 'icomoon';content: '\e920';
    }.news-bd ul li {height: 24px;line-height: 24px;overflow: hidden;white-space: nowrap;/* 一行显示 */text-overflow: ellipsis;/* 省略号 */}.news-bd {padding: 5px 15px 0;
    }

  • 12个小盒子都只包括右边框和下边框
<!-- main start --><div class="w"><div class="main"><div class="focus"><ul><li><img src="upload/focus1.png"><!-- 结构不能直接插入图片,一定要放在ul下的li --></li></ul></div><div class="newsflash"><div class="news"><div class="news-hd"><!-- 品优购快报左浮动,更多右浮动 --><h5>品优购快报</h5><a href="#" class="more">更多</a></div><div class="news-bd"><ul><li><a href="#"><strong>[notice]</strong>&nbsp;世界很大,甲乙丙丁,你再说一遍</a></li><li><a href="#"><strong>[notice]</strong>&nbsp;世界很大,甲乙丙丁,你再说一遍</a></li><li><a href="#"><strong>[notice]</strong>&nbsp;世界很大,甲乙丙丁,你再说一遍</a></li><li><a href="#"><strong>[notice]</strong>&nbsp;世界很大,甲乙丙丁,你再说一遍</a></li></ul></div></div><div class="lifeservice"><ul><!-- 思路:中间的盒子四个边框将顶部边框修改为0,里面的小格子都只有右边和底部边框 --><li><i></i><p>话费</p></li><li><i></i><p>话费</p></li><li><i></i><p>话费</p></li><li><i></i><p>话费</p></li><li><i></i><p>话费</p></li><li><i></i><p>话费</p></li><li><i></i><p>话费</p></li><li><i></i><p>话费</p></li><li><i></i><p>话费</p></li><li><i></i><p>话费</p></li><li><i></i><p>话费</p></li><li><i></i><p>话费</p></li></ul></div><div class="bargain"><img src="upload/bargain.png"></div></div><!-- 划分为上中下三个盒子 --></div></div><!-- main end -->
.main {width: 980px;height: 455px;margin-left: 220px;margin-top: 10px;
}.focus {float: left;width: 721px;height: 455px;background-color: purple;
}.newsflash {float: right;width: 250px;height: 455px;/* background-color: skyblue; */
}.news {height: 165px;/* background-color: pink; */border: 1px solid #ccc;
}.lifeservice {overflow: hidden;/* 把ul盒子变大,从250修改252,但是边框也超出了 */height: 209px;/* background-color: purple; */border: 1px solid #ccc;border-top: 0;
}.lifeservice ul li {float: left;width: 63px;height: 71px;border-right: 1px solid #ccc;border-bottom: 1px solid #ccc;/* 此时出现问题,最后一行掉下去了,解决是把ul变大 */text-align: center;
}.lifeservice ul {width: 252px;
}.lifeservice ul li i {display: inline-block;width: 24px;height: 28px;background-color: pink;margin-top: 12px;background: url(../images/icons.png) no-repeat -19px -15px;
}.bargain {margin-top: 5px;
}

recom推荐部分

一个大盒子包含左边recom-hd和右边recom-bd两个盒子,都为float:left;右边大盒子里通过ul和li插入图片

注意,只有前三个盒子的右侧需要竖线,所以通过nth-child(-n+3)选中前三个

<!-- 推荐模块start --><div class="w recom"><div class="recom_hd"><img src="images/recom.png"></div><div class="recom_bd"><ul><li><img src="upload/recom_03.jpg"></li><li><img src="upload/recom_03.jpg"></li><li><img src="upload/recom_03.jpg"></li><li><img src="upload/recom_03.jpg"></li></ul></div></div><!-- 推荐模块end -->
.recom {height: 163px;background-color: #ebebeb;margin-top: 12px;
}.recom_hd {float: left;height: 163px;width: 205px;background-color: rgba(0, 0, 0, 0.555);text-align: center;padding-top: 30px;
}.recom_bd {float: left;
}.recom_bd ul li {position: relative;float: left;}.recom_bd ul li img {/* 写死宽度和高度,防止后台上传图片有大有小 */width: 248px;height: 163px;
}.recom_bd ul li:nth-child(-n+3)::after {/* n+3从第三个往后选 */content: '';position: absolute;right: 0;top: 10px;width: 1px;height: 145px;background-color: #ddd;
}

 

新建列表list.html和list.css

在list首页上,加上seo优化部分,依次添加<link rel="shortcut icon" href="favicon.ico">
    <link rel="stylesheet" href="css/common.css">
    <link rel="stylesheet" href="css/base.css">
    <link rel="stylesheet" href="css/list.css">
注意,html文件里list写在common楼下,把冲突的部分覆盖掉

1)在logo右边增加秒杀模块:
放在一个盒子.sk里,添加盒子左边框,绝对定位,通过left和top确定位置

2)nav栏里分为两块,分别为sk_list和sk_con,都用ul和li的框架;两者都左浮动

3)*经常遇到问题,当字数不同如何分隔合适距离:通过调整ul li a,将其转化为block后给宽和高,指定padding

4)更多分类里的箭头:伪元素after后,content为'\e..',设置font-family为icomoon;.sk_con ul li:last-child a::after;
这里选的是li而不是a因为a之间是表兄弟不能直接用nthchild选,意思是最后一个li的盒子里的a文字右边放这个小三角


5)具体内容里同样被划分为sk_hd和sk_bd


在sk_bd里遇到问题:


1 盒子放不下:需要选中所有行的最后一个盒子使其右边没有边距:
.sk_bd ul li:nth-child(4n)

2 底部升上来:因为没有给包含这么多手机的大边框一个高度,没给高度因为后续可能会增加手机个数,而所有手机又是浮动的 
解决:给浮动元素的父亲添加class为清除浮动 

3 选中每个盒子会添加红色边框:但是选中后一方面边框只显示上方和左方的却没有右边和下方的,另一方面鼠标经过盒子时盒子会掉下去一下
解决:li本来就自带边框,且可以通过万能的overflow:hidden,这句话同样可以解决当文字跑到浮动的元素旁边试图文字环绕的情况

.nav {/* 错误原因:女装那一栏都是浮动,但是宽度大,那么123abc文字只会围绕他们 */overflow: hidden;
}.sk {position: absolute;left: 190px;top: 40px;padding: 3px 0 0 14px;border-left: 1px solid #c81623;
}.sk_list {float: left;
}.sk_list ul li {float: left;
}.sk_list ul li a {display: block;line-height: 47px;padding: 0 30px;font-size: 16px;font-weight: 700;}.sk_con {float: left;
}.sk_con ul li {float: left;}.sk_con ul li a {display: block;line-height: 47px;padding: 0 20px;font-size: 14px;/* font-weight: 700; */}.sk_con ul li:last-child a::after {/* 这里选的是li而不是a因为a之间是表兄弟不能直接用nthchild选 */content: '\e91e';font-family: 'icomoon';}.sk_bd ul li {overflow: hidden;float: left;margin-right: 13px;width: 290px;height: 460px;border: 1px solid transparent;
}/* 第一个问题:一行放不下,选出所有4的倍数去除他的margin */
.sk_bd ul li:nth-child(4n) {margin-right: 0;
}/* 第二个问题,底部升上来,因为没有给包含这么多手机的大边框一个高度,而所有手机又是浮动的 */
/* 解决:给浮动元素的父亲加oveflow或者清除浮动 */
.sk_bd ul li:hover {border: 1px solid #c81623;/* 本质li就有像素边框,鼠标上去变颜色 */
}
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>列表页-综合网购首选-正品低价、品质保障、配送及时、轻松购物!</title><!-- 网站说明 --><meta name="description"content="品优购商城-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务,为您提供愉悦的网上购物体验!" /><!-- 关键字 --><meta name="keywords" content="网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东" /><link rel="shortcut icon" href="favicon.ico"><link rel="stylesheet" href="css/common.css"><link rel="stylesheet" href="css/base.css"><link rel="stylesheet" href="css/list.css"><!-- list写在common楼下,会把冲突的部分覆盖掉 -->
</head><body><!-- 快捷导航模块start --><section class="shortcut"><div class="w"><div class="fl"><ul><li>品优购欢迎您!&nbsp;</li><li><a href="#">请登录</a>&nbsp;<a href="#" class="style_red">免费注册</a></li></ul></div><div class="fr"><!-- 有的三个字有的四个字 --><ul><li>我的订单</li><li></li><li class="arrow-icon">我的品优购</li><li></li><li>品优购会员</li><li></li><li>企业采购</li><li></li><li class="arrow-icon">关注品优购</li><li></li><li class="arrow-icon">客户服务</li><li></li><li class="arrow-icon">网站导航</li></ul></div></div></section><!-- 快捷导航模块end --><!-- header模块start --><header class="header w"><div class="logo"><h1><a href="index.html" title="品优购商城">品优购商城</a><!-- 加了title鼠标放上面能显示信息 --></h1></div><!-- 列表页面的秒杀模块 --><div class="sk"><img src="images/sk.png" alt=""></div><!-- search模块 --><div class="search"><input type="search" name="" id="" placeholder="语言开发"><button>搜索</button><!-- 表单有默认灰色边框,搜索框的蓝色边框也不需要 --></div><div class="hotwords"><a href="#" class="style_red">优惠购首发</a><a href="#">亿元优惠</a><a href="#">9.9元团购</a><a href="#">美满99减30</a><a href="#">办公用品</a><a href="#">电脑</a><a href="#">通信</a></div><div class="shopcar">我的购物车<i class="count">8</i></div></header><!-- header end --><!-- nav start --><nav class="nav"><div class="w"><div class="sk_list"><ul><li><a href="#">品优秒杀</a></li><li><a href="#">品优秒杀</a></li><li><a href="#">品优秒杀</a></li></ul></div><div class="sk_con"><ul><li><a href="#">女装</a></li><li><a href="#" class="style_red">女鞋</a></li><li><a href="#">女装</a></li><li><a href="#">女装</a></li><li><a href="#">女装</a></li><li><a href="#">女装</a></li><li><a href="#">女装</a></li><li><a href="#">女装</a></li><li><a href="#">更多分类</a></li></ul></div></div></nav><!-- nav end --><div class="w sk_container"><div class="sk_hd"><img src="upload/bg_03.png" alt=""></div><div class="sk_bd"><ul class="clearfix"><li><img src="upload/list.jpg" alt=""></li><li><img src="upload/list.jpg" alt=""></li><li><img src="upload/list.jpg" alt=""></li><li><img src="upload/list.jpg" alt=""></li><li><img src="upload/list.jpg" alt=""></li><li><img src="upload/list.jpg" alt=""></li><li><img src="upload/list.jpg" alt=""></li><li><img src="upload/list.jpg" alt=""></li><li><img src="upload/list.jpg" alt=""></li></ul></div></div><!-- 底部模块制作start --><footer class="footer"><div class="w"><div class="mod_service"><ul><li><h5></h5><div class="service_txt"><h4>正品保障</h4><p>正品保障,提供发票</p></div></li><li><h5></h5><div class="service_txt"><h4>正品保障</h4><p>正品保障,提供发票</p></div></li><li><h5></h5><div class="service_txt"><h4>正品保障</h4><p>正品保障,提供发票</p></div></li><li><h5></h5><div class="service_txt"><h4>正品保障</h4><p>正品保障,提供发票</p></div></li></ul></div><div class="mod_help"><dl><dt>服务指南</dt><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd></dl><dl><dt>服务指南</dt><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd></dl><dl><dt>服务指南</dt><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd></dl><dl><dt>服务指南</dt><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd></dl><dl><dt>服务指南</dt><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd><dd><a href="#">购物流程</a></dd></dl><dl><dt>服务指南</dt><dd><img src="images/wx_cz.jpg">品优购客户端</dd></dl></div><div class="mod_copyright"><div class="links">关于我们 | 联系我们 | 联系客服 | 商家入驻 | 营销中心 | 手机品优购 | 友情链接 | 销售联盟 | 品优购社区 | 品优购公益 | English Site | Contact U</div><div class="copyright">地址:北京市昌平区建材城西路金燕龙办公楼一层 邮编:100096 电话:400-618-4000 传真:010-82935100 邮箱: zhanghj+itcast.cn京ICP备08001421号京公网安备110108007702</div></div></div></footer><!-- 底部模块制作end --></body></html>

 

创建register.html 和register.css

1)注册页面不需要优化,所以直接在顶部插入图像
2)大盒子里分为两栏,通过浮动在一栏
3)注册核心内容里:一定加一个父盒子,父盒子给个宽度,在里面水平居中显示,在里面通过ul和li显示,每个li包含三块:label(行内元素)input和span;label里文字都是右对齐,在span里放一个i标签,里面放那个✅和❌图片
注意:✅和❌图片与文字如何对齐:给行内块元素添加vertical-align middle

4)安全程度部分,再加一个li里面放三个span,依次添加三个类名,通过padding拓展开span的大小,并增加相应背景颜色;通过调整整个li的margin-left来实现将整个安全程度模块移动到与上面对齐的位置

5)将label转化为inline-block从而实现左边文字“手机号:,短信验证码”等 全部右对齐

6)注意这里对input的text表单调整宽高是对于input设置的,而里面有text类型的还有checkbox类型的因此通过将input里的class设置为inp,防止把checkbox类型的框也带成同样格式;
注意写label for来增加作为checkbox时候点击选择的作用域

<!-- register.html-->
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>注册页</title><link rel="shortcut icon" href="favicon.ico"><link rel="stylesheet" href="css/base.css"><link rel="stylesheet" href="css/register.css">
</head><body><!-- 内容都包含在版心里 --><div class="w"><header><div class="logo"><a href="index.html"><img src="images/logo.png" alt=""></a></div></header><div class="registerarea"><h3>注册新用户<div class="login">我有账号,去<a href="#">登陆</a></div></h3><div class="reg_form"><ul><li><label for="">手机号:</label><input type="text" name="" class="inp"><span class="error"><iclass="error_icon"></i>手机号码格式不正确,请从新输入</span> </li><!-- 上述都属于行内/行内块元素,保证在同一行  发现左侧文字右对齐,可以给label一个宽度,label属于行内元素 --><li><label for="">短信验证码:</label><input type="text" name="" class="inp"><span class="success"><iclass="success_icon"></i>输入正确</span> </li><!-- 上述都属于行内/行内块元素,保证在同一行  发现左侧文字右对齐,可以给label一个宽度,label属于行内元素 --><li><label for="">登陆密码:</label><input type="password" name="" class="inp"><span class="error"><iclass="error_icon"></i>手机号码格式不正确,请从新输入</span> </li><!-- 上述都属于行内/行内块元素,保证在同一行  发现左侧文字右对齐,可以给label一个宽度,label属于行内元素 --><li class="safe">安全程度<em class="ruo">弱</em><em class="zhong">中</em><em class="qiang">强</em></li><li><label for="">确认密码:</label><input type="password" name="" class="inp"><span class="error"><iclass="error_icon"></i>手机号码格式不正确,请从新输入</span> </li><!-- 上述都属于行内/行内块元素,保证在同一行  发现左侧文字右对齐,可以给label一个宽度,label属于行内元素 --><li class="agree"><input type="checkbox" name="" id="">同意协议并注册<a href="#">《知晓用户协议》</a></li><!-- 也属于行内块,直接vertical-align --><li><input type="submit" value="提交注册" class="btn"></li></ul></div></div><footer>底部区域</footer></div>
</body></html>
.w {width: 1200px;margin: 0 auto;
}header {height: 84px;border-bottom: 2px solid #c81623;
}.logo {/* margin-top: 18px 如果又写margin会发生盒子塌陷; */padding-top: 18px;}.registerarea {height: 522px;border: 1px solid #ccc;margin-top: 20px;
}.registerarea h3 {/* float: left; */height: 42px;border-bottom: 1px solid #ccc;/* margin-top: 20px; */background-color: #ccc;line-height: 42px;padding: 0 10px;font-size: 14px;font-weight: 400;}.login {float: right;font-size: 12px;
}.registerarea .login a {color: #c81623;
}.reg_form {width: 600px;/* background-color: pink; */margin: 50px auto 0;/* 上50,左右auto,下0 */}.reg_form ul li label {display: inline-block;width: 88px;text-align: right;
}.reg_form ul li {margin-bottom: 20px;}.reg_form ul li .inp {width: 242px;height: 37px;border: 1px solid #ccc;
}.error {color: #c81623;
}.error_icon {display: inline-block;vertical-align: middle;width: 20px;height: 20px;background: url(../images/error.png) no-repeat;margin-top: -2px;/* 如何垂直居中:给行内块元素添加vertical-align middle*/}.success {color: green;
}.success_icon {display: inline-block;vertical-align: middle;width: 20px;height: 20px;background: url(../images/success.png) no-repeat;margin-top: -2px;/* 如何垂直居中:给行内块元素添加vertical-align middle*/}.safe em {padding: 0 12px;margin: 0 5px;/* background-color: pink; */color: white;
}.safe {padding-left: 150px;
}.ruo {background-color: #de1111;
}.zhong {background-color: #40b83f;
}.qiang {background-color: #f79100;
}.agree {padding-left: 100px;
}.agree input {vertical-align: middle;
}.agree a {color: blue;
}.btn {width: 200px;height: 34px;background-color: #c81623;margin-left: 100px;color: white;font-size: 14px;text-align: center;margin-top: 20px;
}

 

 

这篇关于品优购:主体页,列表页,注册页的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/448686

相关文章

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

Spring+MyBatis+jeasyui 功能树列表

java代码@EnablePaging@RequestMapping(value = "/queryFunctionList.html")@ResponseBodypublic Map<String, Object> queryFunctionList() {String parentId = "";List<FunctionDisplay> tables = query(parent

Exchange 服务器地址列表的配置方法与注意事项

Exchange Server 是微软推出的一款企业级邮件服务器软件,广泛应用于企业内部邮件系统的搭建与管理。配置 Exchange 服务器地址列表是其中一个关键环节。本文将详细介绍 Exchange 服务器地址列表的配置方法与注意事项,帮助系统管理员顺利完成这一任务。 内容目录 1. 引言 2. 准备工作 3. 配置地址列表 3.1 创建地址列表 3.2 使用 Exchange

Chapter 13 普通组件的注册使用

欢迎大家订阅【Vue2+Vue3】入门到实践 专栏,开启你的 Vue 学习之旅! 文章目录 前言一、组件创建二、局部注册三、全局注册 前言 在 Vue.js 中,组件是构建应用程序的基本单元。本章详细讲解了注册和使用 Vue 的普通组件的两种方式:局部注册和全局注册。 本篇文章参考黑马程序员 一、组件创建 ①定义 Vue 组件是一种具有特定功能的 Vue 实

c++11工厂子类实现自注册的两种方法

文章目录 一、产品类构建1. 猫基类与各品种猫子类2.狗基类与各品种狗子类 二、工厂类构建三、客户端使用switch-case实现调用不同工厂子类四、自注册方法一:公开注册函数显式注册五、自注册方法二:构造函数隐形注册总结 一、产品类构建 1. 猫基类与各品种猫子类 class Cat {public:virtual void Printer() = 0;};class

SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)

上一章讲了 BAPI的概念,以及如何调用SAP里面的既存BAPI。 SAP学习笔记 - 开发01 - BAPI是什么?通过界面和ABAP代码来调用BAPI-CSDN博客 本章继续讲开发相关的内容,主要就是BTP的实际操作流程,比如账号注册,登录,BTP集成开发环境的搭建这方面。 目录 1,账号注册 2,BTP登录URL 3,如何在BTP上进行开发? 以下是详细内容。 1,账

Python--列表简介

列表是什么 列表让你能够在⼀个地方存储成组的信息,其中既可以只包含几个元素,也可以包含数百万个元素。列表是新手可直接使用的最强大的Python 功能之⼀。 列表(list)是一种可变的序列类型,用于存储一系列有序的元素。这些元素可以是任何类型,包括整数、浮点数、字符串、其他列表(即嵌套列表)等。列表是动态的,可以在运行时增加或删除元素。 用方括号([ ])表示列表,用逗号分隔其中的元素。

移动UI:分类列表页、筛选页的设计揭秘。

移动UI的列表页设计需要考虑用户体验和界面美观性,以下是一些建议的设计要点: 1. 列表项的展示: 列表页应该清晰地展示各个列表项,包括标题、副标题、缩略图等内容,以便用户快速浏览和识别。可以使用卡片式布局或者简洁的列表布局。 2. 搜索和筛选: 如果列表项较多,应该提供搜索和筛选功能,方便用户查找感兴趣的内容。搜索框和筛选条件可以放置在页面顶部或者底部,以便用户方便操作。

【语句】如何将列表拼接成字符串并截取20个字符后面的

base_info = "".join(tree.xpath('/html/head/script[4]/text()'))[20:] 以下是对这个语句的详细讲解: tree.xpath('/html/head/script[4]/text()')部分: tree:通常是一个已经构建好的 HTML 文档树对象,它是通过相关的 HTML 解析库(比如 lxml)对 HTML 文档进行解