0

0

详解前端响应式布局、响应式图片,与自制栅格系统

php中世界最好的语言

php中世界最好的语言

发布时间:2017-11-27 14:35:29

|

3570人浏览过

|

来源于php中文网

原创

首先我们要清楚的知道,什么是响应式,响应式就是在同一个页面的不同尺寸下有不同的布局,那么传统的开发方式是pc端一套,手机端再开发一套,而响应式布局只需要开发一套就好了,缺点是css比较重要。

响应式布局方案选择

响应式设计可选择的方案有:

CSS3 Media Query(推荐):媒体查询,兼容到IE9+,但可以通过插件兼容IE6-8

Flex:弹性布局,兼容性较差(IE10+)

立即学习前端免费学习笔记(深入)”;

Grid:网格布局,兼容性更差

Columns:栅格系统,往往需要依赖于某个UI库,如bootstrap

响应式开发最不好不要杂合使用rem

CSS3 Media Query简介

利用CSS3 Media Query可以轻松实现不同屏幕宽度时切换不同的页面布局

兼容性:IE9+

目前实现CSS3 Media Query 对于IE兼容的库比较成熟的有respond.js和css3-mediaqueries-js,它们各有优劣

respond.js(推荐):压缩后1k,只实现了media query中最常用的min-width max-width的兼容;

css3-mediaqueries-js:基本实现了所有css3规范中的media query特性的兼容,所以导致压缩有16k,测试反馈其性能远低于respond.js;

  

CSS3 Media Query使用

引入方式分为内嵌样式和外部样式,建议使用内嵌样式

使用内嵌样式时,建议将响应式代码写在对应正常样式的下面,不分开书写,以便维护

// 屏幕尺寸大于 480px 时应用该规则 @media screen and (min-width: 480px) {   .header {     background: red;   } } // 屏幕尺寸小于 800px 时应用该规则 @media screen and (max-width: 800px) {}

逻辑操作符:

and or not only

断点的选择(页宽)

自(chao)制(xi)栅格系统

主要抄袭 Bootstrap 和 Layui

为什么要造轮子?栅格系统往往依赖于某个UI框架,但是往往我们不需要那些繁多的组件和样式,只需要一个栅格就够了,鉴于此需求,我自(chao)制(xi)了一套栅格系统

栅格系统用于处理页面多终端适配的问题。栅格的响应式能力,得益于CSS3媒体查询(Media Queries)的强力支持,通常针对四类不同尺寸的屏幕进行相应的适配处理

为什么是12列:因为12的公约数多,是1,2,3,4,6的最小公倍数,相对较灵活。

一、栅格布局规则:

采用 .container(在小屏幕以上的设备中固定宽度) 和 .container-fluid(流体容器,宽度将不会固定,而是 100% 适应)作为布局容器。

采用 row 来定义行,如:

行必须包含在布局容器中,以便为其赋予合适的排列和内补。

只有列(col)可以作为行(row)的直接子元素

S-CMS企业建站系统(含APP/小程序)5.0 build20230614
S-CMS企业建站系统(含APP/小程序)5.0 build20230614

闪灵CMS企业建站系统是淄博闪灵网络科技有限公司开发的一款专门为企业建站提供解决方案的产品,前端模板样式主打HTML5模板,以动画效果好、页面流畅、响应式布局为特色,程序主体采用PHP+MYSQL构架,拥有独立自主开发的一整套函数、标签系统,具有极强的可扩展性,设计师可以非常简单的开发出漂亮实用的模板。系统自2015年发布第一个版本以来,至今已积累上万用户群,为上万企业提供最优质的建站方案。

下载

采用类似 col-md-* 来定义一组列,且放在行内。

变量 * 代表的是该列所占用的12等分数值,可选值为 1 - 12。

如果多个列的等分数值总和等于12,则刚好满行排列。如果大于12,多余的列将自动另起一行。

可对列追加类似 col-space-*、 col-md-offset-* 这样的预设类来定义列间距和列偏移。

如果列间距大于30px,请采用列偏移

