zoukankan      html  css  js  c++  java
  • [网页基础]DIV+CSS学习笔记(二)深入理解盒子模型

    DIV+CSS学习笔记()

    一、盒子

    盒子是很好理解的,关键是运用时要恰当。
    盒子的基本概念,一个content(内容),三个属性:padding,border,margin,其中这三个属性又都带有top,right,bottom,left4个位置分属性,注意顺序是从顶,右,底,左算起的。
    border的基本属性包括color,width,style,其中style要注意记一下:
    none(无)、hidden(隐藏)、dotted(点线)、dashed(虚线)、solid(实线)、double(双线)、groove(凹线)、ridge(脊线)、inset(内凹线)、outset(外凸线)。

     

     

    对于各种style的线,火狐浏览器支持得很好,但IE支持得就很不理想了,另外还要注意的是,在给元素设置background-color背景时,IE作用的区或为content+padding,而Firefox则是content+padding+border,当border很粗时,就会特别明显。如果是设置<body>,<body>是很特殊的一个盒子,它的背景会延伸到margin的部分,还有,<boyy>盒子的宽度不是由其内部的内容决定的,而是由浏览器窗口决定的,在设置各种margin时要注意这个问题。

     

    对于设置padding或margin时,如果只设置一个值,表示上下左右4个均为该值;如果设置两个值,前者为上下值,后者为左右值;如果设置三个值,第1个为上值,第2个为左右值,第3个为下值;如果设置为四个值,依次为上、右、下、左值。

    经验:当一个盒子设置了背景图像后,默认覆盖的范围是padding和内容组成的范围,并以padding的左上角为基准点平铺背景图象。

     

    二、盒子之间的关系

    先看一个例子:

    CSS如下:

    <style type="text/css">
            body{
            margin:0 0 0 0;
            font-family:宋体;
            font-size:12px;
            
            }
          ul { 
            background: #ddd; 
            margin: 15px 15px 15px 15px;
            padding: 5px 5px 5px 5px;
                                         /* 没有设置边框 */
          }
          li { 
            color: black;                /* 黑色文本 */ 
            background: #aaa;            /* 浅灰色背景 */
            margin: 20px 20px 20px 20px; /* 左侧外边距为0,其余为20像素*/
            padding: 10px 0px 10px 10px; /* 右侧内边距为0,其余10像素 */
            list-style: none             /* 取消项目符号 */
                                         /* 未设置边框 */
          }
          li.withborder {
            border-style: dashed;
            border- 5px;            /* 设置边框为2像素 */
            border-color: black;
            margin-top:20px; 
          }
        </style>

    BODY如下:

    <body>
        <ul>
          <li>第1个列表的第1个项目内容</li>      
          <li class="withborder">第1个列表的第2个项目内容,内容更长一些,目的是演示自动折行的效果。</li>
        </ul>
        <ul>
          <li>第2个列表的第1个项目内容</li>
          <li class="withborder">第2个列表的第2个项目内容,内容更长一些,目的是演示自动折行的效果。</li>
        </ul>
      </body>

    效果如下:

     

    三、标准文档流

    定义:不使用其他的与排列和定位相关的特殊CSS规则时,各种元素的排列规则。

    1、块级元素

    总是以一个块的形式表现出来,且跟同级兄弟块依次竖直排列,左右撑满。

    2、行内元素

    比如:文字元素,<strong></strong>,<a></a>都是行内元素,不占用独立区域,仅在其它元素的基础上指出了一定的范围。

    四、<div>村记与<span>标记

    <div>是一个块级元素,它包围的元素会自动换行,<span>是一个行内元素,在它的前后不会换行,<span>没有结构上的意义,纯粹是应用样式,当基他行内元素都不合适时,就可以使用<span〉元素。

     

    这里还需要注意:<span>村记可以包含于<div>标记中,反之则不行,

    五、盒子在标准流中的定位原则

    1、行内元素之间的水平margin:当两个行内元素紧邻时,它们之间的距离为第1个元素的margin-right加第2个元素的margin-left

    2、块级元素之间的竖直margin:两个块级元素之间的距离不是margin-bottom加margin-top,而是两者中的较大者,这个现象称为margin的“塌陷”现象。

    3、嵌套盒子之间的margin:嵌套形成的两个父子块,其中子块的margin将以父块的content为参考。

     

    这里注意,子div 的margin为负值时,IE会扩大父div区域来装子div,但FoxFire却不会,从而形成“错位”,所以在设计时,最好计算好各自区域的大小。

    看看下边的图,分析一下各字母的值,根据上边的代码能分析出来就差不多理解盒子了:

     

    a:由于body的margin设置为0,因此a的值为ul的左margin,15像素。

    b:ul的左padding加li的左margin,25像素。

    c:第二个li的border,即5px;

    d:li的左padding,即10px;

    e:计算完其它部分再来计算这里

    f:第二个li的border,5px;

    g:ul的右padding加上li的右margin,25px;

    h:ul的右margin,15px;

    i:由于body的margin设置为0,因此,i的值为ul的上margin,15px;

    j:ul的上padding加上li的上margin,25px;

    k:li的上下margin加上文本的高度,34px;

    l:两个li相邻,因此上面的li的下margin和下面li的上margin相遇,发生“塌陷”现象,因此l的值为两者中较大者,而两者相同,l的值为20px;

    m:第二个li的border,5px;

    n:li的上下padding和两行文字的高度,48px;

    o:同m

    p:ul的下padding加上li的下margin,25px;

    q:两个ul相邻,上面的ul的下margin和下面的ul的上margin相遇,发生“塌陷”现象,因此,q的值为两者中较大者,两者一样,q的值为15px;

  • 相关阅读:
    c/c++(c++和网络编程)日常积累(二)
    docker日常积累
    c/c++日常积累
    qt日常积累
    YUV相关积累
    02-asio学习
    01--c实现基础客户端和服务端与c++ boost.asio实现对比
    webrtc学习笔记积累
    linux-日常工作积累
    用Java链接SQL Server
  • 原文地址:https://www.cnblogs.com/dooroo/p/2743568.html
Copyright © 2011-2022 走看看