一、使用到的技术
- html5
- css3
- javascript
- jquery
- bootstrap
- 第三方jquery插件
- @media实现响应式布局
二、根据设计稿设计内容的宽度
PC端设计稿宽度是1920px的,这是在设计的时候根据电脑的浏览器分辨率来定的。
页面主体宽度(内容宽度)设置为1200px,1200px是一个比较适合PC端显示器浏览的安全内容宽度,保证在宽度大于1200px分辨率的设备下浏览页面不会出现横向滚动条,页面有banner地方的宽度就设置为100%,设置百分比的好处是可以根据屏幕分辨率的大小自动缩放。
移动端设计稿宽度为750px,750px是iphone6的物理像素,也叫屏幕分辨率。移动端设计稿是按照设备的物理像素所给。
- 物理像素:
顾名思义,就是设备屏幕上的实际像素,也就是说这个手机被出厂造出来的时候,这个屏幕上有多少个像素点,它的物理像素就是多少;
- 设备独立像素:
也叫做逻辑像素(对于前端来说,和css像素是一样的),这个不同的设备是不一样的,在viewport为ideal-viewport模式时, 如iphone6此时的viewport为375px,代表着我们在css中写375px就可以达到全屏的效果;
三、布局编写
3.1、页面整体结构
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>页面标题</title> 6 <!--3:设置IE渲染方式默认为最高(可选)--> 7 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 8 <!--编写响应式页面 9 1:设置Meta标签 10 在使用 @media 的时候需要先设置下面这段代码,来兼容移动设备的展示效果 11 这段代码的几个参数解释: 12 width = device-width:宽度等于当前设备的宽度 13 initial-scale:初始的缩放比例(默认设置为1.0,即代表不缩放) 14 user-scalable:用户是否可以手动缩放(默认设置为no,因为我们不希望用户放大缩小页面) 15 --> 16 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> 17 <!--因为IE8既不支持HTML5也不支持CSS3 Media,所以我们需要加载两个JS文件,来保证我们的代码实现兼容效果--> 18 <!--[if lt IE 9]> 19 <script src="http://apps.bdimg.com/libs/html5shiv/r29/html5.min.js"></script> 20 <script src="http://apps.bdimg.com/libs/respond.js/1.4.2/respond.min.js"></script> 21 <![endif]--> 22 </head> 23 <body> 24 <!--页面容器div--> 25 <div class="container"> 26 具体的页面内容 27 </div> 28 </body> 29 </html>
整个网络的布局是根据美工的设计稿进行开发的,大量的使用了div、span、ul 、浮动,清除浮动,相对定位,绝对定位,固定定位这些布局技巧。
3.2、使用div进行布局相关知识点总结
3.2.1、div居中显示
居中效果在CSS中是很普通的效果,平时所看到的居中效果主要分为三大类:水平居中、垂直居中和水平垂直居中。
div的居中显示也分为水平居中、垂直居中和水平垂直居中,div水平居中显示比较容易,最简单的实现方案就是:给元素定一个显示式的宽度,然后加上margin的左右值为auto。
div水平居中代码如下所示:
.horizontalCenter { width: 500px; margin-left: auto; margin-right: auto; }
这种方法给知道的宽度元素设置居中是最方便不过了。
div垂直居中实现起来就相对麻烦一些,需要借助绝对定位+margin负间距来实现,具体做法如下所示:
如果要居中的元素的宽/高是不变的或者说是确定的,比如width=100px,height=100px,那么设置div的position为绝对定位(absolute),然后设置的top=50%,left=50%,margin-top=-50px,margin-left=-50px即可。
div水平垂直居中代码如下:
1 .horizontalVerticalCenter{ 2 width:500px;/*宽度固定*/ 3 height: 200px;/*高度固定*/ 4 /*div绝对定位水平垂直居中【margin 负间距】当前最流行的使用方法*/ 5 position: absolute; 6 left:50%; 7 top:50%; 8 margin-left:-250px;/*这里的负间距根据width来定,值为width/2,也就是width的一半*/ 9 margin-top:-100px;/*这里的负间距根据height来定,值为height/2,也就是height的一半*/ 10 }
以上代码就可以实现div水平垂直居中显示了。
如果只是想让div垂直居中显示,那么可以设置left或者right为0,margin-left不设置即可。
左垂直居中代码如下:
1 .leftVerticalCenter{ 2 width:200px; 3 height: 200px; 4 /*div绝对定位水平垂直居中【margin 负间距】当前最流行的使用方法*/ 5 position: absolute; 6 left:0; 7 top:50%; 8 margin-top:-100px;/*这里的负间距根据height来定,值为height/2,也就是height的一半*/ 9 }
右垂直居中代码如下:
1 .rightVerticalCenter{ 2 width:200px; 3 height: 200px; 4 /*div绝对定位水平垂直居中【margin 负间距】当前最流行的使用方法*/ 5 position: absolute; 6 right:0; 7 top:50%; 8 margin-top:-100px;/*这里的负间距根据height来定,值为height/2,也就是height的一半*/ 9 }
综合案例代码如下:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <!--<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">--> 6 <title>div居中操作</title> 7 <style type="text/css"> 8 .container { 9 margin: 0 100px; /*设置div居中显示,距离上下边距为0,左右边距为100*/ 10 height: 450px; 11 border: 1px solid red; 12 position: relative; 13 } 14 15 .container .horizontalCenter{ 16 width: 500px; 17 height: 100px; 18 background-color: red; 19 margin: 0 auto; /*设置div水平居中的关键代码,左右边距必须设置为一样*/ 20 text-align: center; /*设置div2里面的文本水平居中*/ 21 } 22 /*div绝对定位水平垂直居中: 23 如果要居中的元素的宽/高是不变的或者说是确定的,比如width/height=100px, 24 那么设置absolute的top和left=50%,然后margin-left和margin-top=-50px即可*/ 25 .container .horizontalVerticalCenter{ 26 width:500px;/*宽度固定*/ 27 height: 200px;/*高度固定*/ 28 background:green; 29 text-align: center; /*设置里面的文本水平居中*/ 30 /*div绝对定位水平垂直居中【margin 负间距】当前最流行的使用方法*/ 31 position: absolute; 32 left:50%; 33 top:50%; 34 margin-left:-250px;/*这里的负间距根据width来定,值为width/2,也就是width的一半*/ 35 margin-top:-100px;/*这里的负间距根据height来定,值为height/2,也就是height的一半*/ 36 } 37 38 .container .leftVerticalCenter{ 39 width:200px; 40 height: 200px; 41 background:blue; 42 text-align: center; /*设置里面的文本水平居中*/ 43 /*div绝对定位水平垂直居中【margin 负间距】当前最流行的使用方法*/ 44 position: absolute; 45 left:0; 46 top:50%; 47 /*margin-left:-200px;*//*这里的负间距根据width来定,值为width/2,也就是width的一半*/ 48 margin-top:-100px;/*这里的负间距根据height来定,值为height/2,也就是height的一半*/ 49 } 50 51 .container .rightVerticalCenter{ 52 width:200px; 53 height: 200px; 54 background:gold; 55 text-align: center; /*设置里面的文本水平居中*/ 56 /*div绝对定位水平垂直居中【margin 负间距】当前最流行的使用方法*/ 57 position: absolute; 58 right:0; 59 top:50%; 60 /*margin-left:-200px;*//*这里的负间距根据width来定,值为width/2,也就是width的一半*/ 61 margin-top:-100px;/*这里的负间距根据height来定,值为height/2,也就是height的一半*/ 62 } 63 </style> 64 </head> 65 <body> 66 <div class="container"> 67 <div class="horizontalCenter"> 68 我是水平居中的div 69 </div> 70 <div class="horizontalVerticalCenter"> 71 我是水平垂直居中的div 72 </div> 73 <div class="leftVerticalCenter"> 74 我是左垂直居中的div 75 </div> 76 <div class="rightVerticalCenter"> 77 我是右垂直居中的div 78 </div> 79 </div> 80 </body> 81 </html>
效果如下图所示:
3.2.2、div文本垂直居中
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>文本垂直居中</title> 6 <style type="text/css"> 7 .div1{ 8 margin: 0 50px; 9 height: 50px; 10 line-height: 50px;/*设置行高和div的高度相同,这样就可以让单行文本垂直居中*/ 11 border: 1px solid red; 12 } 13 14 /* ul { 15 list-style: none; 16 padding: 0; 17 }*/ 18 19 p { 20 margin: 0; 21 padding: 0; 22 } 23 /*(未知高度)多行文本垂直居中*/ 24 .div2{ 25 margin: 0 50px; 26 /*设置上下的padding值一样,实现多行文本垂直居中*/ 27 padding-top:25px; 28 padding-bottom: 25px; 29 border: 1px solid green; 30 /*text-align: center;*//*水平居中*/ 31 } 32 33 /*.div2 p { 34 margin: 5px; 35 }*/ 36 37 .wrap{ 38 margin: 0 50px; 39 height:300px;/*固定高度*/ 40 display:table;/*div模拟成为table,让子div的vertical-align:middle属性起作用*/ 41 } 42 /*需要垂直居中的文本所在的div*/ 43 .content{ 44 vertical-align:middle; 45 display:table-cell; 46 border:1px solid #FF0099; 47 background-color:#FFCCFF; 48 width:760px; 49 } 50 51 .content p { 52 padding: 5px; 53 } 54 </style> 55 </head> 56 <body> 57 <fieldset> 58 <legend>单行文本垂直居中</legend> 59 <div class="div1"> 60 <p>如果一个容器中只有一行文字,对它实现垂直居中相对比较简单,我们只需要设置它的实际高度height和所在行的高度line-height相等即可。</p> 61 </div> 62 </fieldset> 63 <fieldset> 64 <legend>【未知高度】多行文本垂直居中——设置上下的padding值一样即可</legend> 65 <div class="div2"> 66 <p>第一行文本</p> 67 <p>第二行文本</p> 68 <p>第三行文本</p> 69 <p>第四行文本</p> 70 </div> 71 <div class="div2"> 72 <ul> 73 <li>第一行文本</li> 74 <li>第二行文本</li> 75 <li>第三行文本</li> 76 <li>第四行文本</li> 77 </ul> 78 </div> 79 </fieldset> 80 <fieldset> 81 <legend>【固定高度】多行文本垂直居中——模拟table方法</legend> 82 <!--父div--> 83 <div class="wrap"> 84 <!--需要垂直居中的文本所在的div--> 85 <div class="content"> 86 <p>css中垂直居中样式vertical-align:middle只对标签td、th、caption, 87 和内联元素display设置为inline/inline-block起作用,其他的则不起作用。 88 </p> 89 <p>可以用div来模拟成为table,让vertical-align:middle属性起作用。</p> 90 <p>注意display:table和display:table-cell的使用方法, 91 前者必须设置在父元素上,后者必须设置在子元素上 92 因此我们要为需要垂直居中的文本所在的div再增加一个父div元素 93 </p> 94 </div> 95 <div class="content"> 96 <p>第一行文本</p> 97 <p>第二行文本</p> 98 <p>第三行文本</p> 99 <p>第四行文本</p> 100 </div> 101 <div class="content"> 102 <ul> 103 <li>第一行文本</li> 104 <li>第二行文本</li> 105 <li>第三行文本</li> 106 <li>第四行文本</li> 107 </ul> 108 109 </div> 110 </div> 111 </fieldset> 112 </body> 113 </html>
3.2.3、div浮动
div浮动分为左浮动和右浮动,div设置了浮动之后,会对布局产生影响,必要的时候需要清除一下浮动,用下面的一个综合案例演示一下div的浮动和清除浮动,代码如下:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>div浮动</title> 6 <style type="text/css"> 7 fieldset{ 8 margin-top: 10px; 9 } 10 .wrap1{ 11 width: 800px; 12 height: 200px;/*设置了具体高度*/ 13 margin: 0 auto; 14 border: 2px solid red; 15 padding: 10px; 16 text-align: center; 17 } 18 .wrap2{ 19 width: 800px; 20 margin: 0 auto; 21 border: 2px solid burlywood; 22 padding: 10px; 23 text-align: center; 24 } 25 .leftFloat{ 26 width: 200px; 27 height: 200px; 28 background-color: rebeccapurple; 29 float: left;/*左浮动*/ 30 } 31 .rightFloat{ 32 width: 200px; 33 height: 200px; 34 background-color: green; 35 float: right;/*右浮动*/ 36 } 37 38 .clearFloat{ 39 clear: both;/*清除所有浮动*/ 40 } 41 </style> 42 </head> 43 <body> 44 <fieldset> 45 <legend> 46 wrap1设置了固定高度,leftFloat和rightFloat分别设置了左右浮动 47 </legend> 48 <div class="wrap1"> 49 wrap1 50 <div class="leftFloat">左浮动(leftFloat)div</div> 51 <div class="rightFloat">右浮动(rightFloat)div</div> 52 </div> 53 <p> 54 由于父div(wrap1)设置了固定高度,所以leftFloat和rightFloat这两个div即使设置了浮动还是会正常显示在父div(wrap1)内 55 </p> 56 </fieldset> 57 <fieldset> 58 <legend> 59 wrap2不设置高度,leftFloat和rightFloat分别设置了左右浮动 60 </legend> 61 <div class="wrap2"> 62 wrap2 63 <div class="leftFloat">左浮动(leftFloat)div</div> 64 <div class="rightFloat">右浮动(rightFloat)div</div> 65 </div> 66 <p> 67 由于父div(wrap2)不设置高度,所以leftFloat和rightFloat这两个div由于浮动原因不在父div(wrap2)内显示了 68 </p> 69 </fieldset> 70 71 <fieldset> 72 <legend> 73 wrap2不设置高度,leftFloat和rightFloat分别设置了左右浮动,clearFloat清除浮动 74 </legend> 75 <div class="wrap2"> 76 <div class="leftFloat">左浮动(leftFloat)div</div> 77 <div class="rightFloat">右浮动(rightFloat)div</div> 78 <div class="clearFloat">清除浮动(clearFloat)div</div> 79 </div> 80 <p> 81 父div(wrap2)虽然不设置高度,但是使用了clearFloat清除了左右浮动,所以leftFloat和rightFloat这两个div即使设置了浮动也会在父div(wrap2)内显示了 82 </p> 83 </fieldset> 84 85 </body> 86 </html>
效果如下:
清除浮动总结:当父div没有设置高度,子div又设置了浮动,那么此时就要使用一个空div去清除浮动,保证下面的元素的布局不受浮动的影响。
3.2.4、div定位
div的常用的定位操作主要是固定定位,相对定位,绝对定位,项目中用到了大量的定位操作,看下面的一个综合案例,代码如下:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"> 6 <title>div定位操作</title> 7 <style type="text/css"> 8 9 .container{ 10 margin: 200px auto; 11 border: 2px solid red; 12 height: 600px; 13 position: relative; 14 } 15 16 .div1{ 17 position: relative;/*相对定位,元素框相对于之前正常文档流中的位置发生偏移,并且原先的位置仍然被占据。发生偏移的时候,可能会覆盖其他元素。*/ 18 border: 2px solid green; 19 width: 150px; 20 height: 150px; 21 top:20px; 22 left:20px 23 } 24 25 .div2{ 26 position: absolute;/*绝对定位,元素框不再占有文档流位置,并且相对于包含块进行偏移(所谓的包含块就是最近一级外层元素position不为static的元素)*/ 27 border: 2px solid blue; 28 width: 150px; 29 height: 150px; 30 top:100px; 31 left:100px 32 } 33 34 .div3{ 35 position: fixed;/*固定定位,它的偏移量是相对于视口的*/ 36 border: 2px solid yellowgreen; 37 width: 500px; 38 height: 150px; 39 top:10px; 40 left:10px; 41 right: 10px; 42 overflow: hidden; 43 } 44 45 .content{ 46 margin: 0 auto; 47 border: 2px solid purple; 48 height: 400px; 49 position: relative;/*相对定位*/ 50 } 51 52 .div4{ 53 position: absolute;/*绝对定位,元素框不再占有文档流位置,并且相对于包含块进行偏移(所谓的包含块就是最近一级外层元素position不为static的元素)*/ 54 border: 2px solid cadetblue; 55 width: 150px; 56 height: 150px; 57 top:100px; 58 left:100px 59 } 60 </style> 61 </head> 62 <body> 63 <div class="container"> 64 <div class="div1">div1(relative)</div> 65 <div class="div2">div2(absolute)</div> 66 <div class="div3">div3(fixed)</div> 67 <div class="content"> 68 <div class="div4"> 69 div4(absolute) 70 </div> 71 </div> 72 </div> 73 </body> 74 </html>
效果图如下:
3.3、响应式布局相关知识点总结
响应式布局主要是用到css3提供的@media进行媒体查询,根据不同的设备分辨率编写不同的css样式,从而实现在不同的分辨率设备下运行显示不同的效果。
1 /*当页面大于1200px时,大屏幕,主要显示PC端*/ 2 @media (min-width: 1200px){ 3 //编写针对PC端的样式 4 /** 5 隐藏应用了这几个样式的移动端的元素 6 */ 7 .logoImg2,.phone2,.menuIcon,.leftMenu,.bottomPhone{ 8 display: none; 9 } 10 } 11 12 /*在992 和1199 像素之间的屏幕里,中等屏幕,分辨率低的PC*/ 13 @media (min-width: 992px) and (max-width: 1199px){ 14 15 } 16 17 /*在768 和991 像素之间的屏幕里,小屏幕,主要是PAD*/ 18 @media (min-width: 751px) and (max-width: 991px){ 19 20 } 21 22 /*在480 和767 像素之间的屏幕里,超小屏幕,主要是手机*/ 23 @media (max-width: 750px){ 24 /*移动端隐藏pc端应用了这些样式的元素*/ 25 .top,.search,.navigationBar,.logoImg,.bottom,.left{ 26 display: none; 27 } 28 29 /*针对移动端编写的样式*/ 30 /**750px所以应限制下页面的大小,所以最外层容器的盒子应该*/ 31 .container{ 32 position: relative; 33 width: 100%; 34 margin: 0 auto; 35 padding: 0; 36 min-height: 0; 37 overflow-x: hidden; 38 overflow-y: hidden; 39 } 40 }
参考资料
@media screen实现屏幕自适应内容详解
https://blog.csdn.net/zzqworkspace/article/details/72724402
移动前端开发之viewport的深入理解
https://www.cnblogs.com/2050/p/3877280.htm
来源:https://www.cnblogs.com/nylcy/p/9173659.html