zoukankan      html  css  js  c++  java
  • css--盒子模型--塌陷问题及处理

    盒子模型  

    1 绝大多数标签都可以看作盒子,可以设置宽高或设置内容;在CSS中,"box model"这一术语是用来设计和布局时使用。

      CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。

      盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

      下面的图片说明了盒子模型(Box Model):


    CSS box-model

    content  盒子的内容

    padding  内边距  内容到边框的距离

    border  边框

    margin  外边距 元素与元素的间距

    2 盒子模型的属性

      1) width 宽     height高   均指内容放入宽高,而非盒子的

      2) padding 内边距          内容到边框的距离

        padding:10px; 一个值相当于四个方向值相同(上 右 下 左)

        padding:10px  20px;   上10px  右20px  下10px  左20px

        padding:10px 20px 30px;  上 右  下   左20px

        padding:10px 20px 30px 40px;    上 右 下 左

        

        上  padding-top  

        右padding-right   

        下 padding-bottom 

        左padding-left

      

      2)border 边框

      按三要素:border-width 边框宽度

             border-style  边框样式    solid实线  dashed虚线

            border-color  边框颜色    

      按方向:border:10px solid  blue    四个方向均同样设置

          border-top   

          border-right   

          border-bottom  

          border-left

          background-color:#000;黑

          border-20px;

          border-style:solid  dashed  dotted doble; 上右下左

          border-color:red green blue pink;  上右下左

          border-bottom:5px  solid blue;  下边框设置3个样式

       3)margin 外边距 元素与元素的间距

        margin:20px 30px  上右下左    同padding

        margin-top  

        margin-right

        margin-bottom

        margin-left

      

        水平居中: text-align:center;

             margin: 0  auto;   上下边距为0   auto让有宽度的块级元素水平居中 eg:div  p

    3 margin塌陷问题及解决

       父子塌陷问题
              父亲没有设置padding  border 内容时,子元素垂直方向的margin会叠加给父亲
              一旦发生塌陷,叠加规则:父亲最终垂直方向的margin为父子中最大的margin值,并非相加     
           
              解决方法:  1 把儿子的margin转换成父亲的padding 注意盒子总高度变化问题
                                  2 给父亲增加一个属性 overflow:hidden;    //触发了BFC

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
    
            /*margin 父子塌陷问题
              父亲没有设置padding  border 内容时,子元素垂直方向的margin会叠加给父亲
              一旦发生塌陷,叠加规则:父亲最终垂直方向的margin为父子中最大的margin值,并非相加      
            
              解决方法:  1 把儿子的margin转换成父亲的padding 注意盒子总高度变化问题
                        2 给父亲增加一个属性 overflow:hidden;    //触发了BFC
            */
    
            .box1{
                 150px;
                height: 150px;
                background-color: pink;
               /* padding: 20px; */   
               /* overflow: hidden; */
            }
            .p1{
                 50px;   /*内容的宽*/
                height: 50px;   /*内容的高*/
                background-color: aqua;
    
                padding: 10px  20px; /*内边距   内容到边框的距离  上下为10px 左右20px*/
                border: 2px dashed red;
                border-bottom: 2px solid blue;
                margin: 20px;
            }
    
        </style>
    </head>
    <body>
     <div class="box1">
         <p class="p1">这是内容1</p>
     </div>
    
    </body>
    </html>
    margin父子塌陷

    4 并列元素(兄弟塌陷)

      垂直方向上相遇的盒子模型,会发生margin塌陷;现象就是元素二者之间的距离并非之和,而是二者之间最大的

      解决方法:只配置一个方向即可

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        
        <style>
            .box1,.box2{
                 50px;
                height: 50px;
                background-color: red;
            }
    
            /*
                并列元素(兄弟)塌陷:垂直方向上的盒子模型,会发生margin塌陷
                即两个盒子模型的margin值选二者中最大的
                解决方式:只设置一个方向
            */
            .box1{
                margin-bottom: 50px;          /*只在其中一个设置,即只设置margin-bottom 或margin-top*/
                /* margin-bottom: 30px; */   /*会发生并列元素塌陷*/
            }
            .box2{
                margin-top: 0px;
                /* margin-top: 20; */
            }
        </style>
    </head>
    <body>
    <div class="box1"></div>
    <div class="box2"></div>
        
    </body>
    </htm
    并列元素塌陷

    5 背景属性

      1)背景颜色  background-color

      2) 背景图片 background-img:url(xxx.jpeg);  // 默认平铺

      3)背景重复 background-repeat:repeat-x;   //不写时默认图片平铺   

        控制图片平铺:repeat x,y方向均重复; repeat-x x方向平铺; repeat-y y方向平铺; no-repeat 不平铺;
      
      4)背景图定位
        background-position:50px 50px;
        background-position:center center;
        background-position:50% 50%; //图片中心点参考body100%移动50% 相当于center center
        background-position:left top; //左上
        background-position:right bottom; //右下
     
      简写:background:blue url(xxx.jpg) no-repeat cener cernter fixed; //若不需要,后四个属性值可以不写
      
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            /* 默认图片平铺
                控制图片平铺:repeat  x,y方向均重复; repeat-x x方向平铺;repeat-y y方向平铺;
                            no-repeat  不平铺;
            
            */
            .box1{
                 1500px; 
                height: 1500px; 
                /* background-image: url(../ddr.png);
                background-repeat: no-repeat;
                background-position: right bottom;   */
    
                /*简写 若不需要设置,后面四个属性值可以不写*/
                background: grey url(../ddr.png) no-repeat  center center fixed;
            }
        </style>
    </head>
    <body>
    <div class="box1"></div>
        
    </body>
    </html>
    background

    5 css元素的显示模式

      元素根据表现的特性分为:块级元素、行内元素、行内块元素

      

      默认特点:

      块级元素 div p li dt dd h1~h6 ul dl

      1)独占一行

      2)设置宽高有效 (padding margin line-height)

      3)不设置宽高,默认是父亲的100%

      行内元素 span em i b strong

      1)可以与其他行内元素并排

      2)设置宽高无效 (行高 line-height可设置,不支持垂直方向 padding margin)

      3)元素靠内容撑开

      

      行内块元素 img

      1)可以与其他行内元素 或 行内块元素并排

      2)可以设置宽高

      一般通过如下方法去除默认的padding margin

      *{

        padding:0;

        margin:0;

      }

    6 display 改变元素的显示模式

      display:block; 转化为块级元素

      display:inline; 转化为行内元素

      display:inline-block; 转化为行内块元素

      display:none; 隐藏元素

  • 相关阅读:
    HDU 1114 Piggy-Bank
    HDU 2955 Robberies
    NTOJ 290 动物统计(加强版)
    POJ 3624 Charm Bracelet
    HDU 2602 Bone Collector
    POJ 1523 SPF(无向图割顶)
    HDU 5311 Hidden String
    HDU 1421 搬寝室
    HDU 1058 Humble Numbers
    POJ 3259 Wormholes(spfa判负环)
  • 原文地址:https://www.cnblogs.com/nodehzi/p/13299734.html
Copyright © 2011-2022 走看看