理解CSS|青训营笔记

77 阅读6分钟

理解CSS

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

一、CSS简介

1、什么是CSS

CSS:Cascading Style Sheet 层叠样式表

是一组样式设置的规则,用于控制页面的外观样式

2、为什么使用CSS

实现内容与样式的分离,便于团队开发

样式复用,便于网站的后期维护

页面的精确控制,让页面更精美

3、CSS作用

页面外观美化

布局和定位

二、基本用法

1、CSS语法

 <style>
         选择器{
             属性名:属性值;
             属性名:属性值;
         }
     </style>
 </head>

选择器:要修饰的对象(东西) 属性名:修饰对象的哪一个属性(样式) 属性值:样式的取值示例:

2、CSS应用方式

也称为CSS引用方式,有三种方式:内部样式、行内样式、外部样式

2.1 内部样式

也称为内嵌样式,在页面头部通过style标签定义

对当前页面中所有符合样式选择器的标签都起作用

2.2 行内样式

也称为嵌入样式,使用HTML标签的style属性定义

只对设置style属性的标签起作用

2.3 外部样式

使用单独的 .CSS 文件定义,然后在页面中使用 link标签 或 @import指令 引入

  • 使用 link标签 链接外部样式文件
 <link rel="stylesheet" type="text/css" href="CSS样式文件的路径">

提示:type属性可以省略

  • @import 指令 导入外部样式文件
 <style>
     @import "CSS样式文件路径";
     @import url(CSS样式文件路径);
 </style>
 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Document</title>
     <style>
         /* 1.内部样式 */
         p{
             color:blue;
         }
     </style>
     <!-- link链接外部样式文件 -->
     <!-- <link rel="stylesheet" type="text/css" href="style/hello.css"> -->
     <!-- 3.import导入外部样式文件 -->
     <style>
         /* @import "style/hello.css" */
         @import url(style/hello.css);
     </style>
 </head>
 <body>
     <p>welcome to CSS!</p>
     <p>欢迎来到CSS课堂!</p>
     <hr>
     <h2 style="color:red;">WEB前段工程师</h2>
     <h2>JAVA开发工程师</h2>
     <hr>
     <div>嘿嘿</div>
     <div>哈哈</div>
 </body>
 </html>

三、选择器

1、基础选择器

1.1 标签选择器

也称为元素选择器,使用HTML标签作为选择器的名称

以标签名作为样式应用的依据

1.2 类选择器

使用自定义的名称,以 . 号作为前缀,然后再通过HTML标签的class属性调用类选择器

以标签的class属性作为样式应用的依据

注意事项:

调用时不能添加 . 号 同时调用多个类选择器时,以 空格 分隔 类选择器名称不能以 数字 开头

1.3 ID选择器

使用自定义名称,以 # 作为前缀,然后通过HTML标签的id属性进行名称匹配

以标签的id属性作为样式应用的依据,一对一的关系

2、复杂选择器

2.1 复合选择器

标签选择器和类选择器、标签选择器和ID选择器,一起使用

必须同时满足两个条件才能应用样式

2.2组合选择器

也称为集体声明

将多个具有相同样式的选择器放在一起声明,使用逗号隔开

2.3 嵌套选择器

在某个选择器内部再设置选择器,通过空格隔开

只有满足层次关系最里层的选择器所对应的标签才会应用样式

