某日,同事 J 说发现一个奇怪的现象:一个列表页,在 iPhone7 竖屏上字体大小正常,横屏的时候有些字体就变的特别大。本文便是笔者对这一 “bug” 的分析过程。
某日,同事 J 说发现一个奇怪的现象:一个列表页,在 iPhone7 竖屏上字体大小正常,横屏的时候有些字体就变的特别大。本文便是笔者对这一 “bug” 的分析过程。
盒子模型
CSS 中的每个元素都被表示为一个矩形的盒子,每个盒子有四个边:content edge, padding edge, border edge, and margin edge。
box-sizing: content-box(默认),border-box ,padding-box(deprecated)。
content-box 下盒子实际宽度不等于 width,不包括 padding 和 border 部分,布局计算不方便。border-box 下盒子实际宽度与 width 相等。
外边距合并(Margin collapsing)
块级元素的上外边距和下外边距有时会合并(或折叠)为一个外边距,其大小取其中的最大者,这种行为称为外边距折叠(margin collapsing),有时也翻译为外边距合并。
浮动元素和绝对定位元素的外边距不会折叠。
上外边距和下外边距在没有 content、padding、border 间隔的情况下相遇,就会发生外边距合并,为其中一个元素添加 content、padding、border 使得上下外边距分离,即可取消叠加。
可能发生外边距合并的三种基本情况:
相邻元素之间、父元素与其第一个或最后一个子元素之间、空的块级元素。
注意:
浮动 float
将一个元素放置在 container 的左侧或右侧,允许 text 和 inline 元素环绕它。float
使用块布局,在某些情况下会修改 display
的计算值,inline -> block, inline-block -> block, inline-table -> table, table-cell -> block。对 flex/inline-flex 无效。举个 🌰 float
清除浮动
清除浮动是为了清除使用浮动元素产生的影响。浮动的元素,高度会塌陷,而高度的塌陷使我们页面后面的布局不能正常显示。
clear
举个 🌰 clearfix、multi-float-clearfix
1 | .container { |
1 | <div class="container container1"> |
块格式化上下文(Block Formatting Context,BFC)
浮动元素和绝对定位元素,非块级盒子的块级容器(例如,inline-block、table-cells 和 table-captions),以及 overflow 值不为 visiable 的块级盒子,都会为他们的内容创建新的 BFC(块级格式上下文)。
在 BFC 中,盒子从顶端开始垂直地一个接一个地排列,两个盒子之间的垂直的间隙是由他们的 margin 值所决定的。在一个 BFC 中,两个相邻的块级盒子的垂直外边距会产生折叠。
在 BFC 中,每一个盒子的左外边缘(margin-left)会触碰到容器的左边缘(border-left)。对于从右到左的格式来说,则触碰到右边缘。
BFC 中的元素的布局是不受外界的影响(我们往往利用这个特性来消除浮动元素对其非浮动的兄弟元素和其子元素带来的影响。)并且在一个 BFC 中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。
动画实现
css 实现动画与 js 不同,css 是定义关键帧,js 则是定义渲染页面与运行时间差的关系。
选择器
选择器的特殊性分成 4 个权重等级:
居中
1 | // flex 算是最优解,指哪打哪,特别方便 |
1 | // block 元素 margin |
1 | // inline 元素 text-align |
1 | // 知道宽高的情况下 |
1 | // 不知道宽高的情况下 |
css 单位
响应式布局
基于媒体查询和 rem 的响应式布局实践
meta
浏览器引擎前缀
页面导入样式时,使用 <link>
和 @import
有什么区别?@import
是 CSS 加载样式的方式, <link>
是 HTML 加载样式的方式。页面被加载的时,<link>
会同时被加载,而 @import
引用的 CSS 会等到页面被加载完再加载。
tips 碰撞检测
圣杯布局
float 实现真是被 Flex 爆的体无完肤,flex 实现 css 语义清晰,float 满满的黑科技糅杂在一起。
MouseEvent offsetX/Y, pageX/Y, clientX/Y, screenX/Y
display
position