有图有代码--DIV+CSS从0至1实现商品详情页布局(一)-程序员宅基地

技术标签: ViewUI  ui  前端  javascript  

0. 前言

作为一个优秀的前端工程师, 必备技能之一就是网页布局, 俗称PSD切图. 将视觉设计图转换成静态的HTML页面. 网页布局从最早的Table布局到现在的DIV+CSS布局, 虽然Flex布局很流行, 甚至以后会有更先进的布局方式. 但无论那种方式, 只有掌握网页布局的思路才是关键, 这也是很多初学者最头疼的问题之一, 本文将通过电商的商品详情页为例, 从0开始一步一步的带领大家完成网页布局.

1. 设计图

2. 什么是DIV+CSS

所谓网页布局, 通俗的说就是把网页中的各个元素放至在网页的指定位置. 如: LOGO放在顶部, 版权信息在底部中间, 店铺信息在右侧, 商品名称在价格的上方等等.

DIV是HTML的一个标签, 用来定义区域, 我们可以理解为DIV是一个透明的盒子, 我们把LOGO, 版权信息, 店铺信息等等元素都放在各个盒子(DIV)中, 通过CSS来控制这些盒子(DIV)的位置来实现网页布局.

也可以这样理解: 中国相当于网页, 每个省相当于一个DIV, 控制这些DIV就能控制各个省的在中国位置, 每个市又相当于一个DIV, 可以控制各个城市在省内的位置. 城市的每个区, 下面的每个建筑, 建筑里面的每个房间, 这些都相当于DIV. 当你用CSS控制了这些DIV的位置, 中国的地图就做好了. 如果你想对房间进行装修(布局), 卧室、 厨房、客厅又是一个个的DIV, 他们控制了房间的户型, 房间中的床, 厨房中的冰箱等等可以看做是一个一个的HTML组件. 布局(DIV)定好了, 每个组件的位置就好了. DIV+CSS就是用这个原理来实现网页布局的.

3. 创建项目

使用你熟悉的IDE创建一个项目: 包括detail.html, detail.css, 并在HTML中引入CSS.

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>电商的商品详情页</title>
        <!-- 引入CSS -->
        <link rel="stylesheet" type="text/css" href="css/detail.css"/>
    </head>
    <body>
    </body>
</html>
复制代码

4. 通用样式

4.1 重置样式

HTML中的很多标签都有默认的样式, 如列表有默认的符号, 链接有下划线等等. 这些默认的样式在我们布局中有时候不那么需要, 因此为了方便编写CSS, 我们需要重置这些标签的默认样式.

/* 所有标签默认内外间距 */
body, div, p, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, 
span, em, a, strong, form, input, button, textarea, table, th, td {
    margin: 0; padding: 0;
}

/* 字体类标签无特殊样式(大小,粗细,倾斜等) */
h1, h2, h3, h4, h5, h6, em, i, strong {
    font-size: 100%; font-weight: normal; font-style: normal;
}

/* 列表无默认符号*/
ul, ol {
    list-style: none;
}

/* 网页的默认字体及颜色 */
body {
    color: #333; font-size: 12px; font-family: Microsoft Yahei; line-height: 18px;
}

/* 链接默认颜色,无下划线 */
a {
    color: #08c; text-decoration: none;
}

复制代码

4.2 固定宽度

仔细观察设计图后会发现: 页眉, 头部, 主体, 页尾中的内容都不是全屏, 有固定宽度的.

这是网页设计中兼容分辨率的一个小技巧, 网页内容的宽度取决于要兼容的最小分辨率, 如要兼容的最小分辨率为1024*800, 那么网页内容的宽度为1024px, 居中显示. 当屏幕分辨率大于1024时, 无论分辨率多大, 网页内容仍能在中间显示, 网页左右两侧多出的部分留白(或使用区域的背景色). 这样做使得网页在所有屏幕上的布局及展现形式一致, 用户在不同的屏幕下不需要重新适应网页.