三、响应式布局心得:

对于排版差异大的区域,写两份代码,大屏的时候隐藏掉小屏的html,小屏的时候隐藏掉大屏的html标签。并且这种情况不应该是常例,如果你经常要写两套,那说明你这个页面可能不太适合写响应式,还不如直接写两套呢。

左右布局变成上下布局,把右边的内容往下面放。

字号、间距变小

 */ /* reset    ========================================================================== */ @charset "utf-8"; body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, pre,dl, dt, dd, ul, ol, li, form, fieldset, lengend, button, input, textarea, th, td { margin: 0; padding: 0; } ul, ol { list-style: none; } a { text-decoration: none; } q:before, q:after { content: ''; } legend { color: #000; } table { border-collapse: collapse; border-spacing: 0; } button, textarea { font-size: 100%; border: 0; } fieldset, img { border: 0; } a:hover { -webkit-transition: all .5s; transition: all .5s; } *, *:after, *:before { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } /* common    ========================================================================== */ .fl { float: left; *display: inline; _display:inline; } .fr { float: right; *display: inline; _display:inline; } .clearfix:after { display: block; clear: both; content: ''; visibility: hidden; height: 0; } .clearfix { *zoom: 1; } /* 栅格系统,移动设备优先    ========================================================================== */ .container { margin-left: auto; margin-right: auto; padding-left: 15px; padding-right: 15px; } .container-fluid { margin-left: auto; margin-right: auto; padding-left: 15px; padding-right: 15px; } .row { margin-left: -15px; margin-right: -15px; } .row:before, .row:after { content: ""; display: table; clear: both; } .hide-xs { display: none!important; } .show-xs-block { display: block!important; } .show-xs-inline { display: inline!important; } .show-xs-inline-block { display: inline-block!important; } .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {   position: relative;   min-height: 1px;   padding-right: 15px;   padding-left: 15px; } .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {   float: left; } .col-xs-1 { width: 8.33333333%; } .col-xs-2 { width: 16.66666667%; } .col-xs-3 { width: 25%; } .col-xs-4 { width: 33.33333333%; } .col-xs-5 { width: 41.66666667%; } .col-xs-6 { width: 50%; } .col-xs-7 { width: 58.33333333%; } .col-xs-8 { width: 66.66666667%; } .col-xs-9 { width: 75%; } .col-xs-10 { width: 83.33333333%; } .col-xs-11 { width: 91.66666667%; } .col-xs-12 { width: 100%; } .col-xs-offset-1 { margin-left: 8.33333333%; } .col-xs-offset-2 { margin-left: 16.66666667%; } .col-xs-offset-3 { margin-left: 25%; } .col-xs-offset-4 { margin-left: 33.33333333%; } .col-xs-offset-5 { margin-left: 41.66666667%; } .col-xs-offset-6 { margin-left: 50%; } .col-xs-offset-7 { margin-left: 58.33333333%; } .col-xs-offset-8 { margin-left: 66.66666667%; } .col-xs-offset-9 { margin-left: 75%; } .col-xs-offset-10 { margin-left: 83.33333333%; } .col-xs-offset-11 { margin-left: 91.66666667%; } .col-xs-offset-12 { margin-left: 100%; } @media screen and (min-width: 768px) {   .container { width: 750px; }   .hide-sm { display: none!important; }   .show-sm-block { display: block!important; }   .show-sm-inline { display: inline!important; }   .show-sm-inline-block { display: inline-block!important; }   .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6,   .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {     float: left;   }   .col-sm-1 { width: 8.33333333%; }   .col-sm-2 { width: 16.66666667%; }   .col-sm-3 { width: 25%; }   .col-sm-4 { width: 33.33333333%; }   .col-sm-5 { width: 41.66666667%; }   .col-sm-6 { width: 50%; }   .col-sm-7 { width: 58.33333333%; }   .col-sm-8 { width: 66.66666667%; }   .col-sm-9 { width: 75%; }   .col-sm-10 { width: 83.33333333%; }   .col-sm-11 { width: 91.66666667%; }   .col-sm-12 { width: 100%; }   .col-sm-offset-1 { margin-left: 8.33333333%; }   .col-sm-offset-2 { margin-left: 16.66666667%; }   .col-sm-offset-3 { margin-left: 25%; }   .col-sm-offset-4 { margin-left: 33.33333333%; }   .col-sm-offset-5 { margin-left: 41.66666667%; }   .col-sm-offset-6 { margin-left: 50%; }   .col-sm-offset-7 { margin-left: 58.33333333%; }   .col-sm-offset-8 { margin-left: 66.66666667%; }   .col-sm-offset-9 { margin-left: 75%; }   .col-sm-offset-10 { margin-left: 83.33333333%; }   .col-sm-offset-11 { margin-left: 91.66666667%; }   .col-sm-offset-12 { margin-left: 100%; } } @media screen and (min-width: 992px) {   .container { width: 970px; }   .hide-md { display: none!important; }   .show-md-block { display: block!important; }   .show-md-inline { display: inline!important; }   .show-md-inline-block { display: inline-block!important; }   .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6,   .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {     float: left;   }   .col-md-1 { width: 8.33333333%; }   .col-md-2 { width: 16.66666667%; }   .col-md-3 { width: 25%; }   .col-md-4 { width: 33.33333333%; }   .col-md-5 { width: 41.66666667%; }   .col-md-6 { width: 50%; }   .col-md-7 { width: 58.33333333%; }   .col-md-8 { width: 66.66666667%; }   .col-md-9 { width: 75%; }   .col-md-10 { width: 83.33333333%; }   .col-md-11 { width: 91.66666667%; }   .col-md-12 { width: 100%; }   .col-md-offset-1 { margin-left: 8.33333333%; }   .col-md-offset-2 { margin-left: 16.66666667%; }   .col-md-offset-3 { margin-left: 25%; }   .col-md-offset-4 { margin-left: 33.33333333%; }   .col-md-offset-5 { margin-left: 41.66666667%; }   .col-md-offset-6 { margin-left: 50%; }   .col-md-offset-7 { margin-left: 58.33333333%; }   .col-md-offset-8 { margin-left: 66.66666667%; }   .col-md-offset-9 { margin-left: 75%; }   .col-md-offset-10 { margin-left: 83.33333333%; }   .col-md-offset-11 { margin-left: 91.66666667%; }   .col-md-offset-12 { margin-left: 100%; } } @media screen and (min-width: 1200px) {   .container { width: 1170px; }   .hide-lg { display: none!important; }   .show-lg-block { display: block!important; }   .show-lg-inline { display: inline!important; }   .show-lg-inline-block { display: inline-block!important; }   .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6,   .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {     float: left;   }   .col-lg-1 { width: 8.33333333%; }   .col-lg-2 { width: 16.66666667%; }   .col-lg-3 { width: 25%; }   .col-lg-4 { width: 33.33333333%; }   .col-lg-5 { width: 41.66666667%; }   .col-lg-6 { width: 50%; }   .col-lg-7 { width: 58.33333333%; }   .col-lg-8 { width: 66.66666667%; }   .col-lg-9 { width: 75%; }   .col-lg-10 { width: 83.33333333%; }   .col-lg-11 { width: 91.66666667%; }   .col-lg-12 { width: 100%; }   .col-lg-offset-1 { margin-left: 8.33333333%; }   .col-lg-offset-2 { margin-left: 16.66666667%; }   .col-lg-offset-3 { margin-left: 25%; }   .col-lg-offset-4 { margin-left: 33.33333333%; }   .col-lg-offset-5 { margin-left: 41.66666667%; }   .col-lg-offset-6 { margin-left: 50%; }   .col-lg-offset-7 { margin-left: 58.33333333%; }   .col-lg-offset-8 { margin-left: 66.66666667%; }   .col-lg-offset-9 { margin-left: 75%; }   .col-lg-offset-10 { margin-left: 83.33333333%; }   .col-lg-offset-11 { margin-left: 91.66666667%; }   .col-lg-offset-12 { margin-left: 100%; } }

响应式图片

最后再聊聊响应式图片

一般地,相同的banner,在电脑上需要使用大图,但是手机上面使用小图就好了,不然会造成手机上加载慢浪费流量等问题,响应式图片应运而生。如何实现呢?

1. css3 media query

一个办法是使用backgound-image结合媒体查询,如下所示:

.banner{   background-image: url(/static/large.jpg); } @media screen and (max-width: 767px){   background-image: url(/static/small.jpg); }

这种方法的缺点是对SEO不太友好,因为如果使用img标签还可以写个alt属性。

2. picture标签

picturefill.min.js :解决IE等浏览器不支持  的问题

               @@##@@   

如上,如果页面宽度大于800px(PC),则加载大图,而在手机上加载小图。这样写浏览器就只会加载source里面的一张图片。但是如果是用js动态插进去的,它还是会去加载两张,只有写在html里面加载初始化页面的时候才只加载一张。

picture必须要写img标签,否则无法显示,对picture的操作最后都是在img上面,例如onload事件是在img标签触发的,picture和source是不会进行layout的,它们的宽和高都是0。

另外使用source,还可以对图片格式做一些兼容处理:

          @@##@@ 

webp在保持同等清晰度的情况下,体积可以减少一半,但是目前只有Chrome支持,Safari和firefox一直处于实验阶段,所以其它的浏览器如firefox将会加载jpg格式的照片:

3. srcset

@@##@@

如果屏幕的ppi = 1的话则加载1倍图,而dpi = 2则加载2倍图,手机和mac基本上dpi都达到了2以上,这样子对于普通屏幕来说不会浪费流量,而对于视网膜屏来说又有高清的体验。

如果浏览器不支持srcset,则默认加载src里面的图片。

但是你会发现实际情况并不是如此,在Mac上的Chrome它会同时加载srcset里面的那张2x的,还会再去加载src里面的那张,加载两张图片。顺序是先把所有srcset里面的加载完了,再去加载src的。这个策略比较奇怪,它居然会加载两张图片,如果不写src,则不会加载两张,但是兼容性就没那么好。这个可能是因为浏览器认为,既然有srcset就不用写src了,如果写了src,用户可能是有用的。而使用picture就不会加载两张

相信看了这些案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

相关阅读:

CSS3怎么制作蝴蝶飞舞的动画

怎样用canvas实现小球和鼠标的互动

怎样用css3做出图标效果

详解前端响应式布局、响应式图片,与自制栅格系统详解前端响应式布局、响应式图片,与自制栅格系统详解前端响应式布局、响应式图片,与自制栅格系统

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

2

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

446

2026.01.28

包子漫画在线官方入口大全
包子漫画在线官方入口大全

本合集汇总了包子漫画2026最新官方在线观看入口,涵盖备用域名、正版无广告链接及多端适配地址,助你畅享12700+高清漫画资源。阅读专题下面的文章了解更多详细内容。

145

2026.01.28

ao3中文版官网地址大全
ao3中文版官网地址大全

AO3最新中文版官网入口合集,汇总2026年主站及国内优化镜像链接,支持简体中文界面、无广告阅读与多设备同步。阅读专题下面的文章了解更多详细内容。

258

2026.01.28

php怎么写接口教程
php怎么写接口教程

本合集涵盖PHP接口开发基础、RESTful API设计、数据交互与安全处理等实用教程,助你快速掌握PHP接口编写技巧。阅读专题下面的文章了解更多详细内容。

9

2026.01.28

php中文乱码如何解决
php中文乱码如何解决

本文整理了php中文乱码如何解决及解决方法,阅读节专题下面的文章了解更多详细内容。

13

2026.01.28

Java 消息队列与异步架构实战
Java 消息队列与异步架构实战

本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。

10

2026.01.28

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

25

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

124

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 5万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

Excel 教程
Excel 教程

共162课时 | 14.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号