总结一下css的响应式设计。
可视区域 viewport是页面的可视区域。
针对移动端优化:
1 <meta name ="viewport" content ="width=device-width, initial-scale=1.0" >
user-scalable
:用户是否可以手动缩放。
网格视图 响应式网格视图一半是12cols,宽度100%,自动伸缩。
创建响应式网格:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <style >* { box-sizing : border-box; } .header { border : 1px solid red; padding : 15px ; } .menu { width : 25% ; float : left; padding : 15px ; border : 1px solid red; } .main { width : 75% ; float : left; padding : 15px ; border : 1px solid red; } </style></head><body><div class="header"><h1>Chania</h1></div><div class="menu"><ul><li>The Flight</li><li>The City</li><li>The Island</li><li>The Food</li></ul></div><div class="main"><h1>The City</h1><p>Chania is the capital of the Chania region on the island of Crete. The city can be divided in two parts, the old town and the modern city.</p><p>Resize the browser window to see how the content respond to the resizing.</p></div></body>
一列对应8.33%的宽度。
创建不同宽度对应的class:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 .col-1 { width : 8.33% ; } .col-2 { width : 16.66% ; } .col-3 { width : 25% ; } .col-4 { width : 33.33% ; } .col-5 { width : 41.66% ; } .col-6 { width : 50% ; } .col-7 { width : 58.33% ; } .col-8 { width : 66.66% ; } .col-9 { width : 75% ; } .col-10 { width : 83.33% ; } .col-11 { width : 91.66% ; } .col-12 { width : 100% ; }
所有的列左浮动:
1 2 3 4 5 [class*="col-" ] { float : left; padding : 15px ; border : 1px solid red; }
每一行使用div包裹:
1 2 3 4 <div class ="row" > <div class ="col-3" > ...</div > <div class ="col-9" > ...</div > </div >
清除浮动:
1 2 3 4 5 .row :after { content : "" ; clear : both; display : block; }
媒体查询 例子:
1 2 3 4 5 @media only screen and (max-width: 500px ) { body { background-color : lightblue; } }
添加断点:为不同的设备添加断点以判断设备。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 .col-1 { width : 8.33% ; } .col-2 { width : 16.66% ; } .col-3 { width : 25% ; } .col-4 { width : 33.33% ; } .col-5 { width : 41.66% ; } .col-6 { width : 50% ; } .col-7 { width : 58.33% ; } .col-8 { width : 66.66% ; } .col-9 { width : 75% ; } .col-10 { width : 83.33% ; } .col-11 { width : 91.66% ; } .col-12 { width : 100% ; } @media only screen and (max-width: 768px ) { [class*="col-" ] { width : 100% ; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 [class*="col-" ] { width : 100% ; } @media only screen and (min-width: 768px ) { .col-1 { width : 8.33% ; } .col-2 { width : 16.66% ; } .col-3 { width : 25% ; } .col-4 { width : 33.33% ; } .col-5 { width : 41.66% ; } .col-6 { width : 50% ; } .col-7 { width : 58.33% ; } .col-8 { width : 66.66% ; } .col-9 { width : 75% ; } .col-10 { width : 83.33% ; } .col-11 { width : 91.66% ; } .col-12 { width : 100% ; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 [class*="col-" ] { width : 100% ; } @media only screen and (min-width: 600px ) { .col-m-1 { width : 8.33% ; } .col-m-2 { width : 16.66% ; } .col-m-3 { width : 25% ; } .col-m-4 { width : 33.33% ; } .col-m-5 { width : 41.66% ; } .col-m-6 { width : 50% ; } .col-m-7 { width : 58.33% ; } .col-m-8 { width : 66.66% ; } .col-m-9 { width : 75% ; } .col-m-10 { width : 83.33% ; } .col-m-11 { width : 91.66% ; } .col-m-12 { width : 100% ; } } @media only screen and (min-width: 768px ) { .col-1 { width : 8.33% ; } .col-2 { width : 16.66% ; } .col-3 { width : 25% ; } .col-4 { width : 33.33% ; } .col-5 { width : 41.66% ; } .col-6 { width : 50% ; } .col-7 { width : 58.33% ; } .col-8 { width : 66.66% ; } .col-9 { width : 75% ; } .col-10 { width : 83.33% ; } .col-11 { width : 91.66% ; } .col-12 { width : 100% ; } }
查询横竖屏:横屏landscape、竖屏portrait。
1 2 3 4 5 @media only screen and (orientation: landscape) { body { background-color : lightblue; } }
响应式图片 <img>
图片:
width属性设置为100%,配合max-width避免图片放大。
或者直接使用max-width设置为100%,效果同上。
背景图片:
背景图片可以相应式的调整大小和缩放,有下面三种方法。
background-size 属性设置为 “contain”,按比例自适应缩放。
background-size 属性设置为 “100% 100%”,拉伸充满整个元素。
background-size 属性设置为 “cover”,按比例拉伸直到充满整个元素。
使用媒体查询让不同的设备显示不同的图片:
1 2 3 4 5 6 7 8 9 body { background-image : url ('img_smallflower.jpg' ); } @media only screen and (min-width: 400px ) { body { background-image : url ('img_flowers.jpg' ); } }
可以使用min-device-width替代min-width。
还可以使用html5的 <picture>
元素为不同的设备提供不同的图片,该元素类似于video和audio。
1 2 3 4 5 <picture > <source srcset ="img_smallflower.jpg" media ="(max-width: 400px)" > <source srcset ="img_flowers.jpg" > <img src ="img_flowers.jpg" alt ="Flowers" > </picture >
响应式视频
1 2 3 4 video { max-width : 100% ; height : auto; }
1 2 3 4 video { width : 100% ; height : auto; }
框架 使用bootstrap快速创建响应式布局。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <head > <link rel ="stylesheet" href ="http://apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.min.css" > <script src ="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js" > </script > <script src ="http://apps.bdimg.com/libs/bootstrap/3.3.4/js/bootstrap.min.js" > </script > </head > <body > <div class ="container" > <div class ="jumbotron" > <h1 > 我的第一个 Bootstrap 页面</h1 > </div > <div class ="row" > <div class ="col-sm-4" > ... </div > <div class ="col-sm-4" > ... </div > <div class ="col-sm-4" > ... </div > </div > </div > </body > </html >