同时固定宽度也可以使布局更简单(不需要使用百分比布局). 网页兼容的最小分辨率视目标用户群体而定, 按照目前主流的显示器, 设置1200即可. 1200分辨率以下(用户量相对较少)可单独处理或舍弃.

由于所有区域的网页内容都有宽度, 因此我们需要写一个通用的样式来控制内容宽度.

/* 控制网页内容宽度. 左右外边距为auto时, 当宽度小于父容器宽度时会居中 */
.layout {
    width: 1200px;
    margin: 0 auto;
}
复制代码

5. 布局规划

根据设计图对网页进行整体布局规划, 这一步相当于在中国划分好各个省, 然后在每个省划分好各个市, 在每个市划分好各个区的位置, 最后在每个区中就可以任意的设计形形色色的高楼大厦了.

5.1 整体布局

根据本文中的设计图我们可以先把整个网页分为四个大区域:

根据划分的区域写出对应的HTML, 每个区为一个DIV.

<body>
    <div class="topbar"></div>
    <div class="header"></div>
    <div class="main"></div>
    <div class="footer"></div>
</body>
复制代码

由于DIV是块级元素(默认占整行), 因此4个DIV依次从上到下排列, 因此不需要CSS控制其位置.

  • 块级元素: 和父容器宽度相同, 单独占一行, 不允许其他元素同在一行. 如: DIV, P, UL, H1-H6
  • 行级元素: 宽度为内容的宽度. 多个行级元素在同一行, 无法设置宽度和高度. 如: span, a, em

5.2 页眉布局

下面对页眉进行布局, 页眉布局很简单, 分为左侧和右侧两个区域, 都是样式相同的链接.

  • 左右两侧的链接样式主体相同, 可使用同一样式
  • 通过浮动对两个区域布局, 分别居左和居右
  • 页眉非全屏, 有宽度, 需要将内容放在layout样式内
<div class="topbar">
    <!-- layout样式控制页眉内容的宽度 -->
    <div class="layout">
        <!-- 页眉左侧内容. topbar-items: 统一控制链接样式, topbar-items-right: 控制居左  -->
        <ul class="topbar-items topbar-items-left">
            <li class="item"><a href="#">首页</a></li>
            <li class="item"><a href="#">客户端</a></li>
            <li class="item"><a href="#">英文版</a></li>
        </ul>
        <!-- 页眉右侧内容. topbar-items: 统一控制链接样式, topbar-items-right: 控制居右  -->
        <ul class="topbar-items topbar-items-right">
            <li class="item"><a href="#">登录</a></li>
            <li class="item"><a href="">注册</a></li>
            <li class="item"><a href="#">个人中心</a></li>
            <li class="item"><a href="#">我的订单</a></li>
            <li class="item"><a href="#">收藏夹</a></li>
            <li class="item"><a href="#">购物车</a></li>
        </ul>
    </div>
</div>
复制代码

设置页眉的背景色:

.topbar {
    background-color: #363636;
}
复制代码

设置背景色后效果如下图:

对左侧区域的链接设置float: left;使其居左, 右侧设置float: right;

.topbar-items-left {
    float: left;
}

.topbar-items-right {
    float: right;
}
复制代码

设置完成后效果如图, 两个区域已经分别在左右两侧.

但是浮动设置完之后, 页眉没有背景色了, 这是为什么呢?

上面我们讲到HTML的块级元素默认宽度时和父元素相同, 行级元素的宽度取决于内容的宽度. 然而HTML中所有元素默认高度都是0. 只有元素内部有内容时才会有高度, 有高度时背景色才能显示. 那么页眉中有内容为什么还不显示背景色呢?

这是因为一旦某个节点被设置了浮动, 那么这个节点就脱离了父节点, 也就是说父节点的高度和这个子节点没有关系了. 看下图: 蓝色为父节点, 里面有两个子节点(红色,黄色)

  • 未设置浮动时, 父节点高度等于红色和黄色的高度之和
  • 黄色设置浮动时, 父节点高度等于红色的高度
  • 红色也设置浮动时, 父节点高度为0

