上周写了一个文章不会CSS布局可能是“物理”不好,并在我们团队里做了一个分享。大家普遍反应的问题是,抛出的概念太多有点不好理解。这边重新整理思路和精简概念,再战一次。

当下已经有很多工具或者是软件,在努力实现从设计稿到原型稿的转换。但是还没有哪一家可以挺起胸膛说,我们可以 100% 的实现这个需求。

是什么阻止了这两个视觉上几乎一样的稿子之间的转换呢?

在我看来,是因为它们之间的物理逻辑不一样。

简单的说,要实现从设计稿到原型稿到转换,其实是要达到突破二者之间物理次元的高度。

原型稿设计稿的区别

首先因为我们都太习惯依赖自己都眼睛,导致我们很容易只从一个角度看待问题,忽略了其它的侧面,误以为这两个是一模一样的东西。

然而如果我们换一个视角,结合现实生活中的物理规律,或许能看出一些它们的差别。这边我们转到两个稿子的侧面。

我把设计的过程理解为是在地板上作画的过程,元素之间只有覆盖关系。也正因为如此,所以我们可以在任意位置起笔,而不用担心影响这会影响到其它元素的布局。

而在我们的 web 环境中,程序员更像是在一块垂直地板的墙面上写代码。这个物理逻辑就变得复杂得多。

首先因为是在墙上操作,所有的元素都会受到地球的引力掉到地板上(当然如果下面的元素如果够大,是可以叠放的)。可是在实际的网页中,我们习惯的是从上往下看的,那这个怎么办呢?

我们可以在整个房间里面放满水(虚线代表透明玻璃板),利用浮力让元素往上浮。但是可以看到我们的元素在水的作用下不受控制,顺序都乱了。怎么才能让它们待在我们想让它们存在的位置呢?

很简单,我们用盒子把这些文字都装起来。并在盒子之间添加一个透明的玻璃板(图中蓝色虚线部分)进行分离,让元素按照既定的规则摆放在合适的位置。

而这一切和仓库的货物陈列是几乎是一模一样的。唯一的区别只是这个仓库是在一个充满水的环境中。

我们近似的可以把透明玻璃板,理解为仓库中的架子,然后容器就是我们仓库中的盒子。如果想让某一个货架的背景带颜色,只需要添加一块带颜色的背板即可。

盒状模型

这里的盒子和我们网页的盒状模型有什么关系呢?在我看来他们就是一个路数的东西。

对于盒子内外的间隙,这边我们可以理解为快递盒子内部或者之间添加的防撞泡沫margin,和paading值对应着这些泡沫的厚度。

这边插入一个box-sizing的小知识点。很多同学比较搞不清楚,为啥有的浏览器的宽度是带边框和 padding ,有的浏览器的宽度计算又不带边框和 padding 。这个逻辑就有点像你去商店里面买核桃,有的店带壳的有的店不带壳一样。你不能说这其中任何一家的核桃有问题。只是他们的计算方式不一样。浏览器对于宽度的理解也是一样,我们要搞清楚的就是,这个浏览器是怎样的一种方式,或者你直接利用box-sizing告诉浏览器我要那种计算方式。

定位

按照以上逻辑,如果想要实现上面这样的层叠效果这么办呢?

这边我们只需要在我们的盒子上套一个3D的网,因为我们的视角是在右侧的,所以就在我们的眼睛里实现了这个层叠效果。

对于fixed可以理解为,我们额外添加了两面都是透明的网状置物架,fixed就是把元素放到这张网里。

很多小伙伴老是不能理解relative,absolute,fixed的关系。虽然他们都是通过position去声明,但是relative更像是创建一个结构,而absolute,fixed是把元素放到这个结构中。

  • relative 创建一个3D网状结构;
  • abosolute 把元素放到网里;
  • top 元素在网中x轴位置;
  • left 元素在网中y轴位置;
  • z-index 元素在网中z轴位置;
  • fixed 把元素放到全局的网里;

还有我们这个网在z轴上好像是无限多级的,就像我们仓库里的置物架可以无线堆叠一样。

浮动布局

