提到响应式,就不得不提两个响应式框架——bootstrap和foundation。在标题上我已经说明白啦,今天给大家介绍的是foundation框架。
何为“尝鲜”?就是带大伙初步一下foundation的灵活和强大
何为“踩坑”?就是我把我使用的时候踩过的坑给标个记号,这样大伙用的时候就可以“绕道而行“啦!
 
没错今天我这篇文章讲的就是北方酱左手边的那个看起来温(diao)文(de)尔(yi)雅(bi)的山羊先生:foundation!:
文章主要的四点内容:
1.foundation 网格布局之行列栅格 (row and column)
2.foundation 网格布局之块状栅格(block grids)
3.响应式栅格和可视化
4.浮动栅格

【注意】在这篇文章中我采取的是React框架的写法,可能有些影响阅读,请多多包涵,className等同于class, style= {{background:'red'}}等同于 style = "background:red",可放心食用

【准备工作】 把下面这两个东西写在你的html文件里:

<link rel="stylesheet" href="http://cdn.staticfile.org/foundation/6.3.0-rc3/css/foundation.min.css">(放在head标签内)<script src="http://cdn.staticfile.org/jquery/3.1.1/jquery.min.js"></script>(放在body底部)

1. foundation 网格布局之行列栅格 (row and column)
<div className = 'row'><div className = 'small-2 medium-6 large-10 columns' style = {{background:'red'}}>column1</div><div className = 'small-10 medium-6 large-2 columns' style = {{background:'blue'}}>column2</div>
</div>

在一个行父级元素下有多个列子元素,列子元素按网格分长度。网格总共分为为12列,如你所见对于small 2 + 10 = 12,对于medium 6 + 6 =12 ... 你需要做的事情很简单:在行父级元素上写入className = 'row',在列各个子元素中写入[size]-数字,同时让各个数字之和为12即可,上述是两列的情况,如果有三列则可为small-2,small,small-8,small-2(和为12),一般为12,下面也会介绍可以不为12的情况,很简单!对吧!
 
【注意】:你一定要记得在列子元素className后面写入columns!(这应该是很多新手会犯的错误)
demo:
大型设备:(单行占全屏100%)
 
中型设备:(单行占全屏100%)
小型设备:(单行占全屏100%)
写入className = 'row'的类是默认占满父级元素的,所以注意我们并没有写上with:100%
 
1.1虽然简单,但别高兴太早,因为第一个坑即将到来..... . ( ^ω^). 
我们把上面的代码改一改,把medium和large的布局给去掉:
<div className = 'row'><div className = 'small-6 columns' style = {{background:'red'}}>column1</div><div className = 'small-6 columns' style = {{background:'blue'}}>column2</div>
</div>

demo:
小型设备:(单行占全屏100%)
中型设备:(单行占全屏100%)
大型设备:(单行占全屏100%)
what!我不是只写了关于small的布局吗?怎么在中型设备和大型设备也变成和小型设备一样的布局了?look下面
【foundation的布局“继承”】:大的size会自动"继承"小的size,也就是说你只写了small-6 columns,它会默认你写了small-6 medium-6 large-6 columns,同理,即使你写了small-6 medium-10 columns,它也会默认你写了small-6 medium-10 large-10 columns 这种继承是单向的:从小到大,也就是说你只写了large-6 columns,small和medium不能得到值。
如果我们写成
<div className = 'row'><div className = 'large-6 columns' style = {{background:'red'}}>column1</div><div className = 'large-6 columns' style = {{background:'blue'}}>column2</div>
</div>

在小型设备和中型设备上:(单行占全屏100%)
1.2接下来就是我们可能遇到的第二个坑..... . ( ^ω^). 
让我们“仔细”看看我们在大型设备上的显示:
注意看两边是有空白的,(哎呀怎么回事?刚才不是还说好默认占父元素100%的么)
这是由于foundation的内在机制,网格 (.row) 最大尺寸( max-width)为 62.5rem。在宽屏设备上尺寸可能大于 62.5rem, 这样列就无法完整填充页面!
别急,让我们做一些弥补的操作,让我们给行父元素加上max-width: 100%;:
<div className = 'row' ><div className = 'large-6 columns' style = {{background:'red'}}>column1</div><div className = 'large-6 columns' style = {{background:'blue'}}>column2</div>
</div>

