zoukankan      html  css  js  c++  java
  • CSS 2. 盒模型|浮动

     1、盒模型

    盒模型: 在网页中 基本上都会显示一些方方正正的盒子,这种盒子就被我们称为盒模型。重要的属性: width,height,padding,border, margin

    盒子模型通过四个边界来描述:margin(外边距),border(边框),padding(内填充,内边距,壳子-边框),content(内容区域)

    指的是内容的宽度,而不是整个盒子真实的宽度;height: 指的是内容的高度,而不是整个盒子真实的高度。

    做一个宽度402*402的盒子,你应该如何设计?盒模型的计算

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>盒模型的计算</title>
        <style type="text/css">
            /*div{
                 400px;
                height: 400px;
                border: 1px solid red;
            }*/
            div{
                width: 50px;
                height: 50px;
                border: 1px solid red;
                padding: 175px;
            }
            /*div{
                 0;
                height: 0;
                border: 1px solid red;
                padding: 200px;
            }*/
        </style>
        <!-- 如果想保证盒子的真实宽度,加width应该减padding  减width 应该加padding -->
    </head>
    <body>
        <div>
            内容
        </div>
    </body>
    </html>
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>背景</title>
     6 
     7     <style type="text/css">
     8         /* 1000*1000 */
     9         #img{
    10              990px;
    11             height: 980px;
    12 
    13             background: red;
    14             padding-top: 10px;
    15             border: 5px solid black;
    16 
    17         }
    18 
    19     </style>
    20 </head>
    21 <body>
    22     <div id="img"></div>
    23 </body>
    24 </html>
    View Code

    padding

      padding:内边距 控制内容到边框的距离

    1.只写一个padding代表四个方向,也可以单独指定某一个方向

    2.元素设置了padding值是额外加在原来大小之上的width+padding。如果不想改变实际大小,那就在width-padding对应方向的值

    3.padding是添加给父级的,改变的是父级包含的内容的位置,自身位置不变

    4.简写方法 1)一个值:4个方向       2)两个值:上下 左右      3)三个值:上 左右 下      4)四个值:上 右 下 左(顺时针方向)

    注意:padding不支持负值

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
        .box{
            width: 300px;
            height: 300px;
            background-color: red;
            border: 5px solid yellow;
            /*padding: 30px;*/
            /*小属性设置,下面4行跟上边一句话一样*/
            /*padding-top:30px;*/
            /*padding-bottom: 30px;*/
            /*padding-left: 30px;*/
            /*padding-right: 30px;*/
    
            /*综合属性设置,用空格隔开*/
            /*padding: 20px 30px 40px 50px ;*/  /*上 右 下 左*/
            /*padding: 20px 30px 40px;*/  /*上 左右  下*/
            /*padding: 20px 30px;*/  /* 上下 左右*/
            padding: 20px; /*上下左右*/
        }
        
        <!--
        padding: 就是内边距。 padding的区域是有背景颜色。并且背景颜色和内容区域颜色一样
        也就是说background-color这个属性将填充所有的border以内的区域
        padding就是边框到内容之间的距离
        padding有四个方向。所以说我们能分别描述4个方向的padding
        方法有两种:1.写小属性  2.写综合属性 用空格隔开
         -->
        </style>
    </head>
    <body>
        <div class="box">
            我非常地幸运,能从那些对这一点深信不疑的人身上学习,他们清楚地知道改变世界的起点是
            “跟随一种远见卓识,而不是某一条道路”。这就是我的朋友和导师——史蒂夫·乔布斯。
            乔布斯的远见便是,伟大的想法从拒绝接受事情原本的样子中诞生出来。这些原则在今天依旧指导着苹果公司的员工。
        </div>
    </body>
    </html>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>padding</title>
        <style type="text/css">
            .box1{
                 100px;
                height: 200px;
                background-color: red;
                /*padding-left: 20px;
                padding-top: 30px;
                padding-right: 20px;*/
                padding: 20px 30px;
            }
        </style>
    </head>
    <body>
    
        <!-- 内边距定义:内容区域到边框的距离
            内边距会扩大元素所在的区域
            注意:为元素设置内边距 只能影响自己。不会影响其他的元素 -->
        <div class="box1">123</div>
        <div></div>
    
    </body>
    </html>

    一些标签默认有padding

    <style type="text/css">
            *{
                padding: 0;
                margin: 0;
            }
        </style>
    
    body有默认的margin:8px,
            比如说通常我们做站的时候,要清除默认的padding,margin
    
            *它的效率不高。所以我们要使用并集选择器来选中页面中应有的标签(不同去背记,因为有人已经给咱们写好了这些清除默认的样式表)
                百度一下reset.css
            body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td {
                margin: 0;
                padding: 0;
            }

    border

    边框样式

    1.border会改变元素的实际大小;       2.背景色会渲染到border区域

      

    四个值: 上  右 下 左 顺时针 border-style:dotted dashed double solid;
    三个值: 上 左右 下
    两个值: 上下。左右
    一个值: 四个方向
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            .box{
                width: 200px;
                height: 200px;
                /*border: 5px solid red;*/
                /*按照3要素;上边一行定这3行*/
                /*border-width: 5px;*/
                /*border-style: solid;*/
                /*border-color: red;*/
    
                /*border- 5px 10px;*/
                /*border-style: solid dotted double dashed;  !* 要给它设置线性样式才能显示出来:实线、点状、双线、虚线*!*/
                /*border-color: red green yellow;*/
    
                /* 按照方向分*/
                /*border-top- 10px;
                border-top-color: red;
                border-top-style:solid;
    
                border-bottom- 10px;
                border-bottom-color: red;
                border-bottom-style:solid;
    
                border-left- 10px;
                border-left-color: red;
                border-left-style:solid;
    
                border-right- 10px;
                border-right-color: red;
                border-right-style:solid;*/
    
                /*设置border没有样式*/
                /*border: none;*/
                border-bottom:none ;
                border-top: 0;
                border-left: 10px solid red;
            }
        </style>
        <!-- 
        border: 边框的意思
        边框有三个要素: 粗细 线性 颜色
        如果颜色不写,默认是黑色的
        如果 粗细不写 不显示。 只写线性样式,默认的有上下左右 3px的宽度 solid 默认的黑色
         -->
    </head>
    <body>
        <div class="box"></div>
    </body>
    </html>

    用border制作小三角形

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            /*小三角 箭头指向下方*/
            div{
                width: 0;
                height: 0;
                border-bottom: 20px solid red;
                border-left: 20px solid transparent; /*透明色 border-left:solid 200px rgba(0,0,0,0) */
                border-right: 20px solid transparent;
            }
        </style>
    </head>
    <body>
        <div></div>
    </body>
    </html>

    margin 

     margin: 外边距,控制元素与元素之间的距离。

    1)margin 的4个方向  

    2)margin会改变实际大小,背景色不会渲染到margin区域 这个区域会以空白显示,但是也属于盒子的一部分

    3)margin是添自身的,如果哪个想要改变自己的位置,就给谁添加margin  

     html的部分标签自带margin padding p body ul

    相邻两个元素或者嵌套时都会遇到这样的问题:一个是往上走一个往下走,它们的外边距是相遇了,就会形成一个外边距,它们的外边距会进行合并(这是一种效果,不是人为的),当这两个值是以最大值为基准进行设置的,就是说如果我的外边距是20,它的是40,就以它的为基准进行设置。如何解决呢?可以给它设置个border:见下面,这样就设置成100了

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>margin</title>
        <style type="text/css">
    
            .box1{
                 200px;
                height: 200px;
                background-color: #F70073;
    
                margin-bottom: 50px;
                border:1px solid green;
            }
    
            .box2{
                 200px;
                height: 200px;
                background-color: yellow;
                margin-top: 100px;
            }
    
    
        </style>
    </head>
    <body>
    
        <div class="box1"></div>
        <div class="box2">
            <div class="child"></div>
        </div>
    
    </body>
    </html>

    在有父子关系的时候

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>margin</title>
        <style type="text/css">
    
            .box1{
                 200px;
                height: 200px;
                background-color: #F70073;
    
                margin-bottom: 50px;
            }
    
            .box2{
                 200px;
                height: 200px;
                background-color: yellow;
                margin-top: 100px;
                border:1px solid red;  加上这个就解决了那个偏移问题,儿子在父的基准下向下偏移了300px;不能改成0px
           padding:1px; 这种设置方法也可以解决偏移问题
           overflow:hidden; 设置隐藏也可以;
    
            }
            .child{
                 100px;
                height: 100px;
                background-color: #0731FA;
                margin-top:300px ;
            }
    
        </style>
    </head>
    <body>
    
        <div class="box1"></div>
        <div class="box2">
            <div class="child"></div>
        </div>
    
    </body>
    </html>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>margin</title>
        <style type="text/css">
    
            .box1{
                 200px;
                height: 200px;
                background-color: #F70073;
                /*margin-top: 20px; 它会往下移动20px,box1它四周默认是4个8,一共28px */
                /*margin-left: 40px; 它往右移动了40px */
                /*margin-bottom: 20px;*/
                /*margin-right:40px;*/
    
                /*margin: 20px 30px 40px 50px;  上右下左 简单写法*/
                /*margin: 20px 40px; */  上下20,左右40
    
                /*margin-bottom: 50px;  往下走了*/
    
                /*margin:  0 auto; 0是上下,auto是左右自动居中;使盒子元素水平居中显示*/
                /*margin:  0 auto;*/
                border:1px solid green;
    
            }
    
            .box2{
                 200px;
                height: 200px;
                background-color: yellow;
                margin-top: 100px;  往上走的
                border:1px solid red;
                /*padding: 1px;*/
                /*overflow: hidden;*/
    
            }
            .child{
                 100px;
                height: 100px;
                background-color: #0731FA;
                margin-top: 300px;
    
            }
            /*span{
                background-color: red;
            }*/
    
            /*.span1{
                margin-left: 30px;
            }
            .span2{
                margin-left: 20px;
            }*/  它左右边都移动了,设置左右方向没有问题
    
            /*相邻两个元素或者是嵌套元素时都会形成这个问题;当两个垂直外边距 相遇时,会形成一个外边距 ,称为‘外边距合并';以外边距最大者为设置基准
                所有毗邻的两个或更多盒元素的margin将会合并为一个margin共享之。
                毗邻(/同级或嵌套)的定义为:同级或者嵌套的盒元素,并且它们之间没有非空内容、Padding或Border分隔。
            */
    
            /*注意:父子级盒子 嵌套 设置外边距 会形成外边距合并,影响页面布局,
            解决办法:  子债父还
            1. 父级或子元素使用浮动或者绝对定位absolute
            浮动或绝对定位不参与margin的折叠
    
            2. 父级overflow:hidden;
    
            3. 父级设置padding(破坏非空白的折叠条件)
    
            4. 父级设置border
            */
    
    
        </style>
    </head>
    <body>
    
        <div class="box1"></div>
        <div class="box2">
    
            <div class="child"></div>
        </div>
    
    
        <!-- <span class="span1">12233</span>
        <span class="span2">21213</span> -->
    
    </body>
    </html>

    子元素margin-top如何影响父元素:https://blog.csdn.net/sinat_27088253/article/details/52954688

    margin塌陷问题

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            *{
                padding: 0;
                margin: 0;
            }
            .father{
                width: 400px;
                overflow: hidden;
                border: 2px solid greenyellow;
            }
            .box1{
                width: 300px;
                height: 200px;
                background-color: red;
                float: left;
                margin-bottom: 20px;
            }
            .box2{
                width: 400px;
                height: 300px;
                background-color: green;
                margin-top: 50px;
                float: left;
            }
    /*当给两个兄弟盒子 设置垂直方向上的margin (top、bottom)那么以较大的为准,那么我们称这种现象叫塌陷;
    浮动的盒子垂直方向 不塌陷*/
            
            span{
                background-color: #1b6d85;
            }
            span.a{
                margin-right: 20px;
            }
            span.b{
                margin-left: 30px;
            }
        </style>
    </head>
    <body>
        <div class="father">
            <div class="box1"></div>
            <div class="box2"></div>
        </div>
        <span class="a">内容1</span>
        <span class="b">内容2</span>
    </body>
    </html>

    margin 0 auto

    1.使用margin: 0 auto;水平居中盒子 必须有width,要有明确width,如果没有会继承父盒子宽度,靠父盒子来填充它的宽度;
            文字水平居中使用text-align: center;
    
        2.只有标准流下的盒子 才能使用margin:0 auto; 
        当一个盒子浮动了,固定定位,绝对定位了,margin:0 auto; 不能用了
    
        3.margin:0 auto;居中盒子。而不是居中文本,文字水平居中使用text-align: center;
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            *{
                padding: 0;
                margin: 0;
            }
            div{
                width: 780px;
                height: 50px;
                background-color: #1b6d85;
                /*margin: 0 auto;*/  /*水平居中盒子*/
    
                margin-left: auto;
                margin-right:auto;   /*左右都写水平居中,相当于 0px auto*/
    
                text-align: center;  /*居中文字*/
                /*float: left;*/
            }
    
        </style>
    
    </head>
    <body>
        <div>文字</div>
    </body>
    </html>
    View Code

    善用父padding,而不是margin

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6     <style type="text/css">
     7         *{
     8             padding: 0;
     9             margin: 0;
    10         }
    11         .father{
    12             width: 270px;
    13             height: 270px;
    14             background-color: blue;
    15             padding-top: 30px;  /**/
    16             padding-left: 30px;
    17             /*border: 2px solid red;*/
    18 /*因为父亲没有border,没有框把它给框住;那么儿子margin实际上踹的是“流” 踹的是行
    19 所以父亲就掉下来;给父加一个border就可以了。但一个网站不能都带着border;要善于使用padding-top来调整它的位置。*/
    20         }
    21         .xiongda{
    22             width: 100px;
    23             height: 100px;
    24             background-color: orange;
    25             /*margin-left: 30px;*/
    26             margin-top: 30px;
    27         }
    28     </style>
    29 
    30 </head>
    31 <body>
    32     <div class="father">
    33         <div class="xiongda"></div>
    34     </div>
    35 </body>
    36 </html>
    View Code
    什么是标准文档流
            宏观的讲,我们的web页面和ps等设计软件有本质的区别
            web 网页的制作 是个“流”像水流一样,  从上而下 ,像 “织毛衣”
            而设计软件 ,想往哪里画东西 就去哪里画
    
            标准文档流下 有哪些微观现象?
            1.空白折叠现象;多个空格之间或者只要换行了都被当做一个空格
            2.高矮不齐,底边对齐;
            3.自动换行,一行写不满,换行写

     2、display的用法

    display
    1.控制HTML元素的显示和隐藏 2.块级元素与行内元素的转换。
    
    display:block(块级)
    默认占满整个页面宽度,如果设置了指定宽度,则会用margin填充剩下的部分。
    
    display:inline(行内)
    行内元素
    只要设置了display: inline,那么元素的width、height、margin-top、margin-bottom和 float属性都不会有什么影响。
    
    display:inline-block(行内块级)
    行内块元素
    同时具有行内元素和块级元素的特点。
    
    display:none
    HTML文档中元素存在,但是在浏览器中不显示。一般用于配合JavaScript代码使用。
    块级元素特点:display:block;
    
    1、每个块级元素都从新的一行开始,并且其后的元素也另起一行。独占一行
    
    2、元素的高度、宽度、行高以及顶和底边距都可设置。
    
    3、元素宽度在不设置的情况下,是它本身父容器的100%(和父元素的宽度一致),除非设定一个宽度。
    
    行内元素特点:display:inline;
    
    1、和其他元素都在一行上;
    
    2、元素的高度、宽度及顶部和底部边距不可设置;
    
    3、元素的宽度就是它包含的文字或图片的宽度,不可改变。
    
    行内块状元素的特点:display:inline-block;
    
    1、和其他元素都在一行上;
    
    2、元素的高度、宽度、行高以及顶和底边距都可设置

     块级元素和行内块元素的转换

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            .box1{
                display: inline-block;  /*将块元素转化成行内元素*/
                width: 200px;
                height: 40px;
                border: 1px solid red;
            }
            .box2{
                margin-top: 20px;
                width: 200px;
                height: 50px;
                font-size: 30px;
                border: 2px solid yellow;
            }
            span{
                background-color: #2aabd2;
                width: 101px;
                height: 100px;
                /*display: block;  !*将行内元素转化成块级元素*!*/
                /*display: none; !*隐藏当前的标签 不占当前位置;span标签没了 *!*/
                visibility: hidden;  /*藏当前的标签,占据当前位置*/
    
            }
            img{
                width: 300px;
                height: 300px;
                display: none; /*隐藏当前的标签*/
            }
    
        </style>
    
    </head>
    <body>
        <div class="box1">内容1</div>
        <div class="box1">内容1</div>
        <div class="box2">内容2</div>
        <span>alex</span>
        <span>kris</span>
    
        <img src="./images/企业1.png" alt="">
    <!-- form表单中 input textarea select 和img都是行内块状元素 -->
    </body>
    </html>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>display</title>
        <style type="text/css">
            div{
                  100px;
                height: 100px;
                background-color: red;
                /*控制元素隐藏,不占位置*/
                /*display: none;*/
                /*控制元素隐藏,占位置,影响后面盒子布局*/
                /*visibility: hidden;*/
    
                /*块级元素能转换为行内元素在一行内显示,还能设置宽高*/
                /*display: inline-block;*/
                /*将 块级元素 转化为 行内元素*/
                display: inline;
    
            }
            a{
                display:inline-block;
                 300px;
                height: 300px;
                background-color: yellow;
            }
            img{
                display: block;
                /*行内块应用中一般转化为块级元素*/
                 100px;
                height: 100px;
    
            }
    
        </style>
    </head>
    <body>
        <div>123</div> 块级元素
        <div>234</div>
        <a href="#">百度一下</a>  行内元素
        <img src="../images/小米1.jpg"alt="小米">  行内块状元素
    </body>
    </html>

    3、浮动

    浮动产生的效果

    先来了解一下block元素和inline元素在文档流中的排列方式。
    
    block元素通常被现实为独立的一块,独占一行,多个block元素会各自新起一行,默认block元素宽度自动填满其父元素宽度。block元素可以设置width、height、margin、padding属性;
    inline元素不会独占一行,多个相邻的行内元素会排列在同一行里,直到一行排列不下,才会新换一行,其宽度随元素的内容而变化。inline元素设置width、height属性无效
    
    常见的块级元素有 div、form、table、p、pre、h1~h5、dl、ol、ul 等。
    常见的内联元素有span、a、strong、em、label、input、select、textarea、img、br等
    所谓的文档流,指的是元素排版布局过程中,元素会自动从左往右,从上往下的流式排列。
    脱离文档流,也就是将元素从普通的布局排版中拿走,其他盒子在定位的时候,会当做脱离文档流的元素不存在而进行定位。
    假如某个div元素A是浮动的,如果A元素上一个元素也是浮动的,那么A元素会跟随在上一个元素的后边(如果一行放不下这两个元素,那么A元素会被挤到下一行);如果A元素上一个元素是标准流中的元素,那么A的相对垂直位置不会改变,也就是说A的顶部总是和上一个元素的底部对齐。此外,浮动的框之后的block元素元素会认为这个框不存在,但其中的文本依然会为这个元素让出位置。 浮动的框之后的inline元素,会为这个框空出位置,然后按顺序排列。
    
    float属性值:
    1、left:左浮动 左侧为起始,从左向右排列
    2、right:右浮动  右侧为起始,从右向左排列
    3、none :不浮动,默认不浮动
    
    
    浮动产生的影响
    浮动可以使元素按指定方向排列,直到遇到父元素的边界或另一个浮动元素停止
    
    浮动的特性
    文档流是:可见元素在文档中排列位置,元素排版布局过程中,元素会自动从左往右,从上往下的流式排列。
    
    1.浮动会使元素脱离文档流
    2.浮动会使元素提升层级
    3.浮动可以使块元素在一行排列,不设置宽高的时候,可以使元素适应内容 
    4.浮动可以使行内元素支持宽高
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>浮动</title>
        <style type="text/css">
            .wrap div{
                 200px;
                height: 200px;
                background-color: red;
                border: 1px solid black;
                float: left;
                /*float: none;*/
            }
        </style>
    </head>
    <body>
            <!--left 左浮动 左侧为起始。从左往右依次排列
                right 右浮动 右侧为起始。从右往左依次排列
                文档流:可见元素在文档中的显示位置
                浮动产生的效果
                浮动可以使元素按指定位置排列,直到遇到父元素的边界或另一个元素的边界停止
                       -->
        <div class="wrap">
            <div>1</div>
            <div>2</div>
            <div>3</div>
            <div>4</div>
            <div>5</div>
            <div>6</div>
            <div>7</div>
            <div>8</div>
            <div>9</div>
            <div>11</div>
            <div>12</div>
            <div>13</div>
        </div>
    
    </body>
    </html>
    浮动是css里面布局最多的一个属性
    
            效果: 两个元素并排了,并且两个元素都能够设置宽度和高度
    
            浮动想学好:一定要知道它的四个特性:
            1.浮动的元素脱标
            2.浮动的元素互相贴靠
            3.浮动的元素有“字围”效果
            4.收缩的效果

    浮动的元素脱标

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            *{
                padding: 0;
                margin: 0;
            }
            .box1{
                width: 200px;
                height: 200px;
                background-color: red;
                float: left;
            }
            .box2{
                width: 200px;
                height: 200px;
                background-color: yellow;
            }
    
            /*脱标: 脱离了标准文档流
            小红盒子浮动了,脱离了标准流,此时小黄这个盒子就是标准文档流中的第一个盒子。所以就渲染到了左上方。  浮动元素 “飘起来了”*/
    
            span{
                background-color: #2aabd2;
                width: 300px;
                height: 50px;
                float: left;
            }
    
            /*span标签不需要转成块级元素,也能够设置宽高。
            所有的标签一旦设置浮动,能够并排,都不区分行内、块状元素,设置宽高*/
        </style>
    </head>
    
    <body>
        <div class="box1">小红</div>
        <div class="box2">小黄</div>
    
        <span>span标签1</span>
        <span>span标签2</span>
    </body>
    </html>

    浮动元素互相贴靠

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            .box1{
                width: 100px;
                height: 400px;
                float: left;
                background-color: red;
            }
            .box2{
                width: 150px;
                height: 450px;
                float: left;
                background-color: yellow;
            }
            .box3{
                width: 300px;
                height: 300px;
                float: left;
                background-color: green;
            }
    /*如果父元素有足够的空间,那么3哥紧靠着2哥,2哥紧靠着1哥,1哥靠着边。
    如果没有足够的空格,那么就会靠着1哥,如果没有足够的空间靠着1哥,自己往边靠*/
        </style>
    
    </head>
    <body>
        <div class="box1">1</div>
        <div class="box2">2</div>
        <div class="box3">3</div>
    </body>
    </html>

    浮动元素字围效果

    所谓字围效果:
            当div浮动,p不浮动
            div挡住了p,div的层级提高,但是p中的文字不会被遮盖,此时就形成了字围效果
    
            关于浮动我们强调一点,浮动这个元素,我们初期一定要遵循一个原则
    
            永远不是一个盒子单独浮动,要浮动就要一起浮动。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            *{
                padding: 0;
                margin: 0;
            }
            div{
                float: left;
            }
            p{
                background-color: #dddddd;
            }
    
        </style>
    
    </head>
    <body>
        <div>
            <img src="./images/企业1.png" alt="">
        </div>
        <p>
            我们都可以从他们的例子中学习。如果你希望改变世界,你必须激起你的无畏。现在,
            如果你像我毕业那天一样,也许你并不感到无所畏惧。也许你正在考虑你希望得到的那份工作,或者想知道你要住到哪里,或者如何偿还学生贷款。
            这些,我都知道,它们是实实在在的忧虑。我也有这些忧虑,但不要让这些烦恼阻止你做出改变。
            无畏意味着要勇敢迈出第一步,即使你不知道它将你引至何处。这意味着被更高尚的目标所驱动,而不是掌声。无畏意味着当你远离人群、站在别处时,
            才会发现自己的特性,这将比你在众声喧哗中获得更多。
            如果你想加快速度,就要不惧怕失败;如果你想与他人互相倾听和交谈,就不要担心被拒绝;如果你举止得体,充满善意,即使没有人看到,你期待的一切也会来到。
            对你们来说,现在是时候在前进的道路上添砖加瓦了。也是时候,让我们所有人共同前进了。同时,未来该由你们带路了。
            谢谢你们,
            祝贺你们,2018届毕业生。
        </p>
    
    
    </body>
    </html>

    浮动元素紧凑效果就是收缩

    收缩:就是一个浮动元素。如果没有设置宽度width,那么就自动收缩为文字的宽度(这点跟行内元素很像)

    产生的浮动效果,为什么要清除浮动?

     浮动的特性

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>浮动特性</title>
        <style type="text/css">
            *{
                padding: 0;
                margin: 0;
            }
            .wrap div{
                 200px;
                height: 200px;
                border: 1px solid black;
            }
            .box1{
                background-color: red;
                float: left;
            }
            .box2{
                background-color: yellow;
                margin-left: 20px;
            }                     黄色和绿色的盒子还保持div这个属性,它就会挤上去
            .box3{
                background-color: green;
            }
            .container{
                /* 300px;
                height: 300px;*/ 加上之前是在一行内排列,去掉之后它就不见了
                background-color: #E26F3A;
                float: left;
            }
            span{
                float: left;
                background-color: #EC00D8;
                 100px;
                height: 50px;
            }
    
        </style>
    </head>
    <body>
        <!-- 文档流: 可见元素在文档中的排列位置
            浮动效果 
            1.浮动可以使元素脱离文档流 ,不占位置
            2.浮动会使元素提升层级(红色的(加了floatd)比其他的层级高)
            3.浮动可以使块元素在一行排列,不设置宽高的时候,可以使元素适应内容 (div块级元素,加了float后可以简单的认为可以把块级元素转换为行内块元素;)
            4.浮动可以使行内元素支持宽高 
         -->
        <div class="wrap">
            <div class="box1"></div>
            <div class="box2"></div>
            <div class="box3"></div>
        </div>
            <div class="container">哈哈</div>
            <div class="container">哈哈</div>
            <span>爽歪歪</span>
    </body>
    </html>

    浮动产生的问题和解决方法

      父元素不设置高度,子元素设置浮动之后,不会撑开父元素的高度,那么此时父盒子没有高度了。如果在次父盒子下面还有一个标准流的盒子,那么就会影响页面的布局。所以我们要解决浮动带来的页面布局错乱问题------清除浮动。

    解决方法:

     1.给父元素固定高度。不灵活
     2.在浮动元素最后加一个空的块元素,且块元素不浮动,设置其属性为clear:both    结构冗余
     3.常用方法:.wrap:after{
                clear: both;
                content: "";
                height: 0;
                visibility: hidden;
                display: block;
            }
    
    4.给父盒子 添加overflow:hidden属性
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            *{
                padding: 0;
                margin: 0;
            }
            .wrap{
                 1190px;
                /*height: 480px;*/ 通常页面布局的时候父盒子的高度不需要设置,通过子盒子来填充父盒子的高度;  第一种解决办法把它打开
                background-color: red;
                margin: 0 auto;
                overflow: hidden; 第4种解决方法
            }
            .wrap div{  
                float: left; 所有的div都给它设置成float,不占位置了就漂,绿色的遇到黄色的就停止了
            }
            .wrap_1{
                 220px;
                height: 480px;
                background-color: yellow;
            }
            .wrap_2{
                 700px;
                height: 480px;
                background-color: green;
                margin-left: 25px;
            }
            .wrap_3{
                 220px;
                height: 480px;
                background-color: blue;
                margin-left: 25px;
            }
            /*#clearfix {*/
                /*float: none;*/  第二种解决办法
                /*clear: both;*/
            /*}*/
            官方推荐解决办法,最常使用的解决办法;第3种解决办法
            .wrap:after{
                visibility: hidden;clear: both;display: block;content: ".";height: 0;
            }
    
    
        </style>
    
    </head>
    <body>
        <!-- 浮动产生的问题:
        父元素不设置高度时,子元素设置了浮动,不会撑开父元素的高度。因为子元素 不占位置
        解决办法
        1.给父盒子设置固定高度。不灵活
        2.给浮动元素最后一个加一个空的块级元素,且该元素不浮动,设置clear:both左右方向都不浮动
        结构冗余
        3..wrap:after{visibility:hidden;clear:both;display:block;content:".";height:0}  
        4.使用给父元素添加overflow:hidden
                3、4是比较常用的办法
    
         -->
    
        <div class="wrap">
            <div class="wrap_1"></div>
            <div class="wrap_2"></div>
            <div class="wrap_3"></div>
            <!--<div id="clearfix"></div>-->
        </div>
    
    </body>
    </html>

     清除浮动1:给父盒子设置高度

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            *{
                padding:0;
                margin: 0;
            }
            div{
                width: 400px;
                /*height: 40px;*/   /*可用在固定导航栏*/
            }
            /*只要是给子盒子li设置了浮动,变成了浮动元素,脱离了文档流,不在页面上占位置了就不会去填充父元素ul的高度,祖先盒子也没有高度;导致父盒子没有了高度,兄弟盒子就会占据到前面。
            给父盒子或者祖先盒子设置高度,这种方式不灵活。如果哪天公司产品突然要改,要求父盒子高度变大,而且不仅一个地方哦,那么我们不可能去找源码去手动修改*/
            ul{
                list-style: none;
                /*height: 40px;*/
            }
            div ul li{
                float: left;
                width: 100px;
                height: 40px;
                background-color: red;
            }
            .box{
                width: 200px;
                height: 100px;
                background-color: yellow;
            }
        </style>
    
    </head>
    <body>
        <div>
            <ul>
                <li>python</li>
                <li>web</li>
                <li>linux</li>
            </ul>
        </div>
        <div class="box"></div>
    </body>
    </html>

    清除浮动2 clear both

      给浮动元素最后面加一个空的div 并且该元素不浮动 ,然后设置clear:both 清除别人对我的浮动影响。

    内墙法 ,无缘无故加了div元素 结构冗余 

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            
            *{
                padding: 0;
                margin: 0;
            }
            ul{
                list-style: none;
            
            }
    
            div{
                width: 400px;
            
            }
            
            div ul li {
                float: left;
                width: 100px;
                height: 40px;
                background-color: red;
            }
            .box{
                width: 200px;
                height: 100px;
                background-color: yellow;
            }
            .clear{
                clear: both;
            }
        </style>
    </head>
    <body>
        
        <div>
            <ul>
                <li>Python</li>
                <li>web</li>
                <li>linux</li>
            </ul>
            <div class="clear"></div>
        </div>
        <div class="box">
            
        </div>
    </body>
    </html>
    View Code

    清除浮动3 伪元素清除法 (常用)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            *{
                padding:0;
                margin: 0;
            }
            ul{
                list-style: none;
            }
            div{
                width: 400px;
            }
            div ul li{
                float: left;
                width: 100px;
                height: 40px;
                background-color: red;
            }
            .box{
                width: 200px;
                height: 100px;
                background-color: yellow;
            }
            /*伪元素选择器*/
            .clearfix:after{
                content: '.';
                clear: both;
                display: block;  /*必须要写这三句话*/
                height: 0;
                visibility: hidden;
            }
            /*
                新浪首页清除浮动伪元素方法
                 content: ".";  加.会有一个默认的.;一定要结合content内容,.不写跟没有清除浮动一样
                    display: block; 让它变成块状
                    height: 0;  给它个高度0就不占据位置了
                    clear: both;
                    visibility: hidden   隐藏之后它还占据当前位置
                */
    
        </style>
    
    </head>
    <body>
        <div class="clearfix">
            <ul>
                <li>python</li>
                <li>web</li>
                <li>linux</li>
            </ul>
        </div>
        <div class="box"></div>
    </body>
    </html>

    清除浮动4 overflow hidden(常用)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>伪元素清除法(常用)</title>
        <style type="text/css">
            
            *{
                padding: 0;
                margin: 0;
            }
            ul{
                list-style: none;
            
            }
            .box{
                width: 400px;
                overflow: hidden;    
            }
            .box ul li {
                float: left;
                width: 100px;
                height: 40px;
                background-color: red;
            }
            .box2{
                width: 200px;
                height: 100px;
                background-color: yellow;
            }
        </style>
    </head>
    <body>
        
        <div class="box">
            <ul>
                <li>Python</li>
                <li>web</li>
                <li>linux</li>
            
            </ul>
            
        </div>
        <div class="box2">
            
        </div>
    </body>
    </html>

    overflow

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            body{
                /*overflow: auto;*/
            }
            div{
                width: 200px;
                height: 200px;
                border: 2px solid red;
                overflow: hidden;
            }
            /*overflow:visible;(默认值,内容不会被修剪,超出会出现在元素框之外;) 
                       hidden(内容会被修剪,且其余内容是不可见的)
                     scroll内容会被修剪,但浏览器会显示滚动条以便查看其余内容;
                      auto也会出现滚动条;inherit继承父级的overflow的属性*/
        </style>
    </head>
    <body>
        <div>
            我们都可以从他们的例子中学习。如果你希望改变世界,你必须激起你的无畏。现在,如果你像我毕业那天一样,也许你并不感到无所畏惧。
            也许你正在考虑你希望得到的那份工作,或者想知道你要住到哪里,或者如何偿还学生贷款。这些,我都知道,它们是实实在在的忧虑。我也有这些忧虑,但不要让这些烦恼阻止你做出改变。
            无畏意味着要勇敢迈出第一步,即使你不知道它将你引至何处。这意味着被更高尚的目标所驱动,而不是掌声。无畏意味着当你远离人群、站在别处时,才会发现自己的特性,
            这将比你在众声喧哗中获得更多。
        </div>
    </body>
    </html>

    练习京东导航栏(用float)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
    
            *{
                padding: 0;  清除它的默认样式
                margin: 0;
            }
    
            .wrap{
                 100%;
                margin: 0 auto;
                background-color: #EDF1EB;
    
            }
            .wrap .header{
                 1245px;
                height: 40px;
                margin: 0 auto;
                background-color:#DCDEDF;
            }
            .header_l,.header_r{
                float: left;
            }
            .header_l img{
                 20px;
                height: 20px;
    
            }
            .header_l span{
                color: #A0A2A2;
                font-size: 12px;
                height: 40px;
                line-height: 40px;
                text-align: center;
            }
            .header_l{
                margin: 5px 0px 0px 40px;
            }
            .header_r{
                 870px;
                margin-left: 250px;
                line-height: 40px;
            }
            .header_r ul li{  ul是默认有margin的,上下左右8
                list-style: none;
    
    
                float: left;
                padding: 0px 6px;  设置间距的
                height: 40px;
                line-height: 40px;
                margin-bottom: 30px;
            }
            .header_r ul li a{
                text-decoration: none;
                color: #A0A2A2
            }
            .header_r ul li a:hover{
                color: red;
            }
        </style>
    </head>
    <body>
    
        <!-- 最外层的父盒子 -->
        <div class="wrap">
            <!-- 导航 -->
            <div class="header">
                <div class="header_l">
                    <img src="./images/logo.png" alt="一个logo">
                    <span>北京</span>
    
                </div>
                <div class="header_r">
                    <ul>
                        <li><a href="">你好,请登录&nbsp;<span>免费注册</span></a></li>
                        <li class="spacer"></li>
                        <li><a href="#">我的订单</a></li>
                        <li class="spacer"></li> 
                        <li><a href="spacer">我的京东</a></li>
                        <li class="spacer"></li>
                        <li><a href="#">京东会员</a></li>
                        <li class="spacer"></li>
                        <li><a href="#">企业采购</a></li>
                        <li class="spacer"></li>
                        <li><a href="#">客户服务</a></li>
                        <li class="spacer"></li>
                        <li><a href="#">网站导航</a></li>
                        <li class="spacer"></li>
                        <li><a href="#">手机京东</a></li>
                    </ul>
                </div>
            </div>
    
            <!-- 中心内容 -->
    
            <!-- 底部 -->
    
    
        </div>
    
    </body>
    </html>
  • 相关阅读:
    堆和栈究竟有什么区别?
    堆和栈的区别
    POJ 1528问题描述
    Facial Detection and Recognition with opencv on ios
    10个免费学习编程的好地方
    目标检测的图像特征提取之(一)HOG特征
    行人检测综述
    Introduction to Face Detection and Face Recognition
    opencv hog+svm行人检测
    苹果检测
  • 原文地址:https://www.cnblogs.com/shengyang17/p/9144191.html
Copyright © 2011-2022 走看看