flexbox不能做的一件事

看起来flexbox能解决任何问题。垂直居中。告别浮动。列布局变得异常简单!可作者发现了flexbox的阿喀琉斯之踵——row spans.

flexbox——这个神奇的样式正在解放我们,让工作更加轻松。想象一下:没有浮动,没有设置margin为负值以使得一些基础样式正常工作的怪异CSS代码。你在过去十年间学到的所有技巧此刻可以完全抛弃,因为你不需要它们。

想实现在一个高度未知的容器里垂直居中的效果?flexbox只用了一行代码就能实现!

代码如下:

.container{
    display: flex;
}
.centered{
    flex: 1;
}

HTML代码如下:

<div class="container">
<div class="centered">
This is centered
</div>
</div>

很明显比几年前的CSS实现垂直居中的方法简单的多:这些方法包括设置负margin值和利用tabel-cell实现垂直居中。而且,对CSS而言比垂直居中更难实现的是三列等高布局。目前没有一种优秀的方法可以实现它,直到flexbox出现。

想实现三列等高且宽度占容器比例相同的布局?HTML代码如下:

<div class="container">
  <div class="column" style="background: red">
    Column 1
  </div>

  <div class="column" style="background: green">
    Column 2
  </div>

  <div class="column" style="background: blue">
    Column 3
  </div>
</div>

CSS代码如下:

.container {
  display: flex;
  width: 100%;
  height: 300px;
}

.column {
  flex: 1;
  color: white;
}