demo:(大型设备最宽屏)
没有空白了!坑已经填上了!(。・∀・)ノ耶!
1.3接下来是我们的第三个坑..... . ( ^ω^). (待我拿吧铲子把填上的坑再挖出来)
正所谓学而不思则罔,你可能会问:哥们你之前写的都是size-number中number加起来等于12的demo,但是我就是作死不想写成总和为12的话,会怎样呢?
让我们来试试!:
<div className = 'row' style = {{maxWidth:'100%'}}><div className = 'small-3 columns' style = {{background:'red'}}>column1</div><div className = 'small-3 columns' style = {{background:'blue'}}>column2</div><div className = 'small-3 columns' style = {{background:'yellow'}}>column2</div>
</div>

注意看,黄色的色块靠在最右边,这说明了当你的总和不能凑够12的时候,行父元素的最后一个子元素会自动向右浮动
【解决办法】给最后一个子元素加上end的类名
<div className = 'row' style = {{maxWidth:'100%'}}><div className = 'small-3 columns' style = {{background:'red'}}>column1</div><div className = 'small-3 columns' style = {{background:'blue'}}>column2</div><div className = 'small-3 columns end' style = {{background:'yellow'}}>column3</div>
</div>

demo:(总共占全屏75%)
看到没有,它跟上来啦!
1.4接下来是我们的第四个坑..... . ( ^ω^). 
【foundation单行单列居中】  很多时候我们并不需要在一个行网格中放入多个列,很多时候我们需要只需要在一个行中放入一个列,然后让它居中就可以了,我们需要在对应的size-number后加入size-centered譬如:small-centered
<div className = 'row'><div className = 'small-6 small-centered columns' style = {{background:'red'}}>column1</div>
</div>

demo:(小型设备上)
猜猜看在中型和大型设备上会怎么样?没错!跟前面一样,medium和large“继承”了small的居中特性!于是在中/大设备中你“被居中”了。
what the hack! 但如果我硬是不想在中/大型设备上被居中的话怎么办?你只能这样写:加入size-uncentered
<div className = 'row'><div className = 'small-6 small-centered medium-uncentered large-uncentered columns' style = {{background:'red'}}>   column1  </div>
</div>

demo:(中/大型设备上)(单行占全屏50%)
这样你就取消了被动的居中
2.foundation 栅格布局之块状栅格(block grids)
有时我们的布局对象不是以行列的方式二是以块状的方式展现的,例如:
<div className = 'row small-up-2 medium-up-3 large-up-4' style = {{maxWidth:'100%'}}><div className = 'columns column-block' style ={{minHeight:'20px',background:'grey'}}></div><div className = 'columns column-block' style ={{minHeight:'20px',background:'blue'}}></div><div className = 'columns column-block' style ={{minHeight:'20px',background:'red'}}></div><div className = 'columns column-block' style ={{minHeight:'20px',background:'yellow'}}></div><div className = 'columns column-block' style ={{minHeight:'20px',background:'black'}}></div><div className = 'columns column-block' style ={{minHeight:'20px',background:'orange'}}></div>
</div>

依然是在父级元素和子元素中添加row和columns类名。同时,在父级元素里面写入:size-up-number:number表示每一行最大的块数,在块子元素里面写入:columns column-block
demo:
大型设备:(单行占全屏100%)
中型设备:(单行占全屏100%)
小型设备:(单行占全屏100%)
2.1坑点一 ——column-block类名会给每个栅格架上一定的margin-bottom
这种写法,上下两个块级栅格列默认是由margin-bottom,开箱试验表明,在中/大型设备上为margin-bottom:30px,在小型设备上为margin-bottom:20px;当然,很多时候你可能不想要这个外边距,去掉它的方法很简单,不加 column-block就可以了,比如我们写成:
<div className = 'row small-up-2 medium-up-3 large-up-4' style = {{maxWidth:'100%'}}><div className = 'columns ' style ={{minHeight:'20px',background:'grey'}}></div><div className = 'columns ' style ={{minHeight:'20px',background:'blue'}}></div><div className = 'columns ' style ={{minHeight:'20px',background:'red'}}></div><div className = 'columns ' style ={{minHeight:'20px',background:'yellow'}}></div><div className = 'columns ' style ={{minHeight:'20px',background:'black'}}></div><div className = 'columns ' style ={{minHeight:'20px',background:'orange'}}></div>
</div>

在中型设备上:(单行占全屏100%)
margin-bottom已经被我们去掉啦
2.2坑点二:子类名写columns或column效果一样
(其实也不算是坑点)在查阅官方文档时我有一个感到疑惑的点,就是官方文档在弹性栅格这一节里使用的子类名不是columns而是column(后面没有s)
经过试验证明,在所有上述和下面的例子中,无论你写的类名是column还是columns效果都是一样的.... _(:3 」∠)_
 
2.3坑点三:在块级栅格中,你无法用“small-6 medium-4 large-2 ”的行列栅格的写法定义每个栅格的宽度
 
