0


CSS 学习笔记(二)

前言

因本学期选修了前端开发的课程,在此利用隔离期间的一点时间回顾了一些前端开发的基础知识,为后续的课程设计和相关比赛打下基础。

俗话说:好记性不如烂笔头。再好的记性也总有忘记的时候,而笔记的好处之一便在于信息记录的长久性,你可以通过不断的复习、熟悉来加强理解,深化记忆,从而达到持久记忆的效果。

本篇文章主要记录了CSS的部分进阶内容,包括CSS的三大特性、盒子模型、圆角边框、盒子阴影、浮动以及定位的相关代码、应用以及注意事项等,目的主要是为了帮助自己记录学习,同时也把文章分享出来,供大家参考学习。

本篇文章基于该视频:

黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程_哔哩哔哩_bilibili

1、CSS三大特性

1.1 层叠性

相同选择器设置相同的样式,此时一个样式就会覆盖另一个冲突的样式。层叠性主要解决样式冲突的问题

<style>
    div {
        color: red;
    }
    div {
        color: green;
    }
</style>

<div>长江后浪推前浪</div>

层叠性原则:

  • 样式冲突,遵循的原则是就近原则
  • 样式不冲突,不会层叠

1.2 继承性

...
    <style>
        div {
            color: pink;
            font-size: 20px; /* p标签继承父元素样式 */
        }
    </style>
...
    <div>
        <p>龙生龙,凤生凤,老鼠的孩子会打洞</p>
    </div>
...
  • CSS中的继承:子标签会继承父标签里面的某些样式,如文本颜色和字号等
  • 子元素继承父元素的样式(text-,font-,line-这些元素开头的可以继承,以及color属性)

行高的继承:

body {
        font:12px/1.5 Microsoft YaHei;
}
  • 如果子元素没有设置行高,则会继承父元素的行高为1.5
  • 此时子元素的行高是:当前子元素的文字大小 * 1.5

1.3 优先级

当同一个元素指定多个选择器,就会有优先级的产生

  • 选择器相同,则执行层叠性
  • 选择器不同,则根据选择器权重执行
    选择器权重继承或者 *0,0,0,0元素选择器(标签选择器)0,0,0,1类选择器,伪类选择器0,0,1,0ID选择器0,1,0,0行内样式style=""1,0,0,0!important重要的无穷大
    ...
      <style>
          /* - 类选择器权重为10
             - 伪类选择器权重为10
             - ID选择器权重为100 */
          div {
              color: pink!important;
          }
          .test {
              color: red;
          }
          #demo {
              color: purple;
          }
      </style>
    ...
      <div class="test" id="demo" style="color: green;">你笑起来真好看</div>
    ...
    

1.4 优先级注意点

  • 等级判断从左向右,如果某一位数值相同,则判断下一位数值
  • 继承的权重是0,如果该选手没有直接选中,不管父元素权重多高,子元素得到权重都是0
  • 简单记忆法:通配符和继承权重为0,标签选择器为1,类(伪类)选择器为10,id选择器为100,行内样式选择器为1000,!important无穷大

1.5 权重的叠加

...
    <style>
        /* 复合选择器会有权重叠加的问题 */
        /* 权重虽然会叠加,但是永远不会有进位 */
        /* li 的权重是0,0,0,1   1 */
        li {
            color: red;
        }

        /* ul li 权重 0,0,0,1 + 0,0,0,1 = 0,0,0,2   2 */
        ul li {
            color: green;
        }

        /* .nav li 权重   0,0,1,0 + 0,0,0,1 = 0,0,1,1   11 */
        .nav li {
            color: pink;
        }
    </style>
...
    <ul class="nav">
        <li>大猪蹄子</li>
        <li>大肘子</li>
        <li>猪尾巴</li>
  </ul>
...

2、盒子模型

页面布局要学习三大核心

  • 盒子模型
  • 浮动
  • 定位

盒子模型的组成:

  • border(边框)
  • content(内容)
  • padding(内边距)
  • margin(外边距)

2.1 边框(border)

border : borde-width || border-style || border-color

属性作用border-width定义边框粗细,单位是pxborder-style边框的样式border-color边框颜色

2.1.1 边框样式(border-style)

边框样式border-style可以设置如下值:

  • none:没有边框即忽略所有边框的宽度(默认值)
  • solid:边框为单实线(最为常用的)
  • dashed: 边框为虚线
  • dotted:边框为点线
