盒模型应用

140 阅读4分钟

盒模型

改变宽高范围

默认情况下,width 和 height 设置的是内容盒的宽高。

页面重构师:将psd 文件(设计搞)制作为静态页面

衡量设计稿尺寸的时候,往往使用的是边框盒,但设置width 和height,则设置的是内容盒。

解决办法:

  1. 精确计算

自己先量出来设计图上的尺寸,然后减去 border 宽度,再减去padding,最后得到的尺寸就是要设置的width 值。

  1. CSS3 :box-sizing ,有两个取值,content-box, 这个也是默认值,这个默认取值就是代表你设置了内容盒的宽高,也就是说你再设置padding, 设置border 盒子是会变大的。

从边框开始往里面看,border,padding,width,这些都算是盒子的一部分,而margin代表的是盒子和盒子之间的间距。

如果你把box-sizing 设为另外一个值,即为 border-box.你这样一设置,就代表我上面的宽高是代表边框盒的宽高。

所以这里记住了,默认设置宽高就是设置的内容盒的宽高,如果设置box-sizing = border-box. 就代表设置的宽高是边框盒。

chrome 里面如果你用鼠标点击元素,出现的数字就代表边框盒的宽高。

改变背景覆盖范围

默认情况下,背景覆盖边框盒。和ios 一样的。但是CSS更灵活,可以通过设置background-clip 的值进行修改,当这个值为border-box (默认值),padding-box,content-box.

溢出处理

这个类似于iOS里面的maskToBounds,但是iOS里面只能设置超出显示还是不显示。

CSS 这里用的是overflow: , 这个overflow也是一个速写属性。

默认值是visible,可见的。 还可以设置为 hidden,就看不到。 还可以取值为scroll,表示生成滚动条。

overflow-y :scroll 还可以取值为 auto,表示如果宽度和长度够长的话,就不显示滚动条,如果不够长,就显示滚动条。

在chorme 调试里面看到styles ,调试属性,写完属性,看到 : 后面有一个指向右侧的箭头,就代表这是一个速写属性。

短词规则

word-break,会影响文字在什么位置被截断换行。

  1. 取值为normal:普通,CJK(中日韩)字符(按照文字位置进行阶段),非CJK字符(单词位置阶段)。

  2. 取值为 break-all 在所有位置都可以截断,这个对中文来说和normal一样,还是换行的时候以文字为单位进行截断,对英文单词来说就有差别了,这里他不再会以单词为单位截断了,而是以字母为单位截断,就会出现一个单词换行显示的问题。

  3. keep-all :保持所有。所有文字都在单词之间截断。 这里对于英文单词截断很好理解,那中文如何理解在单词之间阶段呢?中文对于浏览器来说出现空格,为一个单词,出现标点符号浏览器觉得是一个单词,所有对 cjk来说不出现标点符号都算一个单词,都不会换行。

image.png

image.png

空白处理

这里其实就是用css 实现一个类似于UIlabel设置了文字为一行显示的,展示不下的文字后面显示 ...

  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;

上面的思路是什么呢?

  1. 先设置不换行,前面短词规则讲的是怎么换行,而这里设置 white-space: nowrap; 是不换行的意思。
  2. 不换行就会溢出,我们再把溢出的文字通过overflow :hidden 隐藏掉。
  3. text-overflow: ellipsis; 设置文字超出显示为圆点。 经过上面几步就实现了文字单行显示,超出的部分显示 ...

注意这里的方法只适用于单行文本,多行文本需要用JS ,比方说两行,两行后面显示不下的显示... 就要用JS来处理。

空白折叠

white-space :normal 默认情况下会进行空白折叠。

pre :这个取值就不会进行空白折叠。

nowrap:空白折叠仍然会发生,但是不会换行。