响应式WEB这个名称大家都听的不少了,我第一次听到这个名词是在2013年,经过这么一年多的时间,都流行的不得了,这还是归功于移动设备的疯狂发展。
对于响应式WEB我一直都是用bootstarp框架构建,这个框架我很喜欢呢。
现在有必要很详尽的制作响应式web的步骤和注意事项,毕竟网络上的大神们都写的不尽详细。
为什么用响应式WEB?
响应式宣传片:http://v.youku.com/v_show/id_XODc2NTc1NTc2.html
因为手机上网人数多,这不用我说了吧,也不用去找一堆数据出来了,有兴趣的童鞋可以自己查找相关资料哈。最不好的做法就是做一个宽度大小为320px像素的页面做为移动端web,然后不管你是竖着看还是横着还是平板都用这个320页面,当然这样我们省心省力多了,但是这样多少有用户很不喜欢的。更有一些人,针对移动做一个,平板做一个,PC又做一个,当然,你们公司是土豪然后也特喜欢看你折腾,选择这样做也不是不可以。但是我还是建议用响应式web,不管你是包含到pc,还是仅仅包含到平板,不管怎么样,用响应web是最好的选择。
为什么页面加载缓慢?
也许你会问了,所有设备都用同一套代码,这样在移动设备下不是会加载很多多余的代码?这个是的呢,因为在PC端我们的网站空间多,我们就喜欢把所有的东西都放进去,不管对用户是否有用,都塞进去,这样在你老板眼中才觉得这个页面不错啊,到处都是含金子的信息哈,我也是做设计的,我知道信息多的时候页面特好设计美观。但是那是很久以前的设计观了,只从开始流行“简约”设计理念。
在PC中大量塞无用的信息,但是到了移动端才发现放不进那么多,所以要删,删,删。这时候我们才考虑到底什么是用户真正需要的,然后把不需要的删了,但是呢,我们用display把元素隐藏了,这种html页面还是会加载下来的,只是不显示出来而已。所以说,看起来是删了,但真实是没有删的哈。至于有什么好办法呢,我只想到了“移动设备优先”,至于你有什么好办法,欢迎留言,我们一起探讨。
“移动设备”优先:
我们要站在移动设备来设计页面和编写代码呢,对于设计,我这边就不多说了,毕竟这里写的不是美工。代码的话,就是先为移动设备编写代码,然后再适应PC端。如:一个背景图,如果我们不是“移动设备优先“,而是”PC优先“,那么我们先在正常的CSS中加载大的图片背景,然后再通过”媒体查询“在移动端中又加载一个小图做为背景,那么我们在移动端就是加载了两次背景图。反之,我们先用小图做为背景图,那么移动端就可以直接用小图背景,然后PC再加载大图背景。这样就避免移动设备加载两次代码。
响应式web制作:
1:灵活的网格:
网页中的所有元素,列,行,页面组件都要用百分比来表达宽度,而不用固定的像素。
像素转百分比公式:“目标/上下文=结果”。
如:
.left_con在.warp中,.left_con的宽为960px,而.warp宽为900px。
那么结果为:900/960=0.9375移两位。也就是93.75%。
又如:
.con在.left_con中,.con宽为566px.
那么结果为:566/900=0.628888889 最终为62.8888889%(注意背后的小数点不能舍入)
2:灵活的外边距和灵活的内边距:
注意:
- 弹性marign:上下文是元素容器的宽度;
- 弹性padding:上下文是本身的宽度,若本身没有宽度那么就上下文就是它的容器。
如:psd中的左边距为48px.padding-left:48px;
那么据公式:“目标/上下文=结果”。
结果为:48/自身宽度=%;
3:灵活的图像和媒体:
img{max-width:100%;}
灵活的容器缩放,图像也跟着缩放,而长宽比例则维持不变。IE6及以下不支持“max-width”。
“max-width”:100%;防止图像超出容器宽度。
“width”:100%;则迫使图像永远符合容器的宽度。
4:利用CSS3媒体查询:
好了,废话不多说,我们开始做网站吧:
先上个效果图,我们看到以下效果图。
看到效果后是不是觉得直接用框架bootstrap(可定制)做的话很简单呢,不过我们这里是不用框架自己写响应web的。
设计图的细节没有做处理,比如颜色啊,字体大小的。也许有眼观的会觉得这设计图有点不和谐,哈哈,这里仅仅是为了演示布局的。所以细节没有太尽心了哈。等下我们把源文件上传下,大家将就练习下哈。
我的一个例子
移动端:
PC端:
根据我们前面所说的“移动端优先”所以我们就根据“移动端”效果图,来设置html和CSS.
开发思想:
先用PX作为单位设置html和样式,然后通过公式把值转化为百分比单位。
贴出html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<link rel="stylesheet" href="comm.css" />
<link rel="stylesheet" href="base.css" />
</head>
<body>
<header class="clearfix">
<div class="container">
<div class="top clearfix">
<h1 class="logo left"> <a href="#"> <img src="images/logo.png" alt="" /> </a> </h1>
<nav class="right">
<button> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
</nav>
</div>
<p>PodStar #286 <span>new</span></p>
<div class="main">
Guess what we’ve missed watching World Cup
<br /> 2014. We made a list!
</div>
<div class="head_else clearfix">
<ul>
<li>July 23, 2014</li>
<li><img src="images/time.png" alt="" /><span>36</span>min</li>
<li> <span>38</span><img src="images/heard.png" alt="" /> </li>
<li> <span>23</span> <img src="images/bubb.png" alt="" /> </li>
</ul>
</div>
<div class="btn">
<a href="#">available on</a>
<br />
<a href="#">iTunes Podcasts</a>
</div>
</div>
</header>
<section class="page">
<div class="container">
<h1>Latest on PodStar:</h1>
<div class="pro">
<div class="img">
<a href="#"><img src="images/img01.png" alt="" /></a>
<div class="img_txt">
<ul>
<li>2<a href="#"><img src="images/h2.png" alt="" /></a></li>
<li>5<a href="#"><img src="images/c2.png" alt="" /></a></li>
</ul>
</div>
</div>
<div class="pro_txt">
<p class="pod">PodStar #286</p>
<p class="txt">Guess what we’ve missed watching World Cup 2014. We made a list!</p>
<div class="pro_time clearfix">
<ul>
<li>July 23, 2014</li>
<li><img src="images/time.png" alt="" /><span>36</span>min</li>
</ul>
</div>
<div class="hr"></div>
</div>
<div class="pro_foot clearfix">
<a href="#" class="btn02">playing now</a>
<a href="#" class="btn03"></a>
</div>
</div>
<div class="pro">
<div class="img">
<a href="#"><img src="images/img01.png" alt="" /></a>
<div class="img_txt">
<ul>
<li>2<a href="#"><img src="images/h2.png" alt="" /></a></li>
<li>5<a href="#"><img src="images/c2.png" alt="" /></a></li>
</ul>
</div>
</div>
<div class="pro_txt">
<p class="pod">PodStar #286</p>
<p class="txt">Guess what we’ve missed watching World Cup 2014. We made a list!</p>
<div class="pro_time clearfix">
<ul>
<li>July 23, 2014</li>
<li><img src="images/time.png" alt="" /><span>36</span>min</li>
</ul>
</div>
<div class="hr"></div>
</div>
<div class="pro_foot clearfix">
<a href="#" class="btn02">playing now</a>
<a href="#" class="btn03"></a>
</div>
</div>
<div class="pro">
<div class="img">
<a href="#"><img src="images/img01.png" alt="" /></a>
<div class="img_txt">
<ul>
<li>2<a href="#"><img src="images/h2.png" alt="" /></a></li>
<li>5<a href="#"><img src="images/c2.png" alt="" /></a></li>
</ul>
</div>
</div>
<div class="pro_txt">
<p class="pod">PodStar #286</p>
<p class="txt">Guess what we’ve missed watching World Cup 2014. We made a list!</p>
<div class="pro_time clearfix">
<ul>
<li>July 23, 2014</li>
<li><img src="images/time.png" alt="" /><span>36</span>min</li>
</ul>
</div>
<div class="hr"></div>
</div>
<div class="pro_foot clearfix">
<a href="#" class="btn02">playing now</a>
<a href="#" class="btn03"></a>
</div>
</div>
<div class="pro">
<div class="img">
<a href="#"><img src="images/img01.png" alt="" /></a>
<div class="img_txt">
<ul>
<li>2<a href="#"><img src="images/h2.png" alt="" /></a></li>
<li>5<a href="#"><img src="images/c2.png" alt="" /></a></li>
</ul>
</div>
</div>
<div class="pro_txt">
<p class="pod">PodStar #286</p>
<p class="txt">Guess what we’ve missed watching World Cup 2014. We made a list!</p>
<div class="pro_time clearfix">
<ul>
<li>July 23, 2014</li>
<li><img src="images/time.png" alt="" /><span>36</span>min</li>
</ul>
</div>
<div class="hr"></div>
</div>
<div class="pro_foot clearfix">
<a href="#" class="btn02">playing now</a>
<a href="#" class="btn03"></a>
</div>
</div>
<div class="pro">
<div class="img">
<a href="#"><img src="images/img01.png" alt="" /></a>
<div class="img_txt">
<ul>
<li>2<a href="#"><img src="images/h2.png" alt="" /></a></li>
<li>5<a href="#"><img src="images/c2.png" alt="" /></a></li>
</ul>
</div>
</div>
<div class="pro_txt">
<p class="pod">PodStar #286</p>
<p class="txt">Guess what we’ve missed watching World Cup 2014. We made a list!</p>
<div class="pro_time clearfix">
<ul>
<li>July 23, 2014</li>
<li><img src="images/time.png" alt="" /><span>36</span>min</li>
</ul>
</div>
<div class="hr"></div>
</div>
<div class="pro_foot clearfix">
<a href="#" class="btn02">playing now</a>
<a href="#" class="btn03"></a>
</div>
</div>
<div class="pro">
<div class="img">
<a href="#"><img src="images/img01.png" alt="" /></a>
<div class="img_txt">
<ul>
<li>2<a href="#"><img src="images/h2.png" alt="" /></a></li>
<li>5<a href="#"><img src="images/c2.png" alt="" /></a></li>
</ul>
</div>
</div>
<div class="pro_txt">
<p class="pod">PodStar #286</p>
<p class="txt">Guess what we’ve missed watching World Cup 2014. We made a list!</p>
<div class="pro_time clearfix">
<ul>
<li>July 23, 2014</li>
<li><img src="images/time.png" alt="" /><span>36</span>min</li>
</ul>
</div>
<div class="hr"></div>
</div>
<div class="pro_foot clearfix">
<a href="#" class="btn02">playing now</a>
<a href="#" class="btn03"></a>
</div>
</div>
</div>
</section>
<section class="about">
<div class="container">
<div class="img">
<img src="images/share.png" alt="" />
</div>
<p>Latest #News and useful #Resources from creative community in #PixelBuddhaDigest #2</p>
<p><a href="#">http://pixelbuddha.net/digest/pixelbuddha-digest-2</a></p>
<p class="last">@PodStar 4 days ago</p>
</div>
</section>
<section class="link">
<div class="container">
<div class="tab_link">
<div class="tab1">
<a href="#">PodStar</a>
</div>
<div class="tab2">
<a href="#">All the Pretty Faces</a>
</div>
<div class="tab3">
<a href="#">30 Words per Second</a>
</div>
</div>
<div class="tab_con">
<div class="con_box clearfix">
<div class="img">
<a href="#"><img src="images/p1.png" alt="" /></a>
</div>
<div class="con">
<p class="txt1">Your host:</p>
<p class="txt2">Jeremy Clarkson</p>
<p class="txt3">@JeremyClarkson</p>
</div>
</div>
<div class="con_box clearfix">
<div class="img">
<a href="#"><img src="images/p2.png" alt="" /></a>
</div>
<div class="con">
<p class="txt1">Your host:</p>
<p class="txt2">Jeremy Clarkson</p>
<p class="txt3">@JeremyClarkson</p>
</div>
</div>
</div>
</div>
</section>
<section class="else_link">
<div class="container">
<a href="#">Episodes 1-8</a>
<a href="#">Episodes 1-8</a>
<a href="#">Episodes 1-8</a>
<a href="#">Episodes 1-8</a>
<a href="#">Episodes 1-8</a>
<a href="#">Episodes 1-8</a>
<a href="#">Episodes 1-8</a>
<a href="#">Episodes 1-8</a>
</div>
</section>
<footer>
<div class="container">
<div class="foot1">
<h1>PodStar — podcast star.</h1>
<p>Copyright 2014-2015. All Rights Reserved.</p>
</div>
<div class="foot1">
<h1>Questions?</h1>
<p>Need help? Don’t hestiate to ask us somethings. Email us directly info@pixelbuddha.</p>
</div>
</div>
</footer>
</body>
</html>
CSS
body {font-family: Arial,sans-serif;color: #fff;font-size: 14px;}
.container{width: 360px;margin: 0 auto;}
.icon-bar{display: block;width: 24px;height: 2px;border:1px solid #ac8a52;border-top: 0;border-bottom: 0;background: #d2ab63;margin-bottom: 5px;}
header button{background: transparent;}
.top{margin-bottom: 80px;}
header{background: url(images/headerbg.png) 50% no-repeat ;padding-top: 80px;}
header .main{font-size: 30px;line-height: 44px;margin-top: 10px;}
header p{margin-top: 30px;}
header p span{text-indent: 18px;}
.head_else li{float: left;margin-right: 15px;}
.head_else{margin-top: 40px;}
.head_else li img,.head_else li span{margin-right: 8px;}
.btn{display: block;background: url(images/btn.png);width: 246px;height: 44px;margin-top: 40px;padding: 20px 0;}
.btn a{color: #fff;font-size: 20px;margin-left: 80px;}
header .container{padding-bottom: 120px;}
.page h1{font-size: 30px;color: #2e2a28;margin-bottom: 10px;}
.page{padding-top: 55px}
.pro{ background: #f16767;margin-top: 20px;}
.img{margin-bottom: 22px;position: relative;}
.img_txt{position: absolute;right: 17px;top: 20px}
.img_txt li{float: left;margin-left: 10px}
.img_txt img{margin-left: 10px;}
.pod{font-size: 15px;}
.txt{font-size: 16px;margin:20px 0;line-height: 25px;}
.pro_time li{float: left;margin-right: 10px;}
.pro_time img{margin-right: 10px;}
.pro_time span{margin-right: 5px}
.hr{height: 1px;background: #d85c5c;margin-top: 20px;}
.pro_txt,.pro_foot{margin: 0 17px;}
.pro_foot{padding: 25px 0;}
.btn02{background: url(images/btn02.png);display:block;width: 236px;height: 33px;line-height: 33px;text-align: center;text-transform: uppercase;color: #fff;letter-spacing: 1px;float: left;}
.btn03{display: block;background: url(images/down.png);width: 20px;height: 24px;float: right;}
.about{background: url(images/bg01.png);margin-top: 60px;padding: 75px 0;font-size: 16px;color: #000000;line-height: 30px;}
.about a{text-decoration: underline;color: #000}
.last{margin-top: 10px;text-align: center;}
.about .img{margin-bottom: 45px;text-align: center;}
.tab_link a{font-size: 24px;display: block;margin-bottom: 25px;text-decoration: underline;}
.tab3 a{color: #5baad6}
.tab2 a{color: #56b8b9}
.tab1 a{color: #f16767}
.link{padding-top: 55px;}
.con_box .img{float: left;}
.con_box .con{float: right;font-size: 16px;padding-top: 20px;}
.tab_con{margin-top: 10px;}
.con_box .con p{margin-bottom: 10px;}
.txt3{color: #5baad6;}
.txt2{color: #000;font-size: 26px;}
.txt1{color: #cacaca;}
.else_link{margin-top: 20px}
.else_link a{display: block;background: #5baad6;text-align: center;padding: 8px 0;font-size: 22px;color: #FFF;margin-bottom: 20px;}
footer{background: #5baad6;text-align: center;font-size: 15px;padding : 10px 0 80px}
footer h1{font-size: 20px;margin-bottom: 20px;}
.foot1{margin-top: 70px;}
@media (min-width: 460px){
header{background: url(images/headerbg3.png) 50% ;}
.about{background: url(images/bg02.png);}
}
@media (min-width: 800px){
header{background: url(images/headerbg2.png) 50% ;}
.container{width: 940px;}
.pod{float: left;}
.about{background: url(images/bg03.png);}
}
发现没有?我这里的样式数值用的是“px”单位哦。等下我们会通过公式转为百分比单位。
现在先给出初步效果:
初步的效果就是这样的哈,在移动端下已经OK了,但是在PC端真是惨不忍睹啊,不要忘记了,我们是针对“移动优先”开发的,现在我们来优化PC端的。
首先先把“PX”单位转化为“百分比”吧。
那么据公式:“目标/上下文=结果”:
来打开我们的计算器,计算走起:
提示:有的地方可以维持单位"px"不用修改,你只需要修改布局单位和有需要的地方即可,其他地方可以通过“媒体查询”小作修改;我们只是修改布局容器的宽度,高度可以维持“px”单位,有需要的地方可利用“媒体查询”做修改。
小屏幕下,将容器的宽度改为自动:
.container{width: auto;margin: 0 50px;}
断点处给个固定宽度,多少断点按你的需要:
@media (min-width: 460px){
.container{width: 360px;margin: 0 auto}
}
@media (min-width: 720px){
.container{width: 650px;margin: 0 auto}
}
@media (min-width: 800px){
.container{width: 940px;margin: 0 auto}
}
px转为百分比:
小屏幕就横跨一栏即可。
@media (min-width: 460px){
.pro{width: 83.333333333333%;/*300/940*/}
}
@media (min-width: 720px){
.container{width: 650px;margin: 0 auto}
.pro{width: 46.15384615384615%;/*300/650*/}
}
@media (min-width: 800px){
.pro{width: 31.91489361702128%;/*300/940*/}
}
图片强制撑满父容器:
.pro .img>a>img{width: 100%}
然后利用“媒体查询”做进一步的修改:
最终样式
body {font-family: Arial,sans-serif;color: #fff;font-size: 14px;}
.pro .img>a>img{width: 100%}
.container{width: auto;margin: 0 50px;}
.icon-bar{display: block;width: 24px;height: 2px;border:1px solid #ac8a52;border-top: 0;border-bottom: 0;background: #d2ab63;margin-bottom: 5px;}
header button{background: transparent;}
.top{margin-bottom: 80px;}
header{background: url(images/headerbg.png) 50% no-repeat ;padding-top: 80px;}
header .main{font-size: 30px;line-height: 44px;margin-top: 10px;}
header p{margin-top: 30px;}
header p span{text-indent: 18px;}
.head_else li{float: left;margin-right: 15px;}
.head_else{margin-top: 40px;}
.head_else li img,.head_else li span{margin-right: 8px;}
.btn{display: block;background: url(images/btn.png);width: 246px;height: 44px;margin-top: 40px;padding: 20px 0;}
.btn a{color: #fff;font-size: 20px;margin-left: 80px;}
header .container{padding-bottom: 120px;}
.page h1{font-size: 30px;color: #2e2a28;margin-bottom: 10px;}
.page{padding-top: 55px}
.pro{ background: #f16767;margin-top: 20px;}
.img{margin-bottom: 22px;position: relative;}
.img_txt{position: absolute;right: 17px;top: 20px}
.img_txt li{float: left;margin-left: 10px}
.img_txt img{margin-left: 10px;}
.pod{font-size: 15px;}
.txt{font-size: 16px;margin:20px 0;line-height: 25px;}
.pro_time li{float: left;margin-right: 10px;}
.pro_time img{margin-right: 10px;}
.pro_time span{margin-right: 5px}
.hr{height: 1px;background: #d85c5c;margin-top: 20px;}
.pro_txt,.pro_foot{margin: 0 17px;}
.pro_foot{padding: 25px 0;}
.btn02{background: url(images/btn02.png);display:block;width: 236px;height: 33px;line-height: 33px;text-align: center;text-transform: uppercase;color: #fff;letter-spacing: 1px;float: left;}
.btn03{display: block;background: url(images/down.png);width: 20px;height: 24px;float: right;}
.about{background: url(images/bg01.png);margin-top: 60px;padding: 75px 0;font-size: 16px;color: #000000;line-height: 30px;}
.about a{text-decoration: underline;color: #000}
.last{margin-top: 10px;text-align: center;}
.about .img{margin-bottom: 45px;text-align: center;}
.tab_link a{font-size: 24px;display: block;margin-bottom: 25px;text-decoration: underline;}
.tab3 a{color: #5baad6}
.tab2 a{color: #56b8b9}
.tab1 a{color: #f16767}
.link{padding-top: 55px;}
.con_box .img{float: left;}
.con_box .con{float: left;margin-left: 20px; font-size: 16px;padding-top: 20px;}
.tab_con{margin-top: 10px;}
.con_box .con p{margin-bottom: 10px;}
.txt3{color: #5baad6;}
.txt2{color: #000;font-size: 26px;}
.txt1{color: #cacaca;}
.else_link{margin-top: 20px}
.else_link a{display: block;background: #5baad6;text-align: center;padding: 8px 0;font-size: 22px;color: #FFF;margin-bottom: 20px;}
footer{background: #5baad6;text-align: center;font-size: 15px;padding : 10px 0 80px;margin-top: 90px}
footer h1{font-size: 20px;margin-bottom: 20px;}
.foot1{margin-top: 70px;}
@media (min-width: 460px){
header{background: url(images/headerbg3.png) 50% ;}
.about{background: url(images/bg02.png);}
}
@media (min-width: 720px){
.tab_link>div{display: inline-block;margin-right: 30px;}
.container{width: 650px;margin: 0 auto}
.con_box img{width: 130px}
.pro,.con_box,.else_link a{width: 46.15384615384615%;/*300/650*/ display: inline-block;margin: 0 10px;margin-bottom: 20px;}
.txt2{font-size: 20px}
.page h1{margin-left: 10px}
.page .container{padding-left: -10px;padding-top: -10px;}
.about{text-align: center;}
}
@media (min-width: 800px){
.top,header{margin-bottom: 40px}
header{background: url(images/headerbg2.png) 50% ;}
header .container{padding-bottom: 70px;}
.about{background: url(images/bg03.png);}
}
@media (min-width: 1200px){
header .container{padding-bottom: 150px;position: relative;}
.btn{position: absolute;top: 70px;right: 0}
.container{width: 940px;margin: 0 auto}
.pro{width: 30.91489361702128%;/*300/940*/}
.con_box{width: 48.93617021276596;/*460/940*/}
.con_box .txt2{font-size: 26px;}
.con_box img{width: 150px}
.btn02{background: url(images/btn02-1.png);line-height: 33px;width: 176px;font-size: 14px;}
}
最终效果:
设计图+代码下载
另一个简单的例子
如果觉得上面的例子有点复杂或者有点长,现在我们就来看下其他人做的一个响应式网站。
放出效果图:
好了,现在我们来分析他的做做法,当然了有时候我自己的项目也会用这种方法,具体要不要用就看大家自己的项目而定,我上面那个例子是很多情况下都可以用的,只是写起代码来就有点复杂,不过这个例子写起来很简单的,我们现在来分析吧:
首先,他按照效果给出了最外层div一个最大的宽度960px(使其宽屏中不超过960px),然后让其居中;
我的修改:
#warp {
max-width: 960px;
margin: 0 auto;
}
原文:
#wrap, footer/*, #header_wrap, */{ margin: 0 auto; max-width: 60em; padding:0; /* 988px / 16px = 61.75em */}
然后在里面再添加一个内包围容器;给它宽度100%;
#wrap {
float: left;
width: 100%;
padding: 0 30px;
margin-left: -30px;
background: url(../images/body-bg.png) repeat-x top #fff;
}
然后里面的列容器都给了宽度百分比单位:
.one-fourth {
width: 22.5%;
float: left;
margin-left: 3%;
margin-bottom: 40px;
}
然后把一些不需要在小屛显示的元素,隐藏"display:none"。
@media handheld and (max-width: 600px), screen and (max-device-width: 600px), screen and (max-width: 768px)
.crumbs span {
display: none;
}
最后利用媒体查询,根据不同的分辨率做出适当的调整:
1:为了显示内容不占满浏览器,注意上面他是没有定义固定的宽度,默认div(块元素)是占满一行显示的,他只是给出一个最大宽度960px。所以当容器低于960px的时候,就会占满浏览器,因为也没有空间使其居中。
所以这里为了解决满屏效果,就在body中设置了"margin"和"padding"值。
media="screen"
@media handheld and (max-width: 600px), screen and (max-device-width: 600px), screen and (max-width: 768px)
body {
padding: 0 30px;
margin: 0 30px;
}
2:给里面的列容器设置100%宽度使其各占一行:
@media handheld and (max-width: 600px), screen and (max-device-width: 600px), screen and (max-width: 768px)
.one-fourth {
width: 100%;
float: left;
margin-left: 0;
}
由以上分析,这网站不是移动优先开发代码的网站,因为他是完全在pc端向下兼容的。
其网站网址
高密度手机:
近代的手机配有高密度的屏幕,如iphone4 的物理像素为960*640;而三星的一款手机高达1280*720.这意味着移动用户的网络连接慢,但其高密度屏幕却要求分辨率与Pc的相近或更高的图像。
这里有个处理背景图的方式:
@media screen and (min-moz-device-pixel-ratio:1.5){
/* css*/
}
@media screen and (-webkit-min-device-pixel-ratio:1.5){
/* css*/
}
@media screen and (-o-min-device-pixel-ratio:3/2){
/* css*/
}
@media screen and (min-device-pixel-ratio:1.5){
/* css*/
}
移动设备必加
<meta name="viewport" content="width=device-width, initial-scale=1">
浏览窗口和设备大少一致。
关于IE8及以下的兼容问题:
在“响应式”网站中我普遍会用到html5的标签(语意较好)和CSS3媒体查询,max-width;
1:让ie678支持html5标签和css3媒体查询需要在头部添加以下代码:
<!--[if lt IE 9]>
<script src="http://cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="http://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
注意:观察媒体查询是有有效,请在本地搭建服务器。需要协议http浏览。
2:ie6不支持“max-width”:
#warp{max-width: 960px;_width:expression((documentElement.clientWidth > 960) ? "960px" : "auto" );}
3:其他兼容性问题,请查看html5和css3hack文章
客户端考虑性能的话:
- 多张图压缩至单一文件;
- 组合并简化CSS和JS文件;(1和2都是减少http请求,页面中的每个外连资源都要一次单独的http请求。连续不断的请求很多小的文件会比一次性请求一个大文件要慢很多。)
- 尽量不要依赖复杂的JS库。
- 善用htmL5和css3;
- 避免用后代选择器(浏览器解析CSS选择器是从左到右边的。如 a img.img01 那么就会在整个dome里面找出全部的a然后再找出有.img01的img,开销是很大的。)
- Js文件放底部。(如果放头部,那么浏览器就会现在等所有的脚本加载到本地并解析完毕才开始解析页面,这样就会造成页面的延迟)
推荐文章:
让网站变成响应式(Responsive)的的详细教程!
网站编辑:adminer
出处:http://www.hackhome.com
发表时间:2013-3-6 10:00:38
现在的很多网站更加趋向于手机或者平板的方向了,这里就是大家都知道的一个名词响应式(Responsive),那么这个技术怎么实现的呢?现在网侠小编就来具体和大家说一说吧:
如今,一个网站只在桌面屏幕上好看是远远不够的,同时也要在平板电脑和智能手机中能够良好呈现。响应式的网站是指它能够适应客户端的屏幕尺寸,自动响应客户端尺寸变化。在这篇文章中,我将向您展示如何通过3个简单的步骤轻松地使网站变成响应式(Responsive)。
1 – 布局
当创建一个响应式网站,或让现有的网站变成响应式的,首先要关注的元素的布局。我在建立响应式的网站,总是先创建一个非响应的布局,页面宽度固定大小。如果非响应版本完成得非常不错,我再添加媒体查询(Media Queries)和响应式代码。这种操作方式更容易实现响应式特性,在同一时间专注于一个任务。
当你已经完成了无响应的网站,做的第一件事是在你的 HTML 页面,粘贴下面的代码到<haed>和</head>标签之间。这将设置屏幕按1:1的尺寸显示,在 iPhone 和其他智能手机的浏览器提供网站全视图浏览,并禁止用户缩放页面。
123 |
<metaname="viewport"content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><metahttp-equiv="X-UA-Compatible"content="IE=edge,chrome=1"><metaname="HandheldFriendly"content="true"> |
现在是时候添加一些媒体查询了。根据 W3C 网站,媒体查询由媒体类型和零个或多个媒体查询的条件表达式组成。通过使用媒体查询,外观呈现可以针对特定范围内的输出设备,而不需要改变内容本身。换句话说,媒体查询让您的网站在各种各种显示器上看起来都很好,从小的智能手机到大的电脑屏幕等等。
媒体查询取决于你的网站布局,所以对我来说为您提供一个现成可以使用的代码片段有点困难。但是,下面的代码对于大多数网站都是一个很好的起点。在这个例子中,#primary 是主要内容区域,#secondary 是侧栏。
从代码中你可以看到,我定义了两种规格:首先有一个最大宽度为1060px,为平板电脑优化的横向显示。#primary 占在其父容器宽度的67%,#senondary 占30%,再加上3%的左外边距。 第二个规格是用于平板电脑和更小的屏幕尺寸。
由于智能手机的屏幕尺寸小,我决定给 #primary 设置100%的宽度,#secondary 也设置100%的宽度,他将在 #primary 下面。 正如我已经说过的,你可能必须要对这段代码位进行修改才能适应您的网站的具体需求。
1234567891011 |
/* Tablet Landscape */@mediascreenand (max-width:1060px) { #primary {width:67%; } #secondary {width:30%;margin-left:3%;} } /* Tabled Portrait */@mediascreenand (max-width:768px) { #primary {width:100%; } #secondary {width:100%;margin:0;border:none; }} |
完成以后,让我们看看你的布局是如何响应的。要做到这一点,我用这 Matt Kersley 创建的一款非常的响应式测试工具。
2 – 媒体
一个响应式的布局是实现响应网站的第一步。现在,让我们把注意力集中在另外一个现代化网站非常重要的方面:媒体,如视频或图像。 下面的 CSS 代码将确保您的图像将永远不会大于他们的父容器,代码非常简单,适用于大多数网站。请注意,IE6 等旧的浏览器不支持 max-width 指令。
虽然上述技术是有效的,有时你可能需要有更多的图像控制权,例如根据客户端的显示大小,显示不同的图像。
这是由 Nicolas Gallagher 发明的好方法。让我们看看 HTML:
1 |
<imgsrc="image.jpg"data-src-600px="image-600px.jpg"data-src-800px="image-800px.jpg"alt=""> |
正如你可以看到,我们使用 data-* 属性来存储替换图像的 URL。现在,让我们使用强大的 CSS3 来为匹配 min-device-width 条件的媒体指定替换图像:
1234567891011 |
@media (min-device-width:600px) { img[data-src-600px] { content:attr(data-src-600px,url); }} @media (min-device-width:800px) { img[data-src-800px] { content:attr(data-src-800px,url); }} |
令人印象深刻,是不是?现在,让我们来看看另一个在今天的网站中非常重要的媒体——视频。由于大多数网站使用的视频来自第三方网站,我决定把重点放在 Nick La 的弹性视频技术,这种技术可让您嵌入的响应式的视频。
HTML:
123 |
<divclass="video-container"> <iframesrc="http://player.vimeo.com/video/6284199?title=0&byline=0&portrait=0"width="800"height="450"frameborder="0"></iframe></div> |
CSS:
1234567891011121314151617 |
.video-container { position:relative; padding-bottom:56.25%; padding-top:30px; height:0; overflow:hidden;} .video-container iframe, .video-container object, .video-containerembed{ position:absolute; top:0; left:0; width:100%; height:100%;} |
在你的网站上应用了这些代码后,嵌入的视频也是响应式(Responsive)的了。
3 – 字体
本教程的最后一步绝对非常重要,但往往被网站开发人员忽视——字体。到现在为止,大多数开发人员(包括我自己)使用像素来定义字体的大小。虽然像素在普通网站使用是OK的,但是对于响应式网站来说应该有响应式的字体。事实上,一个响应式的字体大小应关联它的父容器的宽度,这样它才可以适应客户端的屏幕。
CSS3 规范引入了一个新的单位叫 rem,和 em 类相似,但相对于 HTML 元素来说, rem 更易于使用。
rem 是相对于 HTML 元素的,不要忘了重置 HTML 的字体大小:
1 |
html {font-size:100%; } |
完成后,您可以定义响应式的字体大小,如下所示:
123 |
@media (min-width:640px) { body {font-size:1rem;} }@media (min-width:960px) { body {font-size:1.2rem;} }@media (min-width:1100px) { body {font-size:1.5rem;} } |
请注意,旧浏览器不支持 rem 单元,所以不要忘了实现一个替代。
其他相关文章