css的页面布局

页面布局,一些块的布局,文字写在块的里面

元素的浮动

默认的div是一个块级元素,一个div就占据了一行,可恶的很!!!

.item{
  background: red
}
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>

看看效果,大家不要嫌弃麻烦,说这么简单的问题,也好意思截个图吗?不要小看这些,扎实的基础才能编程更快,少走弯路 

图片占据了一整行,因为这个块级元素,他的宽度继承父元素额(自己没有定义宽度的情况下),在这个场景下,这个父元素就是body元素,也就是浏览器的宽度

.item{
background: red;
width:200px;
}
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>


而且,即使你定义了宽度,又如何,这个盒子虽然有了宽度,但是他还是占据了整个宽度,旁边留白的宽度,照样不能使用,是不是很恶心!!!

在早期的网页布局当中,很常见那种文字环绕着图片的效果,这个该怎么实现呢?聪明的程序员想到了浮动的法子

.box {
  border: 2px solid red
}
<div class="box">
  <div class="item">
    <img src="images/input_password.png">
  </div>   <p>我是文字<p> </div>

效果这样子的 

文字跑去了图片的下一行,这怎么可以呢

.box {
  border: 2px solid red
}
.item{
  float: left;
}
<div class="box">
  <div class="item">
    <img src="images/input_password.png">
  </div>   <p>我是文字。。。。。<p> </div>

这个时候是不是可以实现环绕了,来说说为什么

.box {
  border: 2px solid red
}
.item{
  float: left;
}
<div class="box">
  <div class="item">
    <img src="images/input_password.png">
  </div>
</div>

我们把文字去掉之后发现,我晕死啊,这个父元素的宽度居然没有了,父元素宽度没了,但我再次写入p元素的时候,p元素就按照原来的规则排列

所以这就是浮动带来了问题,破坏了父元素的高度,父元素的高度崩塌了,浮动的元素跑了,其他的元素,在父元素剩下的空间里面,继续按照原来的规则显示着

浮动还有第二个性质-------包裹性

破坏性是指浮动对父元素的影响,这个包裹性是自己的变化

  .box {
        border: 2px solid red
    }
    .item{
        /*float: left;*/
        background: yellow
    }
    <div class="box">
        <div class="item">11111111</div>
    </div>

不出所料,这个class为item的元素,占据了整个父元素box的大小,父元素box又占据了body的大小

  .box {
        border: 2px solid red
    }
    .item{
        float: left;
        background: yellow
    }
    <div class="box">
        <div class="item">11111111</div>
    </div>

再来看看,出现了什么变化

可以看到,父元素box的高度已经塌陷了,本来父元素的高度,是由item撑开的,(我们没有给父元素设置高度),但是父元素高度没了,这说明,这个浮动的元素,已经不再是父容器box的子元素了,父子关系已经over了

在来看看这个item元素,自己的宽度也变了,包裹起来了,以前占了那么大的一块地儿,现在就是内容撑开的宽度(我们也没有给item元素设置宽度)

其实想一想,要是item不包裹起来,还是占据那么宽的地方,那还文字环绕个毛啊,自己把所有的位置都占据了,别人压根都挤不进来好么?

要是父容器不塌陷,那也别想文字环绕,这就好像韩剧《天国的阶梯》,后妈要搬进来,是不是做爸爸的先打开门欢迎,然后后妈想法子把继女赶走

浮动把父元素给搞的半死不活了,就出现了拯救父元素的方法--------清除浮动

这个清除浮动,不是说不设置浮动了,而是不要残害父容器了,不能坑爹!!这个会涉及到新的知识,先放一放,先来看看position属性

position

定位:元素的定位方式,一共有四种,static/absolute/relative/fixed 
static,就是position的默认值,相当于我们没有设置position一样,没啥好说的 
absolute:绝对定位,相对于某一个元素绝对的定位,查找他的父容器,找到第一个拥有position属性为absolute/relative/fixed的元素,相对这个元素定位

relative:相对定位,可能会成为某个绝对定位元素的参照点, 
fixed:和绝对定位一样,但是始终相对于浏览器定位的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">

    *{
      margin: 0;
      padding: 0
    }

    .item1{
        background: #DA4040;
    }
    .item2{
        background: #F3DB1E;
    }
    .item3{
        background: #2CEF11;
    }
    .item4{
        background: #2077EE;
    }
    </style>
</head>

<body>
    <div class="box">
        <div class="item item1">1</div>
        <div class="item item2">2</div>
        <div class="item item3">3</div>
        <div class="item item4">4</div>
    </div>
</body>

</html>

先来看看相对定位,我们随便在某个item上面设置一个

 .item3{
        background: #2CEF11;
        position: relative;
    }

加入这一行代码,发现没什么变化啊,给他设置magrin,padding看看,会不会发生什么变化

 

.item3{
        background: #2CEF11;
        position: relative;
        margin: 20px;
    }

 可以看到这个item3的上下左右分别有了20px的外边距,是相对于自己原来定位的位置发生的变化的,而且,父元素的高度也发生了变化,这4个item还是在box元素的下面的

绝对定位absolute

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    *{
        margin: 0;
        padding: 0
    }
    .box{
        border: 5px solid #ccc
    }
    .item1{
        background: #DA4040;
    }
    .item2{
        background: #F3DB1E;
    }
    .item3{
        background: #2CEF11;
    }
    .item4{
        background: #2077EE;
        position: absolute;
       top: 20px;
       left: 20px
    }
    </style>
</head>

<body>
    <div class="box">
        <div class="item item1">1</div>
        <div class="item item2">2</div>
        <div class="item item3">3</div>
        <div class="item item4">4</div>
    </div>
</body>

</html>

 item4覆盖了别的元素,直接跑到别的上面了,这这里,是相对于body定位的,就是页面的左上角

而且!!这个item4收缩了,变小了,和他的兄弟姐妹不一样了,他的宽度是内容撑开的,而不再是占据一行了

 给这个元素设置了position之后,他脱离了文档流,覆盖在了别人的上面,而且,自己也具有了包裹的属性

 fixed布局,这个比较的简单,就是永远相对于浏览器的最左上角定位的 下一个章节,我会好好的弄一弄关于bfc以及清除浮动

posted @ 2017-04-03 14:51  阿柴与米  阅读(171)  评论(0编辑  收藏  举报