块级栅格很好的一点就是解决了行列栅格只能实现行列栅格只能在单行实现自适应布局的局限性,于是我们想,能不能把两个东西结合到一起呢?很可惜,不能!我们把两种写法结合在一起,写成:
<div className = 'row small-up-2 medium-up-3 large-up-4' style = {{maxWidth:'100%'}}><div className = 'small-3 columns' style ={{minHeight:'20px',background:'grey'}}></div><div className = 'small-3 columns' style ={{minHeight:'20px',background:'blue'}}></div><div className = 'small-3 columns' style ={{minHeight:'20px',background:'red'}}></div><div className = 'small-3 columns' style ={{minHeight:'20px',background:'yellow'}}></div><div className = 'small-3 columns' style ={{minHeight:'20px',background:'black'}}></div><div className = 'small-3 columns' style ={{minHeight:'20px',background:'orange'}}></div>
</div>

如果这种写法能够成功,那么按照我们的设想,在小型屏上,因为small-up-2而单行显示两个栅格块,同时每个栅格所占位置应该是3/12 = 1/4,两个栅格一共占去屏幕的1/4+1/4 =1/2,为50%,让我们看看demo:
demo:(小型屏幕)(单行占全屏100%)
两个栅格占去了全屏的100%,而不是50%,这说明,通过size-number的宽度调节在块级栅格中已经失去了作用:
 
虽然在块级栅格中,你无法写行列栅格的类名去规定单个栅格的宽度,但你可以通过style指定定宽的方式实现这一点
<div className = 'row small-up-2 medium-up-3 large-up-4' style = {{maxmaxWidth:'100%'}}><div className = ' columns ' style ={{width:'25%',minHeight:'20px',background:'grey'}}></div><div className = ' columns ' style ={{width:'25%',minHeight:'20px',background:'blue'}}></div><div className = ' columns ' style ={{width:'25%',minHeight:'20px',background:'red'}}></div><div className = ' columns ' style ={{width:'25%',minHeight:'20px',background:'yellow'}}></div><div className = ' columns ' style ={{width:'25%',minHeight:'20px',background:'black'}}></div><div className = ' columns ' style ={{width:'25%',minHeight:'20px',background:'orange'}}></div>
</div>

demo:小型屏
3.响应式栅格和可视化
你可能遇到过这样一个需求,做一个网页去同时适应手机端和PC端(或者说是小型屏和中/大型屏)这时候你希望一个页面元素仅仅只在中大型屏上显示而不在小型屏幕上显示。怎么控制这个可视化的响应式呢?foundation的show-for-size类和show-for-size-only类可以轻松地帮助到你
show-for-size类
<div><p className = 'show-for-small'>我在小/中/大型屏幕显示</p><p className = 'show-for-medium'>我在中大型屏幕显示</p><p className = 'show-for-large'>我在大型屏幕显示</p>
</div>

demo:
大型屏幕:
中型屏幕:
小型屏幕:
 
show-for-size-only类:
<div><p className = 'show-for-small-only'>我只在小型屏幕显示</p><p className = 'show-for-medium-only'>我只在中型屏幕显示</p><p className = 'show-for-large-only'>我只在大型屏幕显示</p>
</div>

demo:
大型屏幕:
中型屏幕:
小型屏幕:
【注意】show-for-size类和show-for-size-only类的区别在于show-for-size类有“继承”的特性,也就是你只写className = 'show-for-small'相当于写了className = 'show-for-small show-for-medium show-for-large'则在任意屏幕上都能显示,而show-for-small-only则只能在小型屏幕上显示
4.浮动栅格
foudation还有一个类叫浮动类(其实瓦觉得这似乎并没有特别大的用处毕竟来说你也可以自己写css,但是我个人感觉在foudation下写类名的话,代码看起来会好看一些╮(~▽~)╭,不知道各位是怎么认为的呢 )
<div className = 'row'><p className = 'float-left'>float-left</p><p className = 'float-right'>float-right</p>
</div>

demo:
最后一点:附上菜鸟教程和官方文档的链接:
http://www.runoob.com/foundation/foundation-tutorial.html(我就是那个教程)
http://foundation.zurb.com/sites/docs/grid.html(我是就是那个文档)
【注意】我这篇文章是在参考官方英文文档的基础上写的,在这里提个建议——不要只看菜鸟教程(不是不看,而是不要只看!),建议还是得多看看官方的英文文档,否则你会发出我如下的感慨——
 

最后最后的一点