/* 边框简写 */
border: 1px soilid red;

/* 边框分开写法 */
border-top: 1px solid red;

2.1.2 表格细线边框(border-collapse)

border-collapse : collapse;
  • border-collapse 属性控制浏览器绘制表格边框的方式,它控制相邻单元格的边框
  • border-collapse 表格的细线边框

2.1.3 边框影响盒子实际大小

  • 测量盒子大小的时候,不量边框
  • 如果测量的时候包含了边框,则需要 width/height 减去边框宽度

2.2 内边距(padding)

padding 属性用于设置内边距,即盒子边框与内容之间的距离
属性作用padding-left左内边距padding-right右内边距padding -top上内边距padding-bottom下内边距
padding 属性(简写属性)可以有一到四个值
值的个数表达意思padding : 5px;1个值,代表上下左右都有5像素内边距padding :5px 10px; 2个值,代表上下内边距是5像素,左右内边距是10像素padding: 5px 10px 20px;3个值,代表上内边距5像素,左右内边距10像素,下内边距20像素padding :5px 10px 20px 30px4个值,上是5像素,右是10像素,下20像素,左是30像素,顺时针

2.2.1 影响盒子大小

当我们给盒子指定 padding 值之后,发生了2件事情:

  • 内容和边框有了距离,添加了内边距
  • padding影响了盒子实际大小

也就是说,如果盒子已经有了宽度和高度,此时再指定内边框,会撑大盒子

解救方案

如果保证盒子跟效果图大小保持一致,则让 width/height 减去多出来的内边距大小即可

但是,有时候 padding 影响盒子是有好处的,比如我们要做导航栏:

因为每个导航栏里面的字数不一样多,我们可以不用给每个盒子宽度了,直接给 padding 最合适

2.2.2 不影响盒子大小

如果盒子本身没有指定width/height属性,则此时padding不会撑开盒子大小

2.3 外边距(margin)

margin(外边距)属性用于设置外边距,即控制盒子和盒子之间的距离
属性作用margin-left左外边距margin-right右外边距margin-top上外边距margin-bottom下外边距

2.3.1 外边距典型应用

外边距可以让块级盒子水平居中,但是必须满足两个条件:

  • 盒子必须制定了宽度(width)
  • 盒子左右的外边距都设置为 auto
.header {
    width: 960px;
    margin: 0 auto;
}

左右的外边距都设置为 auto 有三种写法:

  • margin-left: auto; margin-right: auto;
  • margin: auto;
  • margin: 0 auto;

注意:以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加 text-align: center 即可

2.3.2 外边距合并

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

主要有两种情况:

  • 相邻块元素垂直外边距的合并
  • 嵌套块元素垂直外边距的塌陷

**①相邻块元素垂直外边距的合并 **

当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距 margin-bottom,下面的元素有上外边距 margin-top ,则他们之间的垂直间距不是 margin-bottom 与 margin-top 之和。取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并。

解决方案:

尽量只给一个盒子添加 margin 值

**②嵌套块元素垂直外边距的塌陷 **

对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值

解决方案:

  • 可以为父元素定义上边框
  • 可以为父元素定义上内边距
  • 可以为父元素添加 overflow: hidden

**③清除内外边距 **

网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们在布局前,首先要清除下网页元素的内外边距。

* {
    padding: 0;
    margin: 0;
}

注意:行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。但是转换为块级和行内块元素就可以了

小技巧

去掉 li 前面的项目符号(小圆点)

list-style: none;

3、圆角边框

border-radius 属性用于设置元素的外边框圆角

border-radius: length;
  • 参数值可以是数值或百分比的形式
  • 如果是正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写为50%
  • 如果是一个矩形,设置为高度的一半就可以
  • 该属性是一个简写属性,可以跟四个值,分别代表左上角,右上角,右下角,左下角
...
    <style>
        div {
            width: 300px;
            height: 300px;
            background-color: pink;
            /* border-radius: 150px; */
            /* 50% 就是宽度和高度的一半 */
            border-radius: 50%;
        }
    </style>
...
    <div></div>
...

4、盒子阴影

box-shadow: h-shadow v-shadow blur spread color inset;

