2022-01-20——昏昏欲睡的一天(盒子模型)

21点,大致完成了作业,在回去之前赶快记录一下今天的知识点。

说实话,我这个人真的好高骛远,但没办法,我真的不喜欢听概念。。。

话不多说了,首先今天总重要的知识点,div盒子。盒子模型分为两种,标准盒子模型和IE盒子模型(这里吐槽一下,这个IE和那个让人神烦的IE并不是同一个东西,今天上课的时候我还在讲之前跟同桌说来着,丢人了。。)

标准盒子模型:



由于其中讲清楚实在要费太多时间,所以直接上图,总之就是标准盒子模型中,直接设置的width和height值,为模型中的content的长宽,在此基础上,增加border和padding的值会撑大盒子模型的总大小

元素最终宽度 =  content宽度值(width属性的值) + padding-left值 + padding-right值 + border-left-width值+border-right-width值

元素最终高度 =  content高度值(height属性的值) + padding-top值 + padding-bottom值 + border-top-width值+border-bottom-width值


IE盒子模型



由图可知,该模型中设置width和height,这两个值会直接规定盒子的总体大小,如果更改padding和border,则会相应的缩小content的长宽

给元素设置的width属性和height属性,就是该元素的最终宽度和最终高度 【padding值或者border值越大,则里面content区域的大小就越小 => 此消彼长】表示IE盒子模型的样式为: box-sizing: border-box;

    元素真实宽度(就是设置的width属性值) =  content宽度值 + padding-left值 + padding-right值 + border-left-width值+border-right-width值

    元素真实高度(就是设置的height属性值) =  content高度值 + padding-top值 + padding-bottom值 + border-top-width值+border-bottom-width值

以上就是两种盒子模型,还是比较简单的,然后就是关于margin的两个问题:塌陷和合并

先解释一下塌陷,以防我日后忘掉了(说实话这个问题平时真的没有注意太多,但出现的真的很频繁)

塌陷:两个嵌套关系的(父子关系)块级元素,当父元素有上外边距或者没有上外边距(margin-top),子元素也有上外边距(margin-top)的时候。两个上外边距会合成一个上外边距,以值相对较大的上外边距值为准。【上外边距值是看谁的值大,就以谁为准】

 外边距塌陷, margin-top属性的3种取值情况:

1、若两个上外边距值都是正数时: 最终的margin-top值以较大值为准 (120px 和 250px 则以250px为准)

2、若两个值上外边距值都是负数时: 最终的margin-top值以绝对值是较大值为准 (-120px 和 -50px 则以-120px为准)

3、若两个上外边距值是一正一负数时: 最终的margin-top值是两个数值之和 (120px 和 -70px 则以50px为准)

解决办法

解决办法1:     给父元素设置上边框

(border-top: 1px solid transparent;)  

   border-top: 1px solid transparent;

解决办法2: 设置padding-top 

      padding-top: 1px;

合并: 这种现象发生在两个并列的块级元素之间。给第一个元素设置下外边距(margin-bottom),并同时给第二个元素设置上外边距(margin-top)。两个元素之间的距离不等于这两个外边距之和,而是等于两者之间的较大值。 【 比如: 100px 和  50px  间距就等于100px 而不是150px 】

外边距合并,两个元素之间的间距的3种取值情况:

1、若两个外边距值都是正数时: 最终的外边距值以较大值为准 (120px 和 250px 则以250px为准)

2、若两个值外边距值都是负数时: 最终的外边距值以绝对值是较大值为准 (-120px 和 -50px 则以-120px为准)

3、若两个外边距值是一正一负数时: 最终的外边距值是两个数值之和 (120px 和 -50px 则以70px为准)

解决办法:

外边距合并的解决办法:

只设置其中一个块级元素的margin值即可(推荐)

给每一个元素添加父元素,然后触发BFC规则(不推荐,而且我不会。。)



然受是元素类型,这里理解很简单,正儿八经使用的时候,总是莫名其妙就bug了,难顶呀。

元素的类型

        1、块级元素    [  display: block; ]

           a、自己独占一行

           b、可以设置宽度,高度,内外边距等属性

           c、不设置宽度,则宽度默认为100%

           d、不设置高度,则高度由元素的内容决定,若元素没有内容,则高度为0

        2、行内元素

           a、不独占一行【默认从左到右排列,直到放不下才会另起一行放置】

           b、不可以设置宽度,高度属性,但是可以设置水平和垂直方向的内边距,和水平方向的外边距

           c、行内元素的宽度和高度由内容决定

        3、行内块级元素

           a、不独占一行【默认从左到右排列,直到放不下才会另起一行放置】

           b、可以设置宽度,高度,内外边距等属性

           c、不设置宽度和高度,则由元素本身决定

然后还讲了元素的转换和隐藏显示,这里其实就是用了display,这东西是真的好用,配合我之前使用的fliter和opacity,能够实现很多悬停的显示功能(比如网易云的头部特效,可惜的是老师说剩下的需要js才能实现)

p.s.火狐记录了三个字体图标网站

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容