【响应式】foundation栅格布局的“尝鲜”与“填坑”相关推荐

  1. 微金所页面制作(Bootstrap 响应式开发 栅格布局 响应式布局)

    该页面适用于 PC端 和 移动端,在响应式开发的媒体查询下能够适配所有屏幕. 一.页面效果 二.结构样式说明 (需引入bootstrap 相关样式文件) 结构分为八块: 头部块:.wjs_header ...

  2. html页面栅格系统,分享响应式CSS栅格系统

    分享响应式CSS栅格系统 栅格系统 这种东西和许多同类工具/素材一样,"系统"二字让它看起来无比高大上,而实际上大多数的栅格系统 只是一系列纵横交错的细线构成.很简单?看起来确实如 ...

  3. 响应式网页的布局设计

    值得收藏的14款响应式前端开发框架 作为今年大热的设计趋势,响应式已然是设计师的标配技能.今天阿里的同学从响应式设计的布局类型.布局实现两方面深入讲解,有哪些实现布局的方式,该采用何种方式,都有相当专 ...

  4. html5 box布局,使用Flexbox打造响应式网页网格布局

    CSS3的Flexbox可以非常容易的制作出各种布局效果.前面我们已经结束了flexbox的基本使用方法,水平布局和垂直布局方法.这篇文章我们来看看如果制作具有响应式效果的flexbox双列网格布局效 ...

  5. 前端响应式/自适应/流动布局

    文章目录 1. 控制视口(viewport) 2. 媒体查询 2.1 媒体类型 2.2 媒体特征 2.3 逻辑条件 2.4 使用媒体查询设置断点 3. 图片的自适应 4 自适应图片等素材 5 不使用绝 ...

  6. 从零开始前端学习[38]:html5中的弹性布局一(移动端响应式实现各种布局,极其重要)

    html5中的弹性布局(移动端及其重要) 弹性盒子模型是什么? 容器属性 提示 博主:章飞_906285288 博课地址:http://blog.csdn.net/qq_29924041 弹性盒子模型 ...

  7. html响应式五栏布局,HTML – 响应式2列CSS布局,包括固定宽度的侧边栏?

    在任何地方找不到解决方案(我猜这一定是一个非常常见的问题). 我正在创建一个带侧边栏的响应式设计,其中侧边栏需要具有200px的固定宽度并且具有未知高度.我怎样才能使主要内容区占据所有剩余的宽度,而不 ...

  8. 响应式html编辑器布局,基于Bootstrap响应式所见即所得的jQuery编辑器插件

    LineControl Editor是一款基于Bootstrap的响应式.所见即所得的富文本编辑器jQuery插件.该富文本编辑器可以使用textarea元素或任何一个容器元素来生成,它拥有常见富文本 ...

  9. 极其简单的响应式的模块化布局、看板布局 js 工具

    官网 www.xmlayout.com 效果图

最新文章

  1. 无监督域对抗算法:ICCV2019论文解析
  2. 活动|跟着微软一起,拥抱开源吧!
  3. 7-26 有重复的数据I (10 分)
  4. 美团点评移动网络优化实践
  5. IntelliJ IDEA 编辑器配置vue高亮显示
  6. react 开源项目_2020年2月Github上最热门的JavaScript开源项目
  7. 排序数组中的两个数字之和
  8. iOS边练边学--UIScrollView的属性简单使用,代理的简单介绍以及内容缩放
  9. Hls之Hls.js源码解析
  10. hive时间函数入门
  11. nginx日志采集 mysql_shell + go + mysql nginx日志统计 (三) :数据的展示
  12. Android基于腾讯云的小直播开发步骤
  13. ZDM按横断面水位线河道开挖
  14. 软件测试和软件调试的区别
  15. 【Linux c】sipc
  16. 使用 阿里云 播放器播放 .flv 和 hls(.m3u8) 格式的视频流
  17. 计算机应用研究被ei检索吗,SCI/EI检索的国内计算机期刊
  18. c++ getline()详解
  19. Spring中事务提交成功后处理的异步调用方法
  20. 电流的磁效应与安培右手定则实验

热门文章

  1. Asterisk 是什么?
  2. 三、项目分工(华为项目管理法-孙科炎读书摘要)
  3. “辣条一哥”卫龙冲击港股IPO,我又吃出一家上市公司
  4. STM32F4深入学习【RCC】
  5. 服务器响应551,为什么输出fi上的ftp响应551错误
  6. 笔记:centos7 换内核安装锐速(该方法不好用,不建议)
  7. 12.嵌入式控制器EC实战 SMBus概述
  8. 手板(prototype)
  9. matlab牛顿法解非线性方程组,matlab实现牛顿迭代法求解非线性方程组.pdf
  10. C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享