当节点下面的所有子节点都被设置了浮动, 该节点高度为0, 因此背景色未显示. 可以对节点设置overflow: hidden;, 设置后节点的高度将等于高度最大的节点的高度(红色的高度).

由于页眉中内容全部为链接, 内容较少, 因此手动设置页眉高度即可.

.topbar {
    height: 40px; background-color: #363636;
}
复制代码

设置页眉高度后效果如下:

下面对设置页眉链接的样式, 链接使用了ul, 每个链接在li中. 由于li是块级元素, 因此不会横向排列, 我们需要对li设置float:left;使其在同一行. 并设置li的间距.

.topbar-items li {
    float: left; padding: 0 12px;
}
复制代码

链接的布局设置完成, 接下来只需要设置a的颜色及行间距即可.

.topbar-items li a {
    color: #bfbfbf; line-height: 40px;
}
复制代码

至此, 页眉的基本样式完成.


5.3 头部布局

根据头部样式, 可以按照下图方式进行布局:

  • 头部分为两个区域: 使用浮动设置LOGO居左, 搜索区域居右
  • 右侧搜索区分为: 搜索框按钮区域, 关键词链接区域. 上下排列不需要设置浮动
  • 搜索框按钮区域下包含搜索框及两个按钮, 设置浮动使3个节点在一行

根据划分的区域写出对应的HTML:

<div class="header">
    <!-- layout样式控制头部内容的宽度 -->
    <div class="layout">
        <!-- 左侧LOGO区域. 由于LOGO可点击, 因此使用a标签 -->
        <a class="logo" href="#">
            <img src="img/logo.png" alt="" />
        </a>
        <!-- 右侧搜索区域 -->
        <div class="searchbar">
            <!-- 搜索框按钮区域 -->
            <div class="searchbox">
                <input class="search-input" type="text" />
                <!-- search-btn: 控制按钮样式, search-goods/search-shop: 控制按钮背景色 -->
                <a href="javascript:;" class="search-btn search-goods">搜索宝贝</a>
                <a href="javascript:;" class="search-btn search-shop">搜索店铺</a>
            </div>
            <!-- 搜索关键词链接区域 -->
            <div class="keywords">
                <a href="#">关键词1</a>
                <a href="#">关键词2</a>
                <a href="#">关键词3</a>
                <a href="#">关键词4</a>
            </div>
        </div>
    </div>
</div>
复制代码

对LOGO设置float: left;使其居左, 搜索区域设置float: right;

.logo {
    float: left;
}

.searchbar {
    float: right;
}

复制代码

LOGO和搜索区域都设置了浮动, 其父元素(头部)的高度为0, 因此需要设置父元素高度.

.header {
    height: 70px;
}
复制代码

设置右侧搜索框按钮区域样式: 由于搜索输入框及两个按钮是行内元素, 无法设置宽度和高度, 因此需要对三个元素设置float: left;使其在一行(行内元素设置浮动后可设置宽高).

设置搜索输入框的宽高使其变大, 并设置边框. 设置两个按钮的宽度及各自的背景色.

.searchbar .search-input {
    float: left; height: 30px; width: 340px; padding: 5px 10px; 
    font-size: 14px; border: 2px solid #FC8080; border-right: none;
}

.searchbar .search-btn {
    float: left; height: 44px; text-align: center; line-height: 44px; 
    font-size: 14px; padding: 0 20px; color: #fff;
}

.searchbar .search-goods {
    background-color: #FC5656;
}

.searchbar .search-shop {
    background-color: #aaa;
}
复制代码

三个元素都设置了浮动, 其父元素(右侧搜索框按钮区域)的高度为0, 因此需要设置父元素高度.

.searchbar .searchbox {
    height: 44px;
}
复制代码

设置搜索关键字链接的间距及顶部距离搜索框的间距

.searchbar .keywords {
    margin-top: 6px;
}

.searchbar .keywords a {
    margin-right: 10px;
}
复制代码

调整头部的内边距, 使其距离页眉及主体有一定的间距

.header {
    height: 70px; padding: 15px 0;
}
复制代码

至此, 头部的样式设置完成.