下面我们把视角从侧面切回我们的正面。给大家一个更真实的列子来看看,网页中布局的物理逻辑

假设这是一个我们实际的浏览器界面,我们把下面的我爱你三个字放到我们的浏览器中。因为文字受到我们之前说的浮力,所以会往上浮动。

在真实的网络环境中,我们的文字会自动往左对齐。这好比我们把物品放到置物架上的时候,习惯了从左往右开始摆放。因为我们习惯从左往右看一样。

这个逻辑对应的就是我们浏览器的text-align这个属性,默认阅读方式是left的,当然你也可以设定为centerright 等的阅读方式。

为了防止防撞泡沫炸出来,也为了添加防撞泡沫方便。我们通常会把想要放到置物架上的东西都放到盒子里面再放上去。

在浏览器这个仓库中我们多放几个盒子和文字,可以看到这样的效果(虚线代表透明玻璃板)。block元素自带置物隔板,所以我们下面的元素即使受到浮力的影响也不会往上跑。可是当我们就是要实现文字环绕的效果怎么办呢?

很简单我们只需要把图中红色的板子去掉就好了。

这边我们把 200px 下面的板子也去掉,可以看到这样的效果。float在这里近似的可以看作是拆掉下面的板子,并且为了防止盒子随意飘动,我们还把这个盒子基于方向绑在了置物架上。

如果我们不想要这个环绕的效果,就是要一个左右布局怎么办呢?很简单,我们把之前拆掉的板子加回来。

这里给大家提供了两种不同的加板子的方式。

  • 第一种可以少一个盒子,但是能灵活性会差一点。
  • 第二种多加了一个盒子,但是可拓展性更好(也更推荐这个方式)。

当然我们网页中除了带隔板的block元素。也有不带隔板的inline-block元素和inline等其它元素(具体可以参考display的属性值列表)。因为它们不带隔板,所以通常我们会把这些元素放到带隔板的 block元素里再放到置物架上。

这边看到的是 Webnovel 的详情页顶部的地貌样式。大家可以去网上下载 webdeveloper 这个插件(chrome 和 firefox 都有)。选中其中的 infomation => display Topographic Information 可以查看任何一个网页的盒状结构。这个工具能帮助设计师,快速的进行布局方向上的视觉走查。

对于像tableflexgrid布局,原理是相通的。简单的说,是它们拥有比浮动更稳定和灵活的3D网状支架。

总结

如果你的网页中所有的元素都是通过定位布局的话,那么这个网页的物理规律,就几乎和我们设计工具中的布局方式一样了。而这是也是为啥 sketch 中 measure 插件能够导出一份和设计稿一摸一样的网页原型稿。可是我们大多数的网页更倾向于文档流的模式,所以我们又得靠程序员去再实现一份流的版本。

设计工具中虽然有打组这个功能,但是却没有我们网页中盒子力的关系。但是在我们前端程序员眼中,又恰恰是万物都是盒子。用一个连盒子概念都没有的工具,去设计一个全是盒子的世界,可想而知这个难度。

当然现在也有很多设计工具引入了盒子这个概念。但是你给绣房姑娘一把杀猪刀,这也不是那么容易掌握的概念。但我相信人工 AI 的介入,能够打破这个次元,设计稿直接就是原型稿的时刻终会到来,那也正是我们切图仔的下岗之时。

注意: 文中的概念只是为了方便大家理解 CSS 布局的一种引喻手法,并不代表网页中实际的逻辑。

BTW 我们招人"偏体验前端",要求点这里。

转载于:https://juejin.im/post/5cb1d56af265da03ba0e1ceb

