zoukankan      html  css  js  c++  java
  • 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;
    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以及清除浮动

  • 相关阅读:
    TP隐藏入口
    CentOs5.2中PHP的升级
    centos 关闭不使用的服务
    也不知怎么了LVS.SH找不到,网上搜了一篇环境搭配CENTOS下面的高可用 参考
    三台CentOS 5 Linux LVS 的DR 模式http负载均衡安装步骤
    分享Centos作为WEB服务器的防火墙规则
    Openssl生成根证书、服务器证书并签核证书
    生成apache证书(https应用)
    openssl生成https证书 (转)
    ls -l 列表信息详解
  • 原文地址:https://www.cnblogs.com/yiyistar/p/6661954.html
Copyright © 2011-2022 走看看