值描述h-shadow必需。水平阴影的位置,允许负值v-shadow必需。垂直阴影的位置,允许负值blur可选。模糊距离。spread可选,阴影的尺寸。color可选,阴影的颜色。inset可选,将外部阴影(outset)改为内部阴影

  • 模糊距离:影子的虚实
  • 阴影尺寸:影子的大小

注意:

  • 默认的是外阴影(outset),但是不可以在后面写这个单词,否则导致阴影无效
  • 盒子阴影不占用空间,不会影响其他盒子排列
...
    <style>
        div {
            width: 300px;
            height: 200px;
            background-color: pink;
            margin: 100px auto;
            box-shadow: 10px 10px 10px 10px rgba(0, 0, 0, .3);
        }
    </style>
...
    <div></div>
...

5、文字阴影(了解)

值描述h-shadow必需。水平阴影的位置,允许负值v-shadow必需。垂直阴影的位置,允许负值blur可选。模糊距离color可选,阴影的颜色。

6、浮动

6.1 浮动的典型应用

  • 浮动最典型的应用:可以让多个块级元素一行内排列显示
  • 网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动

float 属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘

选择器 {
    float: 属性值;
}

属性值描述none元素不浮动left元素向左浮动right元素向右浮动

  • 网页布局的第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动
  • 网页布局第二准则:先设置盒子大小,之后设置盒子的位置

6.2 浮动的特性

①设置了浮动(float)的元素的最重要的特性:

  • 脱标:浮动元素会脱离标准流
  • 浮动的盒子不再保留原先的位置

②如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列

  • 浮动的元素是相互贴靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐

③浮动元素会具有行内块元素特性

任何元素都可以浮动。不管原先是什么模式的元素,添加浮动之后都具有行内块元素相似的特性。

  • 如果块级盒子没有设置宽度,默认宽度和父级一样宽,但是添加浮动后,它的大小根据内容来决定
  • 如果行内元素有了浮动,则不需要转换块级\行内块元素就可以直接给高度和宽度
  • 浮动的盒子中间是没有缝隙的,是紧挨着一起的

6.3 浮动元素经常和标准流父级搭配使用

为了约束浮动元素位置, 我们网页布局一般采取的策略是:

先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置

6.4 浮动布局注意点

  • 先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置
  • 一个元素浮动了,理论上其余兄弟元素也要浮动。一个盒子里面有多个子盒子,如果其中一个盒子浮动了,那么其他兄弟也应该浮动
  • 浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流

6.5 清除浮动

6.5.1 为什么要清除浮动?

  • 由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为0时,就会影响下面的标准流盒子。
  • 由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响
  • 理想中的状态,让子盒子撑开父亲,有多少孩子,我父盒子就有多高

6.5.2 清除浮动的本质

  • 清除浮动的本质是清除浮动元素造成的影响
  • 如果父盒子本身有高度,则不需要清除浮动
  • 清除浮动之后,父级就会根据浮动的子盒子自动检测高度,父级有了高度,就不会影响下面的标准流了
选择器 {
    clear: 属性值;
}

属性值描述left不允许左侧有浮动元素(清除左侧浮动的影响)right不允许右侧有浮动元素(清除右侧浮动的影响)both同时清除左右两侧浮动的影响

  • 实际生活中,几乎只用clear:both;
  • 清除浮动的策略是:闭合浮动

6.5.3 清除浮动的方法

  1. 额外标签法也称隔墙法,是W3C推荐做法
  2. 父级添加 overflow 属性
  3. 父级添加 after 伪元素
  4. 父级添加双伪元素

**①额外标签法 **

  • 额外标签法会在浮动元素末尾添加一个空的标签,例如:
    ,或者其他标签(如
    等)
  • 注意:要求这个新的空标签必须是块级元素
  • 优点:通俗易懂,书写方便
  • 缺点:添加许多无意义的标签,结构化较差
  • 实际工作可能会遇到,但是不常用

**②overflow **

  • 可以给父级添加overflow属性,将其属性值设置为hidden,auto或scroll
  • 优点:代码简洁
  • 缺点:无法显示溢出的部分

③after伪元素法

:after 方式是额外标签法的升级版。也是给父元素添加

.clearfix:after {
    content: "";
    display: block;
    height: 0;
    clear: both;
    visibility: hidden;
}
.clearfix {
      /* IE6,7专有*/
      *zoom : 1; 
}
  • 优点:没有增加标签,结构更简单
  • 缺点:需要照顾低版本浏览器
  • 代表网站:百度、淘宝、网易等