CSS 布局与“仓库管理”的关系相关推荐

  1. div+css布局与seo的关系

    标准的DIV CSS布局对SEO的影响 SEO是指搜索引擎优化,主要就是通过对网站的结构.标签.排版等各方面的优化,使搜索引擎更容易抓取网站的内容,并且让网站的各个网页在等搜索引擎中获得较高的评分,从 ...

  2. 不会CSS布局可能是“物理”不好

    写完这篇文章,并在我们团队里做了一个分享.大家普遍反应的问题是,抛出的概念太多有点不好理解.这边重新整理思路和精简概念,再战一次.所以请转移到修订版CSS 布局与"仓库管理"的关系 ...

  3. 通过构建城市来解释HTML,CSS和JavaScript之间的关系

    by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 通过构建城市来解释HTML,CSS和JavaScript之间的关系 (The relationship betw ...

  4. 前端笔记(6)css布局机制,浮动,清除浮动,图片格式,ps切片工具及插件

    css样式表/层叠样式表(4) css布局的三种机制 浮动 浮动(float)的扩展 清除浮动 额外标签法(隔墙法) 父级添加overflow属性方法 使用after伪元素清除浮动 使用双伪元素清除浮 ...

  5. 3.实战HTML+CSS布局(实例入门篇)

    转自:https://www.cnblogs.com/hmyprograming/archive/2012/03/23/2414373.html 学习这篇入门教程我们假定你已经具有了一定的HTML基础 ...

  6. css Table布局:基于display:table的CSS布局

    两种类型的表格布局 你有两种方式使用表格布局 -HTML Table(<table>标签)和CSS Table(display:table 等相关属性). HTML Table是指使用原生 ...

  7. css布局详解(一)——盒模型

    一.网页布局的几种情况 今天让我们总结一下在css布局的各种情况做一个总结,为我们以后布局网页时做一个参考. 先看一张图,这是去年cssConf大会时阿里的 @寒冬winter 老师放出来的: 如图所 ...

  8. css布局方式_手把手教你CSS Flex布局「真香」

    作者:EcbJS 转发链接:https://blog.csdn.net/EcbJS/article/details/106466757 前言   之前做项目,关于布局方面没怎么深入研究过,好多页面都是 ...

  9. 根本不存在 DIV + CSS 布局这回事

    实际上div不是用来布局的,div只是用来表示一个其它元素都无法准确表达语意的一个块区,只有CSS是用于布局的,所以根本就不存在div+CSS布局这回事.反过来,table布局的时候经常依赖于CSS定 ...

最新文章

  1. 使用相对路径时,./、../、../../,代表的什么?
  2. UA MATH564 概率论VI 数理统计基础3 卡方分布中
  3. 大白话系列之C#委托与事件讲解大结局
  4. 蓝桥杯 - 连号区间数(暴力)
  5. MVC中使用ajax传递json数组
  6. HSQL转换成MapReduce过程
  7. bzoj 5120: [2017国家集训队测试]无限之环【最小费用最大流】
  8. POJ 1696 Space Ant(点积的应用)
  9. Axure图片不显示
  10. Java前后端分离处理跨域请求与Nginx跨域配置
  11. 性能测试工具------并发模式
  12. mtk android内核代码,mtk log系统详解
  13. 入行这么久? 真正理解了缓存吗
  14. 无法唤起订阅消息弹窗 requestSubscribeMessage:fail can only be invoked by user TAP gesture
  15. mac上面的文件分割与合并
  16. python实现局域网攻击_mac泛洪攻击arp欺骗(python脚本)
  17. 【数值仿真】基于有限差分法的三维热传导matlab数值仿真(附代码)
  18. root android oppo,OPPO R9S怎么ROOT oppor9s获取root权限的两种方法
  19. c++读取obj文件的数据 其中f中只取面片定点数据
  20. 数据驱动创新——汽车大数据生态大会在重庆召开

热门文章

  1. Jetpack WorkManager的使用-完全解析
  2. Pytorch骨干网络性能测试
  3. TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和 tf.data.Dataset机制
  4. 下载android4.4.2源代码全过程(附已下载的源代码)
  5. 解决Android SDK更新慢
  6. :before 和 :after
  7. Windows 2012 下Redmine安装和环境搭建
  8. C# NHtmlFilter 帮你过滤Html危险脚本 防止XSS攻击
  9. SQL Server时间粒度系列----第6节基于当前日的小时数和分钟数与mysql unix_timestamp和from_unixtime的mssql实现...
  10. 笔谈OpenGL ES(一)