1.分析页面结构
我们要做的页面就是红色方框中的页面,我是这样分析的:
先看整体页面,body有背景色,在完成初始化工作以后就可以设置body了
整个大容器,有白色的背景,大容器分为两部分:标题栏和图文区
标题栏和图文区分别用容器(div)包裹起来,标题栏使用Flex居中显示,图文区使用Grid网格布局
网格布局好之后,第一张图文区跨越2行,然后准备填充网格项目
每个网格项目里面分为一张图片和一个被div包裹的文字区
让图片自适应,下方文字区需要使用绝对定位使其展示与图片下方
2. 写代码
代码如下:
- HTML:
<body>
<!-- 大容器 -->
<div class="wrapper">
<!-- 标题栏 -->
<div class="title">
<span class="iconfont icon-dashujukeshihuaico-"></span>
<h3> PHP入门精品课程 </h3>
<span class="iconfont icon-dashujukeshihuaico-"></span>
</div>
<!-- 网格容器 -->
<div class="container">
<!-- 网格项目 -->
<div class="item">
<img src="./images/php-1.jpg" alt="" />
</div>
<div class="item">
<img src="./images/php-2.jpg" alt="" />
<div>
<a href="">初级</a>
<a href="">编程学习方法分享直播</a>
<span>1W+次播放</span>
</div>
</div>
<div class="item">
<img src="./images/php-3.jpg" alt="" />
<div>
<a href="">初级</a>
<a href="">2018前端入门_HTML5</a>
<span>18W+次播放</span>
</div>
</div>
<div class="item">
<img src="./images/php-4.jpg" alt="" />
<div>
<a href="">初级</a>
<a href="">CSS视频教程-玉女心</a>
<span>10W+次播放</span>
</div>
</div>
<div class="item">
<img src="./images/php-5.jpg" alt="" />
<div>
<a href="">初级</a>
<a href="">JavaScript极速入门_玉</a>
<span>18W+次播放</span>
</div>
</div>
<div class="item">
<img src="./images/php-6.jpg" alt="" />
<div>
<a href="">中级</a>
<a href="">独孤九贱(6)_jQuery视</a>
<span>12W+次播放</span>
</div>
</div>
<div class="item">
<img src="./images/php-7.jpg" alt="" />
<div>
<a href="">初级</a>
<a href="">30分钟学会网站布局</a>
<span>6W+次播放</span>
</div>
</div>
<div class="item">
<img src="./images/php-8.jpg" alt="" />
<div>
<a href="">初级</a>
<a href="">[公益直播]Web前端开</a>
<span>5W+次播放</span>
</div>
</div>
<div class="item">
<img src="./images/php-9.jpg" alt="" />
<div>
<a href="">初级</a>
<a href="">phpStudy极速入门</a>
<span>40W+次播放</span>
</div>
</div>
<div class="item">
<img src="./images/php-10.jpg" alt="" />
<div>
<a href="">中级</a>
<a href="">ThinkPHP6.0极速入门</a>
<span>4W+次播放</span>
</div>
</div>
<div class="item">
<img src="./images/php-11.jpg" alt="" />
<div>
<a href="">中级</a>
<a href="">独孤九贱(4)_PHP视频</a>
<span>50W+次播放</span>
</div>
</div>
<div class="item">
<img src="./images/php-12.jpg" alt="" />
<div>
<a href="">初级</a>
<a href="">php完全自学手册</a>
<span>20W+次播放</span>
</div>
</div>
<div class="item">
<img src="./images/php-13.jpg" alt="" />
<div>
<a href="">初级</a>
<a href="">MySQL权威开发指南</a>
<span>2W+次播放</span>
</div>
</div>
<div class="item">
<img src="./images/php-14.jpg" alt="" />
<div>
<a href="">中级</a>
<a href="">[公益直播]PHP实战开</a>
<span>3W+次播放</span>
</div>
</div>
</div>
</div>
</body>
- CSS:
<style>
/* 初始化 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* body背景色 */
body {
background: #f3f5f7;
}
/* 去掉a标签下划线,改变字体颜色和大小 */
a {
text-decoration: none;
color: black;
font-size: 14px;
}
/* 大容器的宽度,高度,圆角,背景色 */
.wrapper {
width: 1200px;
height: 660px;
margin: 50px auto;
background: white;
border-radius: 10px;
}
/* 大容器中的标题栏,设定高度后,转弹性盒,使文本垂直居中对齐 */
.title {
height: 80px;
display: flex;
align-items: center;
justify-content: center;
color: #666;
}
/* 标题栏中的字体图标样式 */
.title span {
font-size: 28px;
color: #1e9fff;
}
/* 中间图文区的容器,使用网格布局此容器 */
.container {
height: 570px;
width: 1180px;
margin: auto;
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-template-rows: repeat(3, 1fr);
gap: 20px;
}
/* 第一个图文区跨2行 */
.container > div:first-of-type {
grid-row: span 2;
}
/* 设置每个图文区的边框圆角,盒子阴影效果,
定位父级 */
.container > .item {
border-radius: 10px;
box-shadow: 5px 10px 5px rgb(223, 220, 220);
position: relative;
}
/* 图片宽度自适应 */
.container img {
width: 100%;
border-radius: 10px;
}
/* 第一张图片高度自适应 */
.container .item:first-of-type img {
height: 100%;
}
/* 网格项目中最下面的“播放”字体显示 */
.item span {
font-size: 11px;
display: inline-block;
margin-left: 20px;
color: gray;
}
/* 网格项目中的文字区域高度,背景色,内边距和圆角
,绝对定位 */
.item div {
height: 80px;
background: white;
border-radius: 10px;
position: absolute;
bottom: 0;
}
/* 文字区域中的“初级”“中级”字体显示样式 */
.item div a:first-of-type {
display: inline-block;
border-radius: 3px;
background: gray;
color: white;
padding: 2px;
margin: 10px 0 10px 20px;
font-size: 13px;
}
.item div a:last-of-type {
display: inline-block;
margin-left: 5px;
font-size: 13px;
}
</style>
- 效果图:
3. 总结
初次体验了Grid布局,功能确实比Flex强大很多,在布局过程中,我也用到了Flex布局,有些细微之处,用Flex感觉还是不错,和老师的总结是不谋而合的。两者的属性用法还是有相似之处,都要区分好是容器还是项目。不过值得一提的是:grid在容器和项目之间还有一个中间层,就是单元格。