盒子模型及其布局

131 阅读7分钟

1,什么是盒子模型?

    一个标签就是一个盒子,可以通过6大属性来设置这个盒子。
    有margin,border,padding,widht,height,backgroum。

2,标签的分类,各自的特点?

    块级标签: div h1 p li form table  --->  6大属性都起作用
    行内标签: a span em storng -->width和height不起作用margin和padding在垂直方向上不起作用
    行内块: img input -->  除了并排显示,其它和块级标签的一样

3,如何计算盒子模型在网页上占据的大小? 这种盒子模型有什么不好的地方?

    在网页上占据的宽度:左右的margin+左右的border+左右的padding+width
    在网页上占据的高度:上下的margin+上下的border+上下的padding+height
    如果一个div没有设置widht,它占父元素的100%。假如我的父元素是960px。div也占960px。div的这个960是指div的内容宽度还是指它在页面上占据的空间?
    960px = 左右的margin+左右的border+左右的padding+width
    这里面的div占960是指div所占用的空间。那如果我把这个div又加了一个10px的边框。
    那么这个div的内容宽度width = 960-20px = 940px 
        如果一个块级盒子没有设置宽度,它的宽度是父元素的100%,这里的100%是指这个盒子所占页面宽度。
    如果又增加了这个盒子的margin,padding,border,那么这个盒子的内容宽度一定会减小,如果margin,padding,border
    不断地增加,盒子的内容宽度不断地被压缩,如果压缩到了极限,浏览器会强迫你元素的宽度增加。
    所以默认情况下的盒子模型也有不足之处。

4,知道什么是margin的重叠吗? 说一下

    重叠前提:块级   垂直 
    兄弟元素之间的重叠:
        上盒子的margin-bootom和下盒子的margin-top 会重叠  ---> 取大优先 
        解决: 块级-->非块级   浮动   设置一方盒子margin,不要两个都设置
    父子(第1个子或最后1个子)元素之间的重叠: 
        父的margin-top 和 子的margin-top   ---> 取大优先  
        父的margin-bottom 和 子的margin-bottom    ---> 取大优先 
        解决: 块级-->非块级  border  padding

5,如何实现一个小三角?

    border:5px solid tranparent;
    border-top:5px solid red;

6,常见的布局方案有哪些?

    流动布局:遵循标准文档流(国家)
        块级  行内
    浮动布局:出国  如果一个元素浮动了,那么这个元素内部还是遵循标准文档流(国家)
        float:left/right 
    层布局(定位):
    flex布局:

浮动:

默认的流式布局有不足。 浮动的目的就是为了让男标签可以并排显示。

格式:

float: left / right / none none默认的不浮动

特点:

0,浮动初衷是为了实现字围(如新闻),后面才发现,浮动可以让多个块级标签并排显示。
1,在一个父元素内部,如果一个元素浮动了,那么它就脱离了标准文档流,后面的元素就让向上排
2,浮动并没有完全地脱离了标准文档流,如果后面的元素内部有文字,这些文字会环绕在浮动元素的周伟,产生字围。
3,如果多个元素浮动了,那么这们就会并排显示,如果都是同一个方向的浮动,它们会紧紧地贴在一起。
4,如果一个元素浮动了,先向上移动,直到贴靠到父元素的边界,接着,如果是左浮动,就向左移动,直到移动到父元素的左边界,如果是向右浮动,就向右移动,直接移动到父元素的右边界。
5,如果一个元素没有设置高度,它的高度是靠里面的内容撑起来的。如果父元素内部元素都浮动了,那么会造成父元素的高度塌陷。
6,如果元素浮动了,那么它会造成影响:造成父元素高度塌陷。解决:显示加高度(加高法) 小偏方(overflow:hidden)
7,如果元素浮动了,它也会造成对后面的兄弟元素影响。解决:clear:both/left/right
8,应用:实现左右布局 小导航 多个规则盒子水平排列(行内块)
9,当一个浮动起来的男盒子,没有设置width,那么这个盒子的宽高会尽可能小,小到包裹住它里面的内容,这叫包裹性,
10,如果一个元素浮动了,它会悄悄地做一个变性手术。如果一个行内盒子浮动了,那么就可以设置宽高了,相当于把它变成块级标签。
11,如果父元素也浮动了,那么就不会出现高度塌陷了。
12,如果有左浮动,又有右浮动,那么你需要把右浮动的元素写在左左浮动的前面
13,写三个盒子,利用27种情况去讨论最后的显示。
14,浮动元素会从标准文档流中半脱离出来。证明:字围
15,一个元素浮动了,那么它也是受父元素的控制。当父元素宽度变小时,装不下所有的子元素时,后面的子元素有贴靠性。当父元素小到极限时,里面的浮动的子元素宽度是不会改变的。

元素浮动会造成影响(清除浮动):

1,对父元素造成的影响
    父元素高度塌陷
        解决:显示加高度(加高法)  小偏方(overflow:hidden)  clear:both 
            加高法:简单   基本不用   大部分情况情况下,父元素的高度是需要子元素撑起来
            overflow:hidden : 简单  使用了overflow:hidden 父元素的高度会随着子元素的高度变化而变化    overflow:hidden本职工作是用来处理溢出  在使用过程中,需要注意子元素如果想要超出父元素高度,此时overflow:hidden就不适合了。
            clear:both 在所有子元素后面加一个空的div 在这个div上面加clear:both  ---> 内qiang法
                优点:clear:both专业清除浮动的  缺点:多写一个代码
2,对后面兄弟元素造成的影响
    兄弟元素会向上移动
        解决:在受影响的元素上面的加 clear:both,
3,项目中最常用清除浮动的方法: 利用伪元素   after 
    说白了,就是写一个清除浮动的类,如下:
    .clear:after{content=""; display:block; clear:both; height:0; overflow:hidden;}

flex ----> 干掉了float

四大概念:
    容器,项目,主轴,交叉轴 

容器:如果在一个盒子上面,设置display:flex,那么这个盒子就是一个容器

项目:容器的直接子元素,叫项目

主轴:在容器中,项目默认是按主轴方向排列,默认是从左向右排列

交叉轴:与主轴垂直的那个轴

容器相关的属性:

flex-direction:改变主轴方向  row   column  row-reverse  column-reverse 
flex-wrap:项目足够多的时候,是否换行  wrap  nowrap
* flex-flow:flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap
justify-content:处理富余空间  flex-start  flex-end   center   space-between  space-around
align-items: 定义项目在交叉轴上如何对齐  flex-start  flex-end   center
align-content : 当有多根主轴时,多根主轴的对齐方式。相当于处理垂直方向上的富余空间。

项目相关的属性:

order:是用来改变项目的顺序的
flex-grow:让某个项目生长
flex-shrink:让某个项目压缩
flex-basis:项目在主轴上占据的大小
flex:上面几个属性的简写方式
align-self:单独设置某个项目的对齐方式,单独一个项目在交叉轴的对齐方式