(代码链接:http://codepen.io/swizec/pen/vXONdj/

很简单对吧?将container的display属性设为flex,之后设置每个子div占据相同水平空间。在链接中你可以尝试改变窗口大小,效果不变。

Row Span in Flexbox

当设计师想到了这样的效果:

这是一个由大小相同的按钮组成的网格,可是你却为之挠头。

你知道按钮必须是可配置的,也就是说你的代码能随不同的配置改变。按钮的标签内容与颜色等均可改变。

这些按钮相当于数据。你得到一个标签名的数组,给这些标签赋予按钮的样式。最理想的是遍历它们,在HTML中创建一个按钮列表,用CSS实现布局。

flex-flow: row wrap很好用,它可实现元素的换行效果。HTML代码如下:

<div class="container">
    <div class="button" style="background: red;">
      Column 1
    </div>

    <div class="button" style="background: green">
      Column 2
    </div>

    <div class="button" style="background: blue">
      Column 3
    </div>

   <div class="button" style="background: blue">
      Column 4
    </div>

   <div class="button" style="background: red">
      Column 5
    </div>

    <div class="button" style="background: green">
      Column 6
    </div>

    <div class="button" style="background: green;">
      Column 7
    </div>

    <div class="button" style="background: blue">
      Column 8
    </div>   

    <div class="button" style="background: red">
      Column 9
    </div>
</div>

CSS代码如下:

.container {
  display: flex;
  width: 100%;
  height: 300px;
  flex-wrap: wrap;
}

.button {
  flex: 0 33.3%;
  color: white;
}

(代码链接:http://codepen.io/swizec/pen/XjbrLP/

效果如下:

实现这样的分行布局似乎一点也不难,可设计师想要第一个元素跨两行。

flexbox实现跨行效果......现在你彻底混乱了,如果你用的方法和我一样,那么得到的结果应该是这样:

你必须承认:flexbox的跨行效果不能这样实现。你应该忍耐这种需求,将内容放在列元素中。

代码如下:

<div class="container">
  <div class="column">
    <div class="button rowspan" style="background: red;">
      Column 1 - rowspan
    </div>

    <div class="button" style="background: green;">
      Column 7
    </div>
  </div>

  <div class="column">
    <div class="button" style="background: green">
      Column 2
    </div>

    <div class="button" style="background: red">
      Column 5
    </div>

    <div class="button" style="background: blue">
      Column 8
    </div>
  </div>

  <div class="column">
    <div class="button" style="background: blue">
      Column 3
    </div>

    <div class="button" style="background: green">
      Column 6
    </div>

    <div class="button" style="background: red">
      Column 9
    </div>
  </div>
</div>

CSS代码:

.container {
  display: flex;
  width: 100%;
  height: 300px;
  flex-wrap: wrap;
}

.column {
  flex: 1;
  display: flex;
  flex-direction: column;
}

.button {
  flex: 1;
  color: white;
}

.button.rowspan {
  flex: 2;
}

(代码链接:http://codepen.io/swizec/pen/NRqGLQ/

用flexbox列布局实现,即分为三列。设置第一列的第一个元素占列的2/3,第二个元素占1/3。设置其他列的元素均占列的1/3。这样就实现了第一个元素的跨行效果。如下:

看,flexbox的跨行效果还不算太难。

注:本文为译文。

原文链接:https://dzone.com/articles/the-one-thing-flexbox-cant-do

时间: 2024-10-31 05:14:00

flexbox不能做的一件事的相关文章

想提升工作效率,就別再做这七件事

试想一位小公司老板每日孜孜不倦地工作,为何不能从为数众多的竞争者脱颖而出? 一位创业家可以不眠不休一天工作24 小时,整整一周不休假. 然而,时间有限,且竞争者却永远可以投入更多钱与心力,让竞争更剧烈.那么,为什么某些小型新创公司可以完成许多大型企业无法完成的事情呢? ●Instagram──只有13 名员工却被Facebook 用几十亿买下的公司. ●Snapchat──只有30 名员工却拒绝科技巨人Facebook.Google 的并购交易. 它们的成功部分来自于幸运──其余则是因为效率 .

手机被偷前必做的两件事

很多"专家"都曾经发过<手机被偷后必做的N件事>这类教程,比如:致电运营商挂失手机号:致电银行冻结手机网银:手机解绑支付宝:微信冻结账号:修改微博.微信.QQ等密码:找手机运营商补手机卡:等等等等,实际上,这类教程所要求的事情都不是必要的,亡羊补牢不如未雨绸缪,真正要做到丢失后手机安全,只需要事前做两件事情:设置指纹密码和SIM卡密码.对于苹果用户来说,还需设置"查找我的iPhone"和iCloud两步验证. 以iPhone为例,一般都会设置"

赘总当你做错一件事的时候连呼吸都是错。

左庄自篆资专琢卓灼 当你做错一件事的时候连呼吸都是错. http://passport.baidu.com/?business&un=vip&un=%E6%96%B0%E9%BE%99%E7%BE%8E%E5%A5%B3%E5%93%AA%E5%A5%BD%E6%89%BE#0 http://passport.baidu.com/?business&un=vip&un=%E8%8D%A5%E7%BB%8F%E7%BE%8E%E5%A5%B3%E5%93%AA%E5%A5%B

当开发者产生一个伟大的想法之后应该做的10件事

当你正和家人享受一个悠闲的午后,一个不错的想法突然出现在你的脑海里.不管它是一个 App 还是服务,或是一个新的概念.只要你把这个想法付诸实践,它就可能会成为下一个 uber,甚至会改变世界. 那接下来你应该怎么做呢?这里有一个指南,会告诉你在决定把自己这个想法实现之后应该做的事情. 1. 起一个名字 在你决定开始之后,要做的第一件事就是为你的产品起一个名字,这个名字是有多重要大家心里都很清楚,如果你并不擅长起名字,你可以通过一些工具来扩展你的思路,如 visual thesaurus, Wer

新手学习SEO要做的七件事是什么?

学习SEO可能不那么先进的编程,学习SEO不可能掌握网页设计,学习SEO不需要学习SEO DIV + CSS;不是一个困难的任务,但是在学习过程中,如果你想掌握SEO,那么我们要做的几件事. 1.学习SEO需要持之以恒的精神.为什么 ?学习SEO要有持之以恒的精神?SEO是一个长期的工作,因为它是与搜索引擎这个工作密切相关,搜索引擎收录站点,将继续增加网站的权重,可以提高网站关键词的排名,这是一个不变的算法.所以即使我们有一个强大的SEO技巧,我们仍然需要更新网站内容,不断优化网站的布局,继续发

拿到美国Offer后要做的N件事

经历了选校的纠结,备考的紧张和苦苦等待Offer的无奈,成功拿到Offer后难 免欣喜若狂,但如果你以为拿到Offer就万事大吉了的话,那么你将未必能成功留学美国.拿到Offer后仍有许多你需要关注的事情,只有把这些收尾工作通通都搞定了,你的美国留学才能顺利开始. 一.检查offer类型 拿到美国大学offer后,首先应该好好的了解offer的类型.一般来说,毕业生并且语言达到学校专业要求的都是拿到 unconditional offer(无条件录取通知书),这个时候确认没有其他的附件条件即可;

读书笔记:父母离去前要做的55件事

读书笔记:父母离去前要做的55件事 <父母离去前要做的55件事>这本书早就读完了,把这些事记在OmniFocus中,寻找机会去完成一些适合完成的事情.有些事可能并不适合自己的父母,但父母的年纪毕竟大了,珍惜这段时间,不让自己在将来留下太多的遗憾. 给父母捶背 记录下父母对你的爱 整理那些儿时最珍爱的礼物 为父母做饭 教父母发短信.父母从没有用过手机,他们过生日时给买过一个音乐播放器,声音非常大,可以晨练时用,可惜选曲的操作相当复杂,还必须在规定的时间内操作完,2012年6月10日耐心地教爸爸使

安装Linux Mint 17后要做的20件事

安装Linux Mint 17后要做的20件事 Linux Mint 17 Qiana Cinnamon Linux Mint 17已经发布,定名为Qiana.Mint是Linux最佳发行版之一,它定位于桌面用户,关注可用性和简洁.它携带了风格迥异的桌面环境,如Mate以及Cinnamon,并基于不同的发行版,如Ubuntu或Debian. 在本文中,我们使用的是Linux Mint 17的cinnamon版本.要获取更多关于Cinnamon版本的信息(包括下载链接),可以访问 - http:/

安装 CentOS 7 后必做的七件事

原文 安装 CentOS 7 后必做的七件事 CentOS 是最多人用来运行服务器的 Linux 版本,最新版本是 CentOS 7.当你兴趣勃勃地在一台主机或 VPS 上安装 CentOS 7 后,首要的工作肯定是加强它的安全性,以下列出的七件事,是你进一步配置系统和安装其他软件前必须做的. 1. 更改 root 密码 若果你是自行安装 CentOS 7 的话,安装程序会让你自行设定 root 的密码.不过很多 VPS 服务商只会提供预先安装好的 CentOS 7 映像档,这种情况下他们会透过