CSS深入学习 | 青训营笔记

103 阅读5分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2天

一、本堂课重点内容:

1.CSS的基本结构

image-20230115225944331

2.CSS工作原理

image-20230115230029808

3.1.行内引入

使用style标签进行引入

 <span style="font-size: 20px;color: darkmagenta;background: #000;">内容</span>

2.内嵌式

将css样式代码抽取出来 ,使用一对style标签定义css样式

 <html>
     <head>
         <meta charset="utf-8">
         <title></title>
         <style>
             span{                                ------span选择器也可以是h1tdbody等等
                 font-size: 20px;color: darkmagenta;background: #000;
             }
         </style>
     </head>
     <body>
         <span >1我申请</span>
     </body>
 </html>

3.链接式

行内式的作用范围只有一行

内嵌式作用域为本业面内选择器所选择的标签

链接式可作用于其他页面

 .css
 span{
     font-size: 20px;color: darkmagenta;background: #000;
 }
 <html>
     <head>
         <meta charset="utf-8">
         <title></title>
         <link rel="stylesheet" href="01.css">
     </head>
     <body>
         <span >1我申请</span>
     </body>
 </html>

2.选择器

1.三大选择器

1.标签名选择器

标签{}

2.id选择器

#id{} 定位到页面上的唯一标签 id定义不能有空格和特殊符号 不能以数字为开头

3.类选择器

.class{} 一般body中的所有标签都有class属性值,不同标签可以有相同属性值

2.其他选择器

1.层级选择器

 <!DOCTYPE html>
 <html>
     <head>
         <meta charset="utf-8">
         <title></title>
         <style>
              span p{
                 font-size: 20px;color: darkmagenta;background: #000;
             }
         </style>
     </head>
     <body>
         <span >今日全国新冠确诊143</span>
         <span><p>广东新增1</p></span>
     </body>
 </html>

2.属性选择器

标签[属性]{…}

             inputn[password]{
                 width: 30px;
                 color: aliceblue;
             }
 ​
 ​
 <input type="password"/>

3.分组选择器

.class,#id,标签,….{}

3.伪类选择器

a:hove——————–鼠标移动到链接上

a:link——————–未访问

a:visited——————–已访问

a:active——————–选定的链接----按住

1661917892773

 <style>  
             a{text-decoration: none;}
             a:hover{
                 color: pink;
             }
             a:link{
                 color: coral;
             }
             a:visited{
                 color: cornflowerblue;
             }
             a:active{
                 color: darkkhaki;
             }
         </style>
 ​
 <a href="http://www.bilibili.com">bili</a>

4.选择器组合

image-20230115230249153

5.选择器特异度

选择器越特殊优先级越高

image-20230116091842538

6.布局(Layout)

1.常规流

image-20230116110233116

盒模型

image-20230116110308018

注:高度值height用百分比表示时,容器有指定的高度时才会生效

盒模型值的顺序:上下左右(两个值)、上右下左(顺时针)

三角形技巧:盒子宽高为0时设置边框,任意边框组合或单独一边的边框

image-20230116114148644

块级元素和行级元素的区别

image-20230116120234459

image-20230116120335008

image-20230116120359600

行级元素的排版

image-20230116121034197

块级元素的排版

image-20230116123315126

Flex Box

 <div>
     <div class="container">
     <div class="a">A</div>
     <div class="b">B</div>
     <div class="c">C</div>
 </div>
 <style>
 .container {
     display: flex;
     border: 2px solid #966;
 }
 ​
 .a, .b, .c{
     text-align: center;
     padding: 1em;
 }
 ​
 .a{
     background: #CAC9FB;
 }
 ​
 .b{
     background: #CAC9FB;
 }
 ​
 .c{
     background: #CAC9FB;
 }
 </style>

image-20230116130639036

flex布局的主轴与侧轴

image-20230116135721318

主轴方向分布justify-content(水平)

image-20230116135816754

侧轴方向分布align-items(垂直)

image-20230116140345290

弹性布局flex-grow(可以理解为权值)

image-20230116141152246

flex

image-20230116142138415

Grid布局

image-20230116143919685

image-20230116144509965

image-20230116145103609

2.浮动float

现在大多数情况下都是使用flex或grid,float一般用于图片环绕。

image-20230116162009604

3.绝对定位position

image-20230116162215541

relative

image-20230116162906248

absolute(相对最近的非static(relative\absolute\fixed)祖先定位)

image-20230116181016794

fixed类似于absolute但是相对的是窗口

二、自行补充知识点:

1.css优先级