5.4 页脚布局

页脚布局相对简单, 两个区域分别为链接区域和版权信息. 两个区域上下排列不需要设置浮动.

<div class="footer">
    <div class="links">
        <a href="#">关于本站</a>|
        <a href="#">关于我们</a>|
        <a href="#">团队成员</a>|
        <a href="#">联系我们</a>|
        <a href="#">意见反馈</a>
    </div>
    <div class="coryright">Copyright 2018 atd681 版权所有</div>
</div>
复制代码

设置链接区域的字体颜色及链接的左右边距使其与分隔符("|")产生相应的间距.

.footer .links a {
    margin: 0 10px; color: ##bfbfbf;
}
复制代码

设置版权信息的字体颜色, 设置与上面链接区域的距离(外边距)

.footer .copyright {
    color: #bfbfbf; margin-top: 10px;
}
复制代码

设置页脚的背景色及所有文字居中, 同时调整页脚的内边距, 使页脚高度增加.

.footer {
    text-align: center; background-color: #363636; padding: 40px 0;
}
复制代码

页脚制作完成.


未完待续....

转载于:https://juejin.im/post/5b856cb06fb9a019c040b590

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34129145/article/details/91472156

智能推荐

51单片机的中断系统_51单片机中断篇-程序员宅基地

文章浏览阅读3.3k次,点赞7次,收藏39次。CPU 执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对异常情况或特殊请求进行处理,处理完毕后再返回现行程序断点处,继续执行原程序。void 函数名(void) interrupt n using m {中断函数内容 //尽量精简 }编译器会把该函数转化为中断函数,表示中断源编号为n,中断源对应一个中断入口地址,而中断入口地址的内容为跳转指令,转入本函数。using m用于指定本函数内部使用的工作寄存器组,m取值为0~3。该修饰符可省略,由编译器自动分配。_51单片机中断篇

oracle项目经验求职,网络工程师简历中的项目经验怎么写-程序员宅基地

文章浏览阅读396次。项目经验(案例一)项目时间:2009-10 - 2009-12项目名称:中驰别克信息化管理整改完善项目描述:项目介绍一,建立中驰别克硬件档案(PC,服务器,网络设备,办公设备等)二,建立中驰别克软件档案(每台PC安装的软件,财务,HR,OA,专用系统等)三,能过建立的档案对中驰别克信息化办公环境优化(合理使用ADSL宽带资源,对域进行调整,对文件服务器进行优化,对共享打印机进行调整)四,优化完成后..._网络工程师项目经历

LVS四层负载均衡集群-程序员宅基地

文章浏览阅读1k次,点赞31次,收藏30次。LVS:Linux Virtual Server,负载调度器,内核集成, 阿里的四层SLB(Server Load Balance)是基于LVS+keepalived实现。NATTUNDR优点端口转换WAN性能最好缺点性能瓶颈服务器支持隧道模式不支持跨网段真实服务器要求anyTunneling支持网络private(私网)LAN/WAN(私网/公网)LAN(私网)真实服务器数量High (100)High (100)真实服务器网关lvs内网地址。

「技术综述」一文道尽传统图像降噪方法_噪声很大的图片可以降噪吗-程序员宅基地

文章浏览阅读899次。https://www.toutiao.com/a6713171323893318151/作者 | 黄小邪/言有三编辑 | 黄小邪/言有三图像预处理算法的好坏直接关系到后续图像处理的效果,如图像分割、目标识别、边缘提取等,为了获取高质量的数字图像,很多时候都需要对图像进行降噪处理,尽可能的保持原始信息完整性(即主要特征)的同时,又能够去除信号中无用的信息。并且,降噪还引出了一..._噪声很大的图片可以降噪吗

Effective Java 【对于所有对象都通用的方法】第13条 谨慎地覆盖clone_为继承设计类有两种选择,但无论选择其中的-程序员宅基地

文章浏览阅读152次。目录谨慎地覆盖cloneCloneable接口并没有包含任何方法,那么它到底有什么作用呢?Object类中的clone()方法如何重写好一个clone()方法1.对于数组类型我可以采用clone()方法的递归2.如果对象是非数组,建议提供拷贝构造器(copy constructor)或者拷贝工厂(copy factory)3.如果为线程安全的类重写clone()方法4.如果为需要被继承的类重写clone()方法总结谨慎地覆盖cloneCloneable接口地目的是作为对象的一个mixin接口(详见第20_为继承设计类有两种选择,但无论选择其中的

毕业设计 基于协同过滤的电影推荐系统-程序员宅基地

文章浏览阅读958次,点赞21次,收藏24次。今天学长向大家分享一个毕业设计项目基于协同过滤的电影推荐系统项目运行效果:项目获取:https://gitee.com/assistant-a/project-sharing21世纪是信息化时代,随着信息技术和网络技术的发展,信息化已经渗透到人们日常生活的各个方面,人们可以随时随地浏览到海量信息,但是这些大量信息千差万别,需要费事费力的筛选、甄别自己喜欢或者感兴趣的数据。对网络电影服务来说,需要用到优秀的协同过滤推荐功能去辅助整个系统。系统基于Python技术,使用UML建模,采用Django框架组合进行设

随便推点

你想要的10G SFP+光模块大全都在这里-程序员宅基地

文章浏览阅读614次。10G SFP+光模块被广泛应用于10G以太网中,在下一代移动网络、固定接入网、城域网、以及数据中心等领域非常常见。下面易天光通信(ETU-LINK)就为大家一一盘点下10G SFP+光模块都有哪些吧。一、10G SFP+双纤光模块10G SFP+双纤光模块是一种常规的光模块,有两个LC光纤接口,传输距离最远可达100公里,常用的10G SFP+双纤光模块有10G SFP+ SR、10G SFP+ LR,其中10G SFP+ SR的传输距离为300米,10G SFP+ LR的传输距离为10公里。_10g sfp+

计算机毕业设计Node.js+Vue基于Web美食网站设计(程序+源码+LW+部署)_基于vue美食网站源码-程序员宅基地

文章浏览阅读239次。该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流项目运行环境配置:项目技术:Express框架 + Node.js+ Vue 等等组成,B/S模式 +Vscode管理+前后端分离等等。环境需要1.运行环境:最好是Nodejs最新版,我们在这个版本上开发的。其他版本理论上也可以。2.开发环境:Vscode或HbuilderX都可以。推荐HbuilderX;3.mysql环境:建议是用5.7版本均可4.硬件环境:windows 7/8/10 1G内存以上;_基于vue美食网站源码

oldwain随便写@hexun-程序员宅基地

文章浏览阅读62次。oldwain随便写@hexun链接:http://oldwain.blog.hexun.com/ ...

渗透测试-SQL注入-SQLMap工具_sqlmap拖库-程序员宅基地

文章浏览阅读843次,点赞16次,收藏22次。用这个工具扫描其它网站时,要注意法律问题,同时也比较慢,所以我们以之前写的登录页面为例子扫描。_sqlmap拖库

origin三图合一_神教程:Origin也能玩转图片拼接组合排版-程序员宅基地

文章浏览阅读1.5w次,点赞5次,收藏38次。Origin也能玩转图片的拼接组合排版谭编(华南师范大学学报编辑部,广州 510631)通常,我们利用Origin软件能非常快捷地绘制出一张单独的绘图。但是,我们在论文的撰写过程中,经常需要将多种科学实验图片(电镜图、示意图、曲线图等)组合在一张图片中。大多数人都是采用PPT、Adobe Illustrator、CorelDraw等软件对多种不同类型的图进行拼接的。那么,利用Origin软件能否实..._origin怎么把三个图做到一张图上

51单片机智能电风扇控制系统proteus仿真设计( 仿真+程序+原理图+报告+讲解视频)_电风扇模拟控制系统设计-程序员宅基地

文章浏览阅读4.2k次,点赞4次,收藏51次。51单片机智能电风扇控制系统仿真设计( proteus仿真+程序+原理图+报告+讲解视频)仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0042。_电风扇模拟控制系统设计