01-CSS

前言1-CSS对HTML元素分类

css元素分为三种:块级元素、行内元素和行内块元素。

1.块级元素:设置display:block就是将元素显示为块级元素。

  • 独占一行。
  • 高度,行高、外边距以及内边距都可以控制。
  • 宽度默认是容器的100%。
  • 以容纳内联元素和其他块元素。

...

      、、

      2.行内元素:块级元素也可以通过代码display:inline将元素设置为行内元素。

      • 多个元素在同一行。
      • 默认宽度就是它本身内容的宽度。
      • 行内元素只能容纳文本或则其他行内元素。(a特殊)
      • 可以通过设置display属性变成其他元素。
      • 高、宽无效,但水平方向的padding和margin可以设置,垂直方向的无效。
        垂直居中:
        父元素固定高度,子元素单行,可以设置line-height与父元素同高。
        父元素固定高度,子元素多行,可以设置弹性布局。
      div{
          border: dashed red;
          width: 300px;
          height: 300px;
          text-align: center;
          display:flex;
          flex-direction:column;
          justify-content:center;
         
      }
      span{
          border: dashed rgb(0, 17, 255);
         
      }
      

      注意:

      • 只有文字才能组成段落,因此p里面不能放块级元素,同理还有这些标签h1,h2,h3,h4,h5,h6,dt,他们都是文字类块级标签,里面不能放其他块级元素。
      • 链接里面不能再放链接。

      3.行内块状元素:就是同时具备行内元素、块状元素的特点,代码display:inline-block就是将元素设置为状元素。

      • 同时具有行内元素和块级元素的特点。
      • 和其他元素在同一行。
      • 高、宽和边距可以设置。
      
      
      HTML标签嵌套规则

      前言2-CSS样式特性

      CSS的样式有层叠和继承特性。

      层叠特性:CSS的层叠依据选择器的权重:

      • !important的作用是提升优先级,比内联样式的优先级还高。
      • 第一等:代表内联样式,如: style=””,权值为1000。
      • 第二等:代表ID选择器,如:#content,权值为0100。
      • 第三等:代表类,伪类和属性选择器,如.content,权值为0010。
      • 第四等:代表类型选择器和伪元素选择器,如div p,权值为0001。
      • 通配符、子选择器、相邻选择器等的。如*、>、+,权值为0000。
      • 继承的样式没有权值。
      权重比较规则:
      - 1,0,0,0 > 0,99,99,99。也就是说从左往右逐个等级比较,前一等级相等才往后比。
      - 无论是行间、内部和外部样式,都是按照这个规则来进行比较。
      - 在权重相同的情况下,后面的样式会覆盖掉前面的样式。
      - 通配符、子选择器、相邻选择器等的。虽然权值为0000,但是也比继承的样式优先。
      - 复合选择器的权重会叠加。
      

      继承特性:在 W3C 规范的每一个属性的介绍中,都会有一个 "inherited" 项,如果值为 "yes",表示该属性是一个可继承的属性;如果值为 “no”,表示该属性是一个不可继承的属性。

      不可继承的:display、margin、border、padding、background、
        height、min-height、max-height、width、min-width、max-width、
        overflow、position、left、right、top、bottom、z-index、float、clear、
        table-layout、vertical-align、page-break-after、page-bread-before和unicode-bidi。
      所有元素可继承:visibility和cursor。
      内联元素可继承:letter-spacing、word-spacing、white-space、
        line-height、color、font、font-family、font-size、font-style、font-variant、
        font-weight、text-decoration、text-transform、direction。
      终端块状元素可继承:text-indent和text-align。
      列表元素可继承:list-style、list-style-type、list-style-position、list-style-image。
      

      前言3-CSS常见单位

      相对长度
      绝对长度

      前言4-CSS书写规范

      书写规范

      一、选择器

      1.1 标签选择器

      html

      
          

      你好

      超链接

      css:注意样式会重叠。

      h1{
          color: rgb(47, 209, 47);
      }
      h1{
          background: beige;
      }
      a {
          text-decoration: none;
      }
      
      效果

      1.2 类选择器

      html

      
         
      成功
      失败

      css

      #success{
          border: solid 1px green;
      }
      #error {
          border: solid 1px red;
      }
      .mb10{
          margin-bottom: 10px;
      }
      
      效果

      1.3 ID选择器

      html

      
         
      成功
      失败

      css:ID选择器,推荐给唯一的属性设置样式。

      #success{
          border: solid 1px green;
      }
      #error {
          border: solid 1px red;
      }
      
      效果

      1.4 结构选择器

      html

      
         

      H1

      H2

      H2

      1.4.1 后代选择器

      /* 后代选择器 */
      main article h2{
          color: rgb(214, 49, 71);
      }
      
      效果

      1.4.2 子代选择器

      main article > h2{
          color: rgb(41, 44, 207);
      }
      
      效果

      1.4.3 兄弟选择器

      
         

      H1

      H2

      H2

      H2

      article h1 ~ h2{
          color: rgb(41, 44, 207);
      }
      
      ~效果
      article h1+h2{
          color: rgb(41, 44, 207);
      }
      
      +效果

      1.5 属性选择器

      html

      
          

      H1

      H2

      H2

      H2

      css

      h2[title="abc"]{
          color: rgb(209, 47, 47);
      }
      
      效果

      1.6 伪类选择器

      伪类:用于定义元素的特殊状态。

      • 动态伪类选择器:E: linkE: visitedE: activeE: hoverE: focus
      • 目标伪类选择器: E: target;用来匹配页面的URI中某个标识符的目标元素。
      • 语言伪类选择器:E: lang;用来匹配使用指定语言的元素。
      • 元素状态伪类选择器:E: checkedE: disabled
      • 结构伪类选择器:
        : nth-child: nth-last-child: nth-of-type: nth-last-of-type: first-child: last-child: only-child: first-of-type: last-of-type: only-of-type: root: empty
      • 否定伪类选择器:E: not(F) 匹配所有除F外的E元素。
        伪类
      伪元素

      二、样式

      2.0 通用样式属性

      用户外观(User-interface) 属性
      线框属性
      多列属性
      尺寸属性
      表格属性
      列表属性
      背景属性
      内容生成属性
      CSS函数

      2.1.字体样式

      • 使用font属性也可以定义字体类型。
        font:font-style || font-variant || font-weight || font-size || line-height || font-family
      • 定义斜体字体:CSS使用font-style属性来定义字体斜体效果。
      • 定义字体大小写:CSS使用font-variant属性来定义字体大小效果。
      • 定义字体粗细:CSS使用font-weight属性来定义字体粗细。
      • 定义字体大小:CSS使用font-size属性来定义字体大小。
        font-size:xx-small | x-small | small | medium | large | x-large | xx-large | larger | smaller | length
      • 定义行高 :CSS使用line-height属性来设置以百分比计的行高。
      • 定义下划线:CSS使用text-decoration属性来定义字体下划线效果。
        text-decoration:none || underline || blink || overline || line-throuth
      • 定义字体颜色:CSS使用color属性来定义字体颜色。
        字体属性

      2.2 文本样式

      CSS在命名属性时,特意使用了font前缀和text前缀来区分两类不同性质的属性。

      • 定义缩进:CSS使用text-indent属性定义首行缩进。
      • 定义文本水平对齐:CSS使用text-align属性来定义文本的水平对齐方式。
        text-align属性只能够设计文本的水平对齐方式,而对于块状元素的水平对齐还需要使用CSS的margin属性。在标准化设计中,如果当块状元素左右边界都被设置为自动式,则块状元素将居中显示。
      • 定义文本垂直对齐:在传统布局中,一般元素不支持垂直对齐效果,不过在表格中可以实现。CSS使用vertical-align属性来定义文本垂直对齐问题。
        vertical-align:auto | baseline | sub | super | top | text-top | middle | bottom | text-bottom | length
        vertical-align不支持块状元素对齐,只有当包含框显示为单元格时才有效。
      • 定义字距和词距:CSS使用letter-spacing属性来定义字距,使用word-spacing属性来定义词距。
      • 定义行高:CSS使用line-height属性定义行高。一般行高的最佳设置范围为1.2~1.8em,遵循字体越大,行高越小的原则来定义段落的具体行高。
      • 处理文本溢出
      white-space: nowrap;     --- 文本不换行 
      overflow: hidden;           --- 溢出部分隐藏
      text-overflow:ellipsis;     -- 处理异常部分...
      
      文本属性

      三、盒子模型

      盒子模型

      折叠外边距:在CSS当中,相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距。这种合并外边距的方式被称为折叠,并且因而所结合成的外边距称为折叠外边距。
      当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。而左右外边距不合并。

      折叠及解决方案

      注释:只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。参考:https://www.jianshu.com/p/5f18f12cd162

      两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。
      两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。
      两个外边距一正一负时,折叠结果是两者的相加的和。
      

      产生折叠的原因:根据w3c规范,两个margin是邻接的必须满足以下条件

      1.必须是处于常规文档流(非float和绝对定位)的块级盒子,并且处于同一个BFC当中。
      2.没有线盒,没有空隙(clearance,下面会讲到),没有padding和border将他们分隔开。
      3.都属于垂直方向上相邻的外边距,可以是下面任意一种情况:
        a:元素的margin-top与其第一个常规文档流的子元素的margin-top。
        b:元素的margin-bottom与其下一个常规文档流的兄弟元素的margin-top。
        c:height为auto的元素的margin-bottom与其最后一个常规文档流的子元素的margin-bottom。
        d:高度为0并且最小高度也为0,不包含常规文档流的子元素,并且自身没有建立新的BFC的元素的margin-top和margin-bottom。
      

      3.1 CSS盒子属性

      盒子属性
      CSS3box新属性

      3.2 CSS边框和轮廓属性

      边框和轮廓属性

      3.3 CSS边距属性

      边距属性

      3.4 CSS填充属性

      padding:父元素设置宽和高,子元素没有设置宽和高,则子元素在设置padding属性的时候,子元素的宽和高与父元素保持一致。

      填充属性
      清除内外边距

      四、CSS布局

      Box是CSS布局的基本单位。传统布局方式:标准流、浮动、定位。

      Box是CSS布局的对象和基本单位直观点来说,就是一个页面是由很多个Box组成的。元素的类型和display属性,决定了这个Box的类型。 不同类型的Box, 会参与不同的 Formatting Context(一个决定如何渲染文档的容器),因此Box内的元素会以不同的方式渲染。

      Formatting context 是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。最常见的 Formatting context 有 Block fomatting context (简称BFC)和 Inline formatting context (简称IFC)。

      BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。

      BFC的特性:
      1.内部的Box会在垂直方向上一个接一个的放置。
      2.垂直方向上的距离由margin决定。
      3.bfc的区域不会与float的元素区域重叠。
      4.计算bfc的高度时,浮动元素也参与计算。
      5.bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素。

      形成BFC的条件:
      1.浮动元素,float除none以外的值。
      2.定位元素,position(absolute,fixed)。
      3.display为以下其中之一的值 inline-block,table-cell,table-caption。
      4.overflow除了visible以外的值(hidden,auto,scroll)。

      定位属性
      显示和隐藏

      4.1 浮动布局

      浮动定位:解决了多个块级元素能在一行内显示。

      文档流是文档中可显示对象在排列时所占用的位置。而标准文档流指的是在不使用其他的与排列和定位相关的特殊CSS规则时,各种元素的排列规则。标准流里面的限制非常多,导致很多页面效果无法实现。如果我们现在就要并排、并且就要设置宽高,就要使文档脱离标准流。

      准则-1

      浮动示例:解决div独占一行。
      html

      
         
      DIV1
      DIV2

      CSS1

       div {
           border: solid 2px rgb(219, 22, 22);
           width: 200px;
           /* float: left; */
      }
      
      效果1

      CSS2

       div {
           border: solid 2px rgb(219, 22, 22);
           width: 200px;
           float: left; 
      }
      

      效果2

      特点:
      1.将元素排除在文档流之外,即元素脱离文档流,不受默认排列方式(从上到下或者从左往右)的控制。
      2.浮动起来的元素将不再占用页面的空间。(元素从浏览器上原地拔起,从上往下依旧能看到浮动元素),有可能会压住其他的元素。
      3.元素会停靠在包含框(父层元素)的左边或左边,或者停靠在已经浮动的元素的左边或者右边。
      4.元素无论怎么浮动,最终还是在包含框之内。
      5.块级浮动之后,宽度自适应不是100%。
      6.行内元素浮动后,除了具备以上特点,它将变成块级元素,行内元素设置浮动多数是为了改变宽和高。

      推荐用法
      浮动弊端
      清除浮动本质
      清除浮动

      4.2 定位布局

      按照定位(定位模式+边偏移)的方式移动Box。子绝父相。

      css中的position属性,position有四个值:absolute/relative/fixed/static(绝对/相对/固定/静态(默认))通过定位属性可以设置一些不规则的布局,使用TLBR(top,left,bottom,right)来调整元素位置。

      • static:没有特别的设定,遵循基本的定位规定,不能通过z-index进行层次分级,在普通流中,各个元素默认的属性。
      • relative:对象不可层叠、不脱离文档流,参考自身静态位置通过 top,bottom,left,right 定位。
      • absolute: 脱离文档流,通过 top,bottom,left,right 定位。选取其最近一个最有定位设置的父级对象进行绝对定位,如果对象的父级没有设置定位属性,absolute元素将以body坐标原点进行定位。
      • fixed:这里所固定的参照对像是可视窗口而并非是body或是父级元素。使用了fixed的元素不会随着窗口的滚动而滚动。属于absolute的子集。
        定位的特殊性-1

        定位的特殊性-2
      总结

      4.3 弹性盒布局

      弹性盒模型是css3的一种新的布局方式,是一种当前页面需要适应不同的屏幕大小及设备类型时确保拥有恰当的行为的布局方式。可以代替浮动。

      • 弹性容器:display:flex 设置块级弹性容器;display:inline-flex设置行内弹性容器。
      • 弹性元素:弹性容器的子元素。一个元素可以同时使弹性容器和弹性元素。
      弹性盒属性

      4.4 栅格系统

      Flex 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局。Grid 布局远比 Flex 布局强大;兼容性不如Flex。
      Grid 布局的属性分成两类。一类定义在容器上面,称为容器属性;另一类定义在项目上面,称为项目属性。

      • 采用网格布局的区域,称为"容器"(container)。容器内部采用网格定位的子元素,称为"项目"(item)。
      • 容器里面的水平区域称为"行"(row),垂直区域称为"列"(column)。
      • 行和列的交叉区域,称为"单元格"(cell)。
      • 划分网格的线,称为"网格线"(grid line)。水平网格线划分出行,垂直网格线划分出列。


        网格布局

      你可能感兴趣的:(01-CSS)