《css世界》读书笔记 #100
zhangyu1818
announced in
zh-cn
《css世界》读书笔记
#100
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
块级元素、内联元素
display:block
,其实是外盒子block
,内盒子也是block
,但是如display:inline-block
,之所以表现为行内但是可以设置宽高的原因是外盒子为inline
,内盒子为block
,外盒子只是用来控制元素的表现形式,是块级还是内联,而内盒子才是控制元素属性,如widht/height
。除此之外,还有标记盒子,如display:list-item
前面的小点display:block
或者是绝对定位且同时有left
和right
的元素,他们的尺寸会默认撑满外部容器,内部尺寸即是由内部的元素决定,而非外部的容器,如元素内没有内容时,宽度为为 0。内部尺寸的首选最小宽度,即是外部容器宽为 0 时,元素的宽度,中文默认为每个汉字的宽度,英语是特定的连续子母组成的单词,如果想让英语也想汉字一样以每个子母为宽度需要设置
word-break:break-all
<input type="button"/>
和<button/>
的一个区别就是input
中默认是white-space:pre
,不会换行<img>
关于 height:100%
height:100%
的声明,如果父级的高度是auto
,这时候100%
是没有作用的,比如像结构如<body><div></div></body>
,想给里层的div
声明height:100%
,就得给body
也声明,body
声明也不行,必须给html
也声明上,这width:100%
就十分不同,因为width
的百分比是一定会生效的。这个在规范中给出了答案而宽度的解释却是
实际按照包含块真实的计算值作为百分比计算的基数
那么如何让元素支持 height:100%
height:100%
的计算是依照祖先元素的padding-box
,而平时是content-box
,见flex
并且flex-direction:column
,子元素flex:1
(使用弹性盒模型实现height:100%
的效果)关于 padding
padding
的计算默认是会增加元素尺寸的box-sizing:border-box
解决,不过某种情况下,如widht:80px;padding:0 60px
,这时padding
足够大,width
会失效,最终宽度为120px
box-sizing
,但是我认为这种方式的简易性和带来的副作用来看,是比宽度分离准则实现跟容易一点的,比如ant-design
就是全局重置包括before
和after
padding
只影响水平方向不影响垂直方向,但是这种认识是不准确的,实际上内联元素的padding
也会影响垂直方向的布局,见,只是因为内联元素垂直方向的行为完全受line-height
和vertical-align
的影响,所以感觉垂直方向没起作用,如果将父级高度设置为小于内联元素的高度并设置overflow:scroll
,可以看到父级元素是出现了滚动条的!padding
来增加点击判断的范围padding
不支持负值,但是支持百分比,这个的妙用就是把页面的 banner 图设置为宽高等比自适应,见关于 margin
margin
值可以为负,并且能够改变元素空间尺寸,如父级为width:300px
,子元素为margin:0 -20px
,这时候子元素宽度为 340,此处的妙用,如<ul><li>
里,每个<li>
都float:left
并且有margin-right:20px
,这样最后一个<li>
也有margin-right
,用这个特性可以解决这个问题,就是给<ul>
设置margin-right:-20px
padding
不同的是内联元素的垂直方向的margin
不管是内部尺寸还是外部尺寸都是没有影响的margin
合并,关于父子级的合并,见,解决这个问题的方法举例两种overflow:hidden
border
margin
的合并规则margin
的合并在博客或者是公众号文章中是一个有意义的特性margin:auto
的填充规则auto
则auto
为剩余空间大小auto
,则平分剩余空间left:0;right:0;top:0;bottom:0
,这时候子元素再设置width;height
,可以让子元素水平垂直居中,见内联元素
基线
baseline
,是英文字母x
的下边缘线,x-height
表示子母x
的高度,vertical-align:middle
并不是绝对的垂直居中对其,在css
中middle
值的是基线往上1/2 x-height
高度,字体不同,同样会影响位置line-height
line-height
决定line-height:1
可以让元素和字体大小高度相同。行距=line-height - font-size
,依据此公式,能计算出半行距的高度,如line-height:1.5;font-size:14px
,半行距大小就是(14px * 1.5 - 14px) / 2 = 3.5px
,由于border
和line-height
等传统 css 属性并没有小数像素的概念,因此需要取整,如果是文字上边距,则向下取整,如果是文字下边距,则向上取整line-height
为 2 时,半行距是一半文字的大小,两行文字之间的间隙差不多一个文字尺寸大小,如果line-height
为 1,则半行距是 0,也就是两行文字会紧紧贴在一起,如果line-height
为 0.5,则此时的行距为负值,两行文字会重叠在一起,见<img>
下面有空隙,原因不是因为line-height
影响了替换元素,替换元素不会被line-height
影响,这里作祟的是幽灵空白节点
line-height
等于height
”,其实是有严重误导性的,实际只需要设置line-height
,并且这里也只是近似垂直居中,如微软雅黑字体,就有大约 1 像素的下沉line-height
重置是势在必行的line-height
值支持数值,长度,百分比,如1.5
、1em
、150%
,其中百分比的计算是基于font-size
计算的,最好使用数值,因为数值会继承,而其他只会继承父级计算后的结果vertical-align
vertical-align
属性值大致分为以下 4 类baseline
(默认)、top
、middle
、bottom
text-top
、text-bottom
sub
,super
20px
、2em
、20%
等vertical-align
数值属性表现,见,vertical-align
的数值大小全部是基于基线位置计算的,所以vertical-align:0
等于vertical-align:baseline
vertical-align
的百分比计算值是相对于line-height
计算值计算的,在实际网页开发中,百分比值不怎么实用vertical-align
属性生效的前提条件是:只能引用于内联元素以及display
值为table-cell
的元素,父元素必须设置line-height
,才能让子元素的vertical-align
属性生效,其中table-cell
比较特殊,属性值要设置在table-cell
元素上,子元素垂直对齐会有变化,见line-height
、vertical-align
、幽灵空白节点,解决的办法 - 见float
float
的特性display:block
)margin
合并float
本意是用于图文环绕的,高度塌陷也是标准BFC
<html>
根元素float
的值不为none
overflow
的值为auto
、scroll
、hidden
display
的值为table-cell
、table-caption
和inline-block
中的任意一个position
的值不为relative
和static
overflow
overflow:scroll
的元素,在chrome
下,会计算容器的padding-bottom
,而ie
和firefox
不会,所以最好不要给滚动元素设置padding-bottom
overflow:scroll
出现的滚动条会占用容器可以的宽度或高度,在windows 7
下ie7+
、chrome
、firefox
的滚动条宽度均为 17pxabsolute
absolute
元素实际上会在当前位置,而不是在浏览器左上方absolute
不一定需要父级有定位属性,基于margin
位移即可,见top
、right
、bottom
、left
,才会真正绝对定位,此时left:0;right:0
可以让元素有流体特性clip
为了更好的无障碍识别,一些网站如 logo 处,会写上网站的名称,用
text-indent
或font-size:0
隐藏,另一种方式就是clip
clip
生效的条件必须是absolute
或者fixed
,结合上面absolute
所讲,父级并不需要定位,所以直接position:absolute;clip:rect(0 0 0 0);
层叠
层叠准则
z-index
大的在上dom
流后面的会覆盖前面的font-size
font-size
关键字属性分以下两类larger
是<big>
元素默认的font-size
值smaller
是<small>
元素默认的font-size
值xx-large
<h1>
元素计算值一样x-large
<h2>
~~large
<h3>
元素计算值近似medium
<h4>
元素计算值一样,是浏览器font-size
的默认值small
<h5>
元素计算值近似x-small
<h6>
~~xx-small
无对应元素感想
购买以后才知道这本书内容不包括
css3
,读完后解决了我以前一直不是很明白的问题,如line-height
和vertical-align
,但是实际开发中,如果不考虑 ie 的兼容性,里面很多布局的技巧,直接用display:flex
一把梭就好了如果内容包含
css3
就更好了,希望能再读到张鑫旭大佬css3
的书吧笔记也记录的没啥营养含量……
Beta Was this translation helpful? Give feedback.
All reactions