注意:使用 空格 时不区分父子还是后代,使用CSS3中新增的 > 时必须是父子关系才行

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Document</title>
     <style>
         /* 1.标签选择器和类选择器合起来使用----复合选择器 */
         h1.aaa{
             color:red;
         }
         /* 1.标签选择器和ID选择器合起来使用----复合选择器 */
         p#bbb{
             color:blue;
         }
         /* 2.组合选择器 */
         h1,p,div,span,.ccc{
             font-size:30px;
         }
         div{
             background:violet;
         }
         .ccc{
             font-weight:bold;
         }
         /* 3.嵌套选择器 */
         /* div p{
             color:green;
             text-decoration:underline;
         } */
         div>p{
             color:green;
             text-decoration:underline;
         }
         div h3.ddd{
             color:red;
         }
     </style>
 </head>
 <body>
     <!-- 需求:只想修饰class属性为aaa的h1标签 -->
     <h1 class="aaa">welcome</h1>
     <h4 class="aaa">css</h4>
     <h1>hello</h1>
     <hr>
     <!-- 我要修饰ID属性为bbb的p标签 -->
     <p id="bbb">world</p >
     <p>html</p>
     <h1 id="bbb">主讲:叽叽</h1>
     <hr>
     <!-- 给h1、p、div、span标签中的内容设置字号为30px -->
     <h1>hello</h1>
     <p>CSS</p>
     <div>WEB开发</div>
     <span class="ccc">JAVA开发</span>
     <hr>
     <!-- 需求:修饰div内部的p标签 -->
     <div>
         <p>div内部的p标签</p>
         <h3>div内部的h3标签</h3>
     </div>
     <hr>
     <div>
         <h3>
             <p>div内部的h3内部的p标签</p>
         </h3>
     </div>
     <hr>
     <!-- 需求:修饰div内部的class为ddd的标签 -->
     <div>
         <p>div内部的p</p>
         <h3 class="ddd">div内部的h3</h3>
         <p class="ddd">PPPP</p>
     </div>
     <h3 class="ddd">h3h3h3</h3>
 </body>
 </html>

2.4 伪类选择器

根据不同的状态显示不同的样式,一般多用于 标签

四种状态:

:link 未访问的链接 :visited 已访问的链接 :hover 鼠标悬浮到连接上,即移动在连接上 :active 选定的链接,被激活 注:默认超链接为:蓝色、下划线

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>伪类选择器</title>
     <style>
         /*a:link{
             font-size: 12px;
             color:black;
             text-decoration: none;
         }
         a:visited{
             font-size: 15px;
             color:;
         }
         a:hover{
             font-size: 20px;
             color:blue;
         }
         a:active{
             font-size: 40px;
             color:green;
         }*/
         a:link,a:visited{
             color:#666666;
             font-size: 13px;
             text-decoration: none;
         }
         a:hover,a:active{
             color:#ff7300;
             text-decoration: underline;
         }
         /*普通的标签也可以使用伪类选择器*/
         p:hover{
             color:red;
         }
         p:active{
             color:blue;
         }
     </style>
 </head>
 <body>
     <a href="复杂选择器.html">复杂选择器.html</a>
     <p>CSS从入门到精通!</p>
 </body>
 </html>

示例:

(自己试试,可以变色)

2.5 伪元素选择器

  • :first-letter 为第一个字符的样式
  • :first-line 为第一行添加样式
  • :before 在元素内容的最前面添加的内容,需要配合content属性使用
  • :after 在元素内容的最后面添加的内容,需要配合content属性使用
 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Document</title>
     <style>
         p:first-letter{
             color:red;
             font-size:30px;
         }
         p:first-line{
             background:pink;
         }
         p:before{
             content:"嘿嘿";
         }
         p:after{
             content:"哈哈";
         }
     </style>
 </head>
 <body>
     <p>hello world!</p>
     <hr>
     <p>
         hello world! <br>
         welcome to css!
     </p>
 </body>
 </html>

四、盒子模型

1.简介

盒子模型是网页布局的基础,将页面中所有元素都看作是一个盒子,盒子都包含以下几个属性:

  • width 宽度
  • height 高度
  • border 边框
  • padding 内边距
  • margin 外边距

2.盒子模型

2.1 border

表示盒子的边框

分为四个方向:

  • 上top、右right、下bottom、左left
  • border-top、border-right、border-bottom、border-left 每个边框包含三种样式:
  • border-top-color、border-top-width、border-top-style
  • border-right-color、border-right-width、border-right-style
  • border-bottom-color、border-bottom-width、border-bottom-style
  • border-left-color、border-left-width、border-left-style 样式style的取值:

solid实线、dashed虚线、dotted点线、double双线、inset内嵌的3D线、outset外嵌的3D线

简写,三种方式:

  • 按方向简写:

border-top、border-right、border-bottom、border-left

书写顺序:

border-顺序:width style color

  • 按样式简写:

border-color、border-width、border-style

书写顺序:

border-样式:top right bottom left

必须按顺时针方向书写,同时可以缩写:

  • border-width:2px;--------->四个边框的宽度均为2px

  • border-width:1px 2px;

  • border-width:1px 2px 4px;

    规则:如果省略,则认为上下一样,左右一样

  • 终级简写:

如果四个边框样式完全相同,border:width style color;

2.2 padding

表示盒子的内边距,即内容与边框之间的距离

同样也分为四个方向,也可以简写(按顺时针方向,默认上下一样,左右一样)

注意:如果上下冲突,则以上为准,如果左右冲突,则以左为准

2.3 margin

表示盒子的外边距,即盒子与盒子之间的距离

同样也分为四个方向,也可以简写(按顺时针方向,默认上下一样,左右一样)

居中对齐:

 /* 元素的水平居中 */ 
 /* 1.块级元素的水平居中 */ 
     margin:0 auto; 
     /* 提示:块级元素必须指定宽度 */
     /* 2.文本的水平居中 */ 
     text-align:center; 
     /* 3.垂直居中,将height和line-height设置为相同 */ 
     height:100px; 
     line-height:100px;/* 元素的水平居中 */ 
 /* 1.块级元素的水平居中 */ 
     margin:0 auto; 
     /* 提示:块级元素必须指定宽度 */
     /* 2.文本的水平居中 */ 
     text-align:center; 
     /* 3.垂直居中,将height和line-height设置为相同 */ 
     height:100px; 
     line-height:100px;
 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Document</title>
     <style>
         p{
             width:250px;
             background:#ccc;
         }
         .first{
             /* border-top-color:red;
             border-top-width:1px;
             border-top-style:solid;
             border-right-color:blue;
             border-right-width:2px;
             border-right-style:dotted;
             border-bottom-color:green;
             border-bottom-width:4px;
             border-bottom-style:dashed;
             border-left-color:gray;
             border-left-width:6px;
             border-left-style:double; */
 ​
             /* border-top:1px solid red;
             border-bottom:2px dashed blue; */
             
             /* border-color:red yellow green;
             border-width:1px 2px 4px 6px;
             border-style:solid dashed dotted solid; */
 ​
             border:1px solid red;
             padding:20px;
             margin:10px;
         }
         .second{
             /* padding-top:5px;
             padding-left:3px;
             padding-bottom:10px;
             padding-right:8px; */
 ​
             /* padding:1px 2px 4px 6px; */
 ​
             padding:5px;
         }
         .third{
             /* margin-top:50px;
             margin-left:30px; */
 ​
             /* margin:10px 20px; */
 ​
             /* 元素的居中 */
             /* 1.块级元素水平居中 */
             margin:auto;
             /* 2.文本水平居中 */
             text-align:center;
             /* 3.文本垂直居中 将height与line-height设置为相同 */
             height:100px;
             line-height:100px;
         }
     </style>
 </head>
 <body>
     <p class="first">nihao</p>
     <p class="second">hello</p>
     <p class="third">welcome</p>
 </body>
 </html>

3.其他

3.1 元素所占空间

页面中的元素实际所占的空间

宽度=width+左右padding+左右border+左右margin 高度=height+上下padding+上下border+上下margin

3.2 盒子属性默认值

不同标签的盒子属性默认值可能不同,需要自己设置

 body,ul,ol,dl,li,p,h1,h2,h3,h4,h5,h6,form{
     margin:0; 
     padding:0; 
 }

3.3 外边距的合并

也称为外边距的折叠,指的是两个块级元素垂直外边距相遇时,它们将合并为一个外边距,合并后的外边

距值为其中较大的那个外边距值

两种情况:

当一个元素出现在另一个元素上面时,第一个元素的下边距与第二元素的上边距会发生合并 当一个元素包含在另一个元素中时,并且没有内边距或边框把外边距分隔开时,两个元素的上外边距会发生合并 外边距的合并的好处,让排版在视觉上显得更美观

\