④双伪元素

也是给父元素添加

.clearfix:before,.clearfix:after{
   content:"";
   display:table;
}
.clearfix:after {
     clear:both;
}
.clearfix {
  *zoom:1;
}
  • 优点:代码更简洁
  • 缺点:需要照顾低版本浏览器
  • 代表网站:小米、腾讯等

6.5.4 清除浮动总结

清除浮动方式优点缺点额外标签法(隔墙法)通俗易懂,书写方便 添加许多无意义的标签,结构化较差父级overflow:hidden;书写简单溢出隐藏父级after伪元素结构语义化正确由于IE6-7不支持:after,兼容性问题父级双伪元素结构语义化正确由于IE6-7不支持:after,兼容性问题

7、定位

7.1 定位的组成

定位:将盒子定在某一个位置,所以定位也是在摆放盒子,按照定位的方式移动盒子

定位 = 定位模式 + 变偏移

定位模式用于指定一个元素在文档中的定位方式。边偏移则决定了该元素的最终位置

7.1.1 定位模式

定位模式决定元素的定位方式 ,它通过 CSS 的position 属性来设置,其值可以分为四个
值语义static静态定位relative相对定位absolute绝对定位fixed固定定位

7.1.2 边偏移

边偏移就是定位的盒子移动到最终位置
边偏移属性示例描述toptop: 80px顶端偏移量,定义元素相对于其父元素的上边线的距离bottombottom: 80px底部偏移量,定义元素相对于其父元素的下边线的距离rightright: 80px右侧偏移量,定义元素相对于其父元素右边线的距离leftleft: 80px左侧偏移量,定义元素相对于其父元素左边线的距离

7.2 静态定位static(了解)

选择器 {
    position: static;
}
  • 静态定位是元素的默认定位方式,无定位的意思
  • 静态定位按照标准流特性摆放位置,它没有边偏移

7.3 相对定位(relative)

相对定位是元素在移动位置的时候,是相对于它原来的位置来说的

选择器 {
    position: relative;
}

特点:

  • 它是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)
  • 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待。(不脱标,继续保留原来位置)
  • 因此,相对定位并没有脱标,它最典型的应用是给绝对定位当爹的。
...
    <style>
        div {
            width: 200px;
            height: 200px;
        }
        .box1 {
            position: relative;
            top: 100px;
            left: 100px;
            background-color: pink;
        }
        .box2 {
            background-color: red;
        }
    </style>
...
    <div class="box1"></div>
    <div class="box2"></div>
...

7.4 绝对定位(absolute)

绝对定位是元素在移动位置的时候,是相对于它的祖先元素来说的

选择器 {
    position: absolute;
}

特点:

  • 如果没有祖先元素或者祖先元素没定位,则以浏览器为准进行定位(Document 文档)
  • 如果祖先元素父级有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素为参考点移动位置
  • 绝对定位不再占用原先的位置(脱标)
  • 所以绝对定位是脱离标准流的

7.5 子绝父相

意思:子级使用绝对定位,父级则需要相对定位

  • 子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子
  • 父盒子需要加定位限制子盒子在父盒子内显示
  • 父盒子布局时,需要占有位置,因此父亲只能是相对定位

总结:因为父级需要占有位置,因此是相对定位,子盒子不要占有位置,则是绝对定位

7.6 固定定位(fixed)

固定定位是元素固定于浏览器的可视区的位置。主要使用场景: 可以在浏览器页面滚动时元素的位置不会改变

选择器 {
    position: fixed;
}

** 特点:**

  • 以浏览器的可视窗口为参照点移动元素
  • 跟父元素没有任何关系
  • 不随滚动条滚动
  • 固定定位不再占有原先的位置(脱标)

总结:固定定位也是脱标的,其实固定定位也可以看做是一种特殊的绝对定位。

7.6.1 固定定位小技巧

固定定位小技巧:固定在版心右侧位置

小算法

  1. 让固定定位的盒子left:50%.走到浏览器可视区(也可以看作版心)的一半位置
  2. 让固定定位的盒子margin-left:版心宽度一半的距离。多走版心宽度一半的位置就可以让固定定位的盒子贴着版心右侧对齐了
