初步了解三 CSS

CSS深化了解

(盒模型内外边距 阴影 浮动 定位 )

CSS 布局的三种机制

  1. 普通流(标准流)
    块级元素会独占一行,从上向下顺序排列;
    常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table
    行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行;
    常用元素:span、a、i、em等
  2. 浮动
    让盒子从普通流中起来,主要作用让多个块级盒子一行显示。
  3. 定位
    将盒子在浏览器的某一个置——CSS 离不开定位,特别是后面的 js 特效。

一. 盒子模型(Box Model)

  1. 定义 所谓盒子模型:
    就是把HTML页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。

  2. 总结
    盒子模型有元素的内容、边框(border)、内边距(padding)、和外边距(margin)组成。
    盒子里面的文字和图片等元素是 内容区域
    盒子的厚度 我们成为 盒子的边框
    盒子内容与边框的距离是内边距(类似单元格的 cellpadding)
    盒子与盒子之间的距离是外边距(类似单元格的 cellspacing)

  3. 盒子边框(border)

    1. 语法: border : border-width || border-style || border-color
      border-width定义边框粗细,单位是px
      border-style边框的样式
      border-color边框颜色

    2. 边框的样式 none:没有边框即忽略所有边框的宽度(默认值)
      solid:边框为单实线(最为常用的)
      dashed:边框为虚线
      dotted:边框为点线

    3. 具体用法 border: 1px solid red; 没有顺序
      border可以单独定义一个边 border-top border-bottom border-left border-right

    4. 注意 :两个单元格之间的边框会出现重叠,从而使边框变粗
      通过css属性: border-collapse:collapse; 表示相邻边框合并在一起。 collapse 单词是合并的意思
      例子 table, td { border-collapse: collapse; /合并相邻边框/ }

    5. 圆角边框(CSS3) radius
      语法: border-radius:length;
      border-radius: 50%;

  4. 内边距(padding)

    1. 定义 : padding属性用于设置内边距。 是指 边框与内容之间的距离。

    2. 属性 : padding-left 左内边距 padding-right右内边距 padding-top上内边距 padding-bottom下内边距

    3. 注意 : 内容和边框 有了距离,添加了内边距。盒子会变大了。

    4. 属性的简写 :
      1个值padding:上下左右内边距
      2个值padding: 上下内边距 左右内边距
      3个值padding:上内边距 左右内边距 下内边距
      4个值padding: 上内边距 右内边距 下内边距 左内边距

    5. 内边距常用于 : 因为盒子内文本数字不一样多,靠padding撑开盒子;
      需要给文本一个相对尺寸的边框

    6. 内盒尺寸计算(元素实际大小) :盒子的实际的大小 = 内容的宽度和高度 + 内边距 + 边框

    7. 内边距产生的问题 :会撑大原来的盒子
      解决方法 :通过给设置了宽高的盒子,减去相应的内边距的值,维持盒子原有的大小

    8. 注意 :如果没有给一个盒子指定宽度, 此时,如果给这个盒子指定padding, 则不会撑开盒子。

  5. 外边距(margin)

    1. 定义 : margin属性用于设置外边距。 margin就是控制盒子和盒子之间的距离

    2. 属性 : margin-left 左外边距 margin-right右外边距 margin-top上外边距 margin-bottom下外边距

    3. 块级盒子水平居中
      可以让一个块级盒子实现水平居中必须:
      盒子必须指定了宽度(width)然后就给左右的外边距都设置为auto
      常见的写法 : margin-left: auto; margin-right: auto;
      margin: auto;
      margin: 0 auto;

    4. 文字居中和盒子居中区别 : 盒子内的文字水平居中是 text-align: center, 而且还可以让 行内元素和行内块居中对齐
      块级盒子水平居中 左右margin 改为 aut

    5. 外边距合并 : 使用margin定义块元素的垂直外边距时,可能会出现外边距的合并。

      1. 相邻块元素垂直外边距的合并 外边距塌陷
        当上下相邻的两个块元素相遇时,如果上面的元素有下外边距margin-bottom
        下面的元素有上外边距margin-top,则他们之间的垂直间距不是margin-bottom与margin-top之和
        取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并(也称外边距塌陷)。
        解决方案:尽量给只给一个盒子添加margin值
      2. 嵌套块元素垂直外边距的合并(塌陷)
        对于两个嵌套关系的块元素,如果父元素没有上内边距及边框
        父元素的上外边距会与子元素的上外边距发生合并
        合并后的外边距为两者中的较大者
      3. 解决方案:
        可以为父元素定义上边框。
        可以为父元素定义上内边距
        可以为父元素添加overflow:hidden。
    6. 盒子模型布局稳定性
      清除元素的默认内外边距(重要) : 为了更灵活方便地控制网页中的元素,制作网页时,我们需要将元素的默认内外边距清除
      代码 :* { padding:0; /* 清除内边距 / margin:0; / 清除外边距 * / }

      我们根据稳定性来分,建议如下:
      优先使用 宽度 (width) 其次 使用内边距(padding) 再次 外边距(margin)。

      原因: margin 会有外边距合并 还有 ie6下面margin 加倍的bug(讨厌)所以最后使用。
      padding 会影响盒子大小, 需要进行加减计算(麻烦) 其次 使用。
      width 没有问题(嗨皮)我们经常使用宽度剩余法 高度剩余法来做。

  6. 盒子阴影(CSS3)
    语法: box-shadow:水平阴影 垂直阴影 模糊距离(虚实) 阴影尺寸(影子大小) 阴影颜色 内/外阴影;初步了解三 CSS_第1张图片

浮动(float)

  1. 概念**:元素的浮动是指设置了浮动属性的元素
    脱离标准普通流的控制
    移动到指定位置。

  2. 作用 让多个盒子(div)水平排列成一行,使得浮动成为布局的重要手段。
    可以实现盒子的左右对齐等等…
    浮动最早是用来控制图片,实现文字环绕图片的效果。

  3. 语法 : none 元素不浮动(默认值
    left 元素向浮动
    right 元素向浮动

  4. 特点 :float 属性会让盒子漂浮在标准流的上面,所以第二个标准流的盒子跑到浮动盒子的底下了。
    浮动的盒子,把自己原来的位置漏给下面标准流的盒子,就是不占有原来位置,是脱离标准流的,我们俗称 “脱标”。
    浮动——特性 float属性会改变元素display属性。

  5. 重点:任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。 生成的块级框和我们前面的行内块极其相似。
    注意: 浮动的元素互相贴靠一起的,但是如果父级宽度装不下这些浮动的盒子, 多出的盒子会另起一行对齐

  6. 浮动(float)的扩展

    1. 浮动元素与父盒子的关系
      子盒子的浮动参照父盒子对齐
      不会与父盒子的边框重叠,也不会超过父盒子的内边距
      注意 :浮动只会影响当前的或者是后面的标准流盒子,不会影响前面的标准流。
      建议 :如果一个盒子里面有多个子盒子,如果其中一个盒子浮动了,其他兄弟也应该浮动。防止引起问题
  7. 清除浮动

    1. 为什么要清除浮动
      1因为父级盒子很多情况下,不方便给高度,但是子盒子浮动就不占有位置,最后父级盒子高度为0,就影响了下面的标准流盒子。
      2由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响
      3准确地说,并不是清除浮动,而是**清除浮动后造成的影响

    2. 清除浮动本质
      清除浮动主要为了解决父级元素因为子级浮动引起内部高度为0 的问题。清除浮动之后, 父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了

    3. 清除浮动的方法
      {clear:属性值;} clear 清除
      left不允许左侧有浮动元素(清除左侧浮动的影响)
      right不允许右侧有浮动元素(清除右侧浮动的影响)
      both同时清除左右两侧浮动的影响

    4. 额外标签法(隔墙法)
      是W3C推荐的做法是通过在浮动元素末尾添加一个空的标签例如

      ,或则其他标签br等亦可。
      优点: 通俗易懂,书写方便
      缺点: 添加许多无意义的标签,结构化较差。

    5. 父级添加overflow属性方法
      可以给父级添加: overflow为 hidden| auto| scroll 都可以实现。
      优点: 代码简洁
      缺点: 内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素。

    6. 使用after伪元素清除浮动
      :after 方式为空元素额外标签法的升级版,好处是不用单独加标签了
      使用方法:
      css
      .clearfix:after { content: “”; display: block; height: 0; clear: both; visibility: hidden; }
      clearfix {zoom: 1;} / IE6、7 专有 */
      优点: 符合闭合浮动思想 结构语义化正确
      缺点: 由于IE6-7不支持:after,使用 zoom:1触发 hasLayout。

    7. 使用双伪元素清除浮动
      .clearfix:before,.clearfix:after {
      content:"";
      display:table;
      }
      .clearfix:after {
      clear:both;
      }
      .clearfix {
      *zoom:1;
      }
      优点: 代码更简洁
      缺点: 由于IE6-7不支持:after,使用 zoom:1触发 hasLayout。

    8. 清除浮动总结

      1. 父级没高度
      2. 子盒子浮动了
      3. 影响下面布局了,我们就应该清除浮动了。

三 定位(position)

  1. 定位详解
    定位也是用来布局的,它有两部分组成:
    定位 = 定位模式 + 边偏移

  2. 边偏移
    简单说, 我们定位的盒子,是通过边偏移来移动位置的。
    在 CSS 中,通过 topbottomleftright 属性定义元素的边偏移:(方位名词)
    偏移量,定义元素相对于其父元素边线的距离

  3. 定位模式 (position)
    语法如下:
    static静态定位
    relative相对定位
    absolute绝对定位
    fixed固定定位

    1. 静态定位(static) - 了解
      静态定位是元素的默认定位方式,无定位的意思。它相当于 border 里面的none, 不要定位的时候用。
      静态定位 按照标准流特性摆放位置,它没有边偏移。
    2. 相对定位(relative) - 重要
      相对定位是元素相对于它 原来在标准流中的位置 来说的。(自恋型)
      相对于 自己原来在标准流中位置来移动的
      原来在标准流的区域继续占有,后面的盒子仍然以标准流的方式对待它。
    3. 绝对定位(absolute) - 重要
      绝对定位是元素以带有定位的父级元素来移动位置 (拼爹型)
      完全脱标 —— 完全不占位置;
      父元素没有定位,则以浏览器为准定位(Document 文档)。
      父元素要有定位
      将元素依据最近的已经定位(绝对、固定或相对定位)的父元素(祖 先)进行定位。
      定位口诀 —— 子绝父相
      子绝父相 —— 子级绝对定位,父级要用相对定位。
    4. 固定定位(fixed) - 重要
      固定定位绝对定位的一种特殊形式: (认死理型) 如果说绝对定位是一个矩形 那么 固定定位就类似于正方形
      完全脱标 —— 完全不占位置;
      只认浏览器的可视窗口 —— 浏览器可视窗口 + 边偏移属性 来设置元素的位置;
      跟父元素没有任何关系;单独使用的
      不随滚动条滚动。
  4. 定位(position)的扩展

    1. 绝对定位的盒子居中
      注意绝对定位/固定定位的盒子不能通过设置 margin: auto 设置水平居中
      left: 50%;:让盒子的左侧移动到父级元素的水平中心位置
      margin-left: -100px;:让盒子向左移动自身宽度的一半
    2. 堆叠顺序(z-index)
      在使用定位布局时,可能会出现盒子重叠的情况
      加了定位的盒子,默认后来者居上, 后面的盒子会压住前面的盒子。
      应用 z-index 层叠等级属性可以调整盒子的堆叠顺序。如下图所示:
      1. z-index 的特性如下:
        属性值正整数负整数0,默认值是 0,数值越大,盒子越靠上;
        如果属性值相同,则按照书写顺序,后来居上
        数字后面不能加单位
        注意z-index 只能应用于相对定位绝对定位固定定位的元素,其他标准流浮动静态定位无效。
  5. 定位改变display属性
    display 是 显示模式, 可以改变显示模式有以下方式:
    可以用inline-block 转换为行内块
    可以用浮动 float 默认转换为行内块(类似,并不完全一样,因为浮动是脱标的)
    绝对定位和固定定位也和浮动类似, 默认转换的特性 转换为行内块。
    所以说, 一个行内的盒子,如果加了浮动固定定位绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等。

    1. 注意:
      浮动元素、绝对定位(固定定位)元素的都不会触发外边距合并的问题。 (我们以前是用padding border overflow解决的)
      也就是说,我们给盒子改为了浮动或者定位,就不会有垂直外边距合并的问题了。

你可能感兴趣的:(学习)