第一优先级:无条件优先的属性只需要在属性后面使用 !important。它会覆盖页面内任何位置定义的元素样式。ie6不支持该属性。 第二优先级:在html中给元素标签加style,即内联样式。该方法会造成css难以管理,所以不推荐使用。 第三优先级:由一个或多个id选择器来定义。例如,#id{margin:0;}会覆盖.classname{margin:3pxl} 第四优先级:由一个或多个类选择器、属性选择器、伪类选择器定义。如.classname{margin:3px}会覆盖div{margin:6px;} 第五优先级:由一个或多个类型选择器定义。如div{marigin:6px;}覆盖*{margin:10px;} 第六优先级:通配选择器,如 *{marigin:6px;}

!important > 内联 > id选择器 > class选择器 > 类型选择器 > 通用选择器()*

2.通过css达到节流效果

实现如下

下面定义一个关于pointer-events的动画,就叫做 throttle

 @keyframes throttle {
   from {
     pointer-events: none;
   }
   to {
     pointer-events: all;
   }
 }
 复制代码

很简单吧,就是从禁用可点击的变化。

接下来,将这个动画绑定在按钮上,这里为了方便测试,将动画设置成了2s

 button{
   animation: throttle 2s step-end forwards;
 }

注意,这里动画的缓动函数设置成了阶梯曲线,step-end,它可以很方便的控制pointer-events的变化时间点。

有兴趣的可以参考这篇文章:CSS3 animation属性中的steps功能符深入介绍 « 张鑫旭-鑫空间-鑫生活 (zhangxinxu.com)

pointer-events在0~2秒内的值都是none,一旦到达2秒,就立刻变成了all,由于是forwards,会一直保持all的状态

在完成点击后将动画设置为none

 button:active{
   animation: none;
 }

地址:还在用 JS 做节流吗?CSS 也可以防止按钮重复点击 - 掘金 (juejin.cn)

三、实践练习例子:

自写12306静态网页

 <!DOCTYPE html>
 <html>
     <head>
         <meta charset="utf-8">
         <title></title>
         <style>
             *{
                 /* border: 1px solid red; */
                 margin: 0px;
                 border: 0px;
             }
             .introduce{
                 width: 390px;
                 height: 300px;
                 border: 1px solid pink;
             }
             h3{
                 height: 30px;
                 background-color: cornflowerblue;
                 text-align: center;
                 color: aliceblue;
                 font: optional;
                 line-height: 30px;
             }
             ul{
                 margin-left: 48px;
                 font-size: small;
             }
             .introduce a{
                 text-decoration: none;
                 color: darkslategrey;
                 
             }
             .introduce li{
                 height: 40px;
                 list-style: square;
             }
             .introduce a:hover{
                 color: black;
             }
             .introduce a:visited{
                 color: blueviolet;
             }
             .outerintroduce{
                 width: 1980px;
                 height: 300px;
                 margin-left: 0px auto;
             }
             #div1,#div2,#div3{
                 float: left;
                 margin: 10px;
                 
             }
         </style>
     </head>
     <body>
         <div class="outerintroduce">
             <div id="div1" class="introduce">
                 <h3>最新发布</h3>
                 <ul>
                     <li style="margin-top: 40px;"><a href="#">关于优化电子客票退票流程公告</a></li>
                     <li><a href="#">关于优化电子客票退票流程公告</a></li>
                     <li><a href="#">关于优化电子客票退票流程公告</a></li>
                     <li><a href="#">关于优化电子客票退票流程公告</a></li>
                     <li><a href="#">关于优化电子客票退票流程公告</a></li>
                 </ul>
             </div>
             <div id="div2" class="introduce">
                 <h3>最新发布</h3>
                 <ul>
                     <li style="margin-top: 40px;"><a href="#">关于优化电子客票退票流程公告</a></li>
                     <li><a href="#">关于优化电子客票退票流程公告</a></li>
                     <li><a href="#">关于优化电子客票退票流程公告</a></li>
                     <li><a href="#">关于优化电子客票退票流程公告</a></li>
                     <li><a href="#">关于优化电子客票退票流程公告</a></li>
                 </ul>
             </div>
             <div id="div3" class="introduce">
                 <h3>最新发布</h3>
                 <ul>
                     <li style="margin-top: 40px;"><a href="#">关于优化电子客票退票流程公告</a></li>
                     <li><a href="#">关于优化电子客票退票流程公告</a></li>
                     <li><a href="#">关于优化电子客票退票流程公告</a></li>
                     <li><a href="#">关于优化电子客票退票流程公告</a></li>
                     <li><a href="#">关于优化电子客票退票流程公告</a></li>
                 </ul>
             </div>
         </div>
 ​
     </body>
 </html>

四、课后个人总结:

本节课主要是对CSS的深入讲解,学习了很多以前不知道到技巧,特别是对布局的理解更加深刻了,之前对Flex的很多疑惑通通过这节课解开了。