...
    <style>
        .w {
            width: 800px;
            height: 1400px;
            background-color: pink;
            margin: 0 auto;
        }
        .fixed {
            position: fixed;
            left: 50%;
            margin-left: 405px;
            width: 50px;
            height: 150px;
            background-color: skyblue;
        }
    </style>
...
    <div class="fixed"></div>
    <div class="w">版心盒子 800像素</div>
...

7.7 粘性定位sticky(了解)

粘性定位可以被认为是相对定位和固定定位的混合

选择器 {
    position:sticky;  
    top: 10px;
}

特点:

  • 以浏览器的可视窗口为参照点移动元素(固定定位特点)
  • 粘性定位占有原先的位置(相对定位的特点)
  • 必须添加top,left,right,bottom其中一个才有效

总结:跟页面滚动搭配使用。 兼容性较差,IE 不支持。

7.8 定位总结

定位模式是否脱标移动位置是否常用static静态定位否 不能使用边偏移 很少relative相对定位否(占有位置)相对于自身位置移动常用absolute绝对定位 是(不占有位置)带有定位的父级常用fixed固定定位是(不占有位置)浏览器可视区常用sticky粘性定位否(占有位置)浏览器可视区
sticky 否(占有位置) 浏览器可视区

  • 一定要记住相对定位,固定定位,绝对定位的两个大特点:1.是否占有位置(脱标否)2.以谁为基准点移动
  • 重点学会子绝父相(儿子绝对定位,父亲必须相对定位),开发中最常用

7.9 定位叠放次序z-index

在使用定位布局时候,可能会出现盒子重叠的情况,此时,可以用 z-index 来控制盒子的前后次序(z轴)

选择器 {
    z-index: 1; 
}
  • 数值可以是正整数,负整数或者0,默认是auto,数值越大,盒子越靠上
  • 如果属性值相同,则按照书写顺序,后来居上
  • 数字后面不能加单位
  • 只有定位的盒子才有 z-index 属性
...
    <style>
        .box {
            position: absolute;
            top: 0;
            left: 0;
            width: 200px;
            height: 200px;
        }
        .xiongda {
            background-color: red;
            z-index: 1;
        }
        .xionger {
            background-color: green;
            left: 50px;
            top: 50px;
            z-index: 2;
        }
        .qiangge {
            background-color:blue;
            left: 100px;
            top: 100px;

        }
    </style>
...
    <div class="box xiongda">熊大</div>
    <div class="box xionger">熊二</div>
    <div class="box qiangge">光头强</div>
...

7.10 定位拓展

7.10.1 绝对定位的盒子居中

①绝对定位的盒子居中

加了绝对定位的盒子不能通过 margin: 0 auto 水平居中,但是可以通过以下计算方法实现水平和垂直居中

  1. left: 50%; 让盒子的左侧移动到父级元素的水平中心位置
  2. margin-left: -100px; 让盒子向左移动自身宽度的一半
...
    <style>
        .box {
            position: absolute;
            /* 1. left 走 50%  父容器宽度的一半 */
            left: 50%;
            /* 2. margin 负值 往左边走 自己盒子宽度的一半 */
            margin-left: -100px;
            top: 50%;
            margin-top: -100px;
            width: 200px;
            height: 200px;
            background-color: pink;
            /* margin: 0 auto; */
        }

    </style>
...
    <div class="box"></div>
...

7.10.2 定位特殊性

绝对定位和固定定位也和浮动类似

  • 行内元素添加绝对或者固定定位,可以直接设置高度和宽度
  • 块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小

7.10.3 脱标的盒子不会触发外边距塌陷

浮动元素、绝对定位(固定定位)元素都不会触发外边距合并的问题

7.10.4 绝对定位(固定定位)会完全压住盒子

  • 浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片)
  • 但是绝对定位(固定定位) 会压住下面标准流所有的内容
  • 浮动之所以不会压住文字,因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素
...
    <style>
        .box {
            /* float: left; */
            position: absolute;
            width: 150px;
            height: 150px;
            background-color: pink;
        }
    </style>
...
    <div class="box"></div>
    <p>阁下何不同风起,扶摇直上九万里</p>
...
标签: css 前端

本文转载自: https://blog.csdn.net/m0_60875396/article/details/127003788
版权归原作者 Andrew Xiao 所有, 如有侵权,请联系我们删除。

“CSS 学习笔记(二)”的评论:

还没有评论