Python笔记10(CSS笔记一)

一、css的引入方式

1、css介绍

现在的互联网前端分三层:

  • HTML:超文本标记语言。从语义的角度描述页面结构
  • CSS:层叠样式表。从审美的角度负责页面样式
  • JS:JavaScript 。从交互的角度描述页面行为

CSS:Cascading Style Sheet,层叠样式表。CSS的作用就是给HTML页面标签添加各种样式,定义网页的显示效果。简单一句话:CSS将网页内容和显示样式进行分离,提高了显示功能。

css的最新版本是css3,我们目前学习的是css2.1

2、为什么要使用CSS

HTML的缺陷:

1)不能够适应多种设备

2)要求浏览器必须智能化足够庞大

3)数据和显示没有分开

4)功能不够强大

CSS 优点:

1)使数据和显示分开

2)降低网络流量

3)使整个网站视觉效果一致

4)使开发效率提高了(耦合性降低,一个人负责写html,一个人负责写css)

比如说,有一个样式需要在一百个页面上显示,如果是html来实现,那要写一百遍,现在有了css,只要写一遍。现在,html只提供数据和一些控件,完全交给css提供各种各样的样式。

3、在HTML中引入css方式总共有三种:

1)行内样式

<div>
    <p style="color: green">我是一个段落</p>
</div>

2)内接样式

mime类型:MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title标签</title>
<!--mime 文件类型-->
<style type="text/css">
p {
color: green;
}
</style>
</head>
<body>
<p>段落</p>
</body>
</html>

3)外接样式:链接式

/*css文件*/
a{
color:red
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title标签</title>
<link rel="stylesheet" type="text/css" href="./css/index.css">
</head>
<body>
<a href="#">百度一下</a>
</body>
</html>

4)外接样式:导入式

/*css文件*/
a{
color:red
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title标签</title>
<style type="text/css" media="screen">
@import url("./css/index.css");
</style>
</head>
<body>
<a href="#">百度一下</a>
</body>
</html>

二、css的选择器

css的选择器:1.基本选择器 2.高级选择器

1、基本选择器

高基本选择器分为:标签选择器、id选择器、类选择器。

1)标签选择器

标签选择器可以选中所有的标签元素,比如div,ul,li ,p等等,不管标签藏的多深,都能选中,选中的是所有的,而不是某一个,所以说 "共性" 而不是 ”特性“。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title标签</title>
<style type="text/css" media="screen">
p {
color: red;
}
</style>
</head>
<body>
<p>段落</p>
</body>
</html>

2)id选择器

# 选中id

同一个页面中id不能重复。
任何的标签都可以设置id
id命名规范 要有字母 可以有数字 下划线 - 大小写严格区分 aa和AA是两个不一样的属性值

 #box{
     background:green;
 }
             
 #s1{
     color: red;
 }
 
 #s2{
     font-size: 30px;
 }
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title标签</title>
    <style type="text/css" media="screen">
        #box{
            color: red;
        }
    </style>
</head>
<body>
<div id="box">段落</div>
</body>
</html>

3)类选择器

所谓类 就是class . class与id非常相似 任何的标签都可以加类但是类是可以重复,属于归类的概念。

同一个标签中可以携带多个类,用空格隔开。

.lv{
    color: green;

}
.big{
    font-size: 40px;
}
.line{
    text-decoration: underline;
}
<!-- 公共类    共有的属性 -->
    <div>
        <p class="lv big">段落1</p>
        <p class="lv line">段落2</p>
        <p class="line big">段落3</p>
    </div>

总结:

  • 不要去试图用一个类将我们的页面写完。这个标签要携带多个类,共同设置样式
  • 每个类要尽可能的小,有公共的概念,能够让更多的标签使用

到底使用id还是用class?
答案:尽可能的用class。除非一些特殊情况可以用id

原因:id一般是用在js的。也就是说 js是通过id来获取到标签

2、高级选择器

高级选择器分为:后代选择器、子代选择器、并集选择器、交集选择器。

1)后代选择器

使用空格表示后代选择器。顾名思义,父元素的后代。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css" media="screen">
        #box p {
            color: red;
        }
    </style>
</head>
<body>
<div id="box">
    <p>段落</p>
</div>
</body>
</html>

2)子代选择器

使用>表示子代选择器。比如div>p,仅仅表示的是当前div元素选中的子代。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css" media="screen">
        #box>p {
            color: red;
        }
    </style>
</head>
<body>
<div id="box">
    <p>段落1</p>
    <div id="box2">
        <p>段落2</p>
    </div>
</div>
</body>
</html>

 3)并集选择器

 多个选择器之间使用逗号隔开。表示选中的页面中的多个标签。一些共性的元素,可以使用并集选择器。

/*并集选择器*/
h3,a{
    color: #008000;
    text-decoration: none;
                
}

比如像百度首页使用并集选择器。

body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td {
      margin: 0;
      padding: 0
   }
/*使用此并集选择器选中页面中所有的标签,页面布局的时候会使用*/

4)交集选择器

使用.表示交集选择器。第一个标签必须是标签选择器,第二个标签必须是类选择器。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css" media="screen">
        span {
            color: red;
        }
        span.aaa {
            color: green;
        }
    </style>
</head>
<body>
<span class="aaa">哈哈哈</span>
<span>哈哈哈</span>
<span>哈哈哈</span>
<span>哈哈哈</span>
<span>哈哈哈</span>
</body>
</html>

3、属性选择器

属性选择器,字面意思就是根据标签中的属性,选中当前的标签。

/*根据属性查找*/
            /*[for]{
                color: red;
            }*/
            
            /*找到for属性的等于username的元素 字体颜色设为红色*/
            /*[for='username']{
                color: yellow;
            }*/
            
            /*以....开头  ^*/ 
            /*[for^='user']{
                color: #008000;
            }*/
            
            /*以....结尾   $*/
            /*[for$='vvip']{
                color: red;
            }*/
            
            /*包含某元素的标签*/
            /*[for*="vip"]{
                color: #00BFFF;
            }*/
            
            /**/
            
            /*指定单词的属性*/
            label[for~='user1']{
                color: red;
            }
            
            input[type='text']{
                background: red;
            }

4、伪类选择器

伪类选择器一般会用在超链接a标签中,使用a标签的伪类选择器,我们一定要遵循"爱恨准则"  LoVe HAte。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css" media="screen">
        /*没有被访问的a标签的样式*/
        .box ul li.item a:link {
            color: green;
        }
        /*访问过后的a标签的样式*/
        .box ul li.item a:visited {
            color: yellow;
        }
        /*访问过后的a标签的样式*/
        .box ul li.item a:hover {
            color: blue;
        }
        /*访问过后的a标签的样式*/
        .box ul li.item a:active {
            color: yellowgreen;
        }
    </style>
</head>
<body>
<div class="box">
    <ul>
        <li class="item">
            <a href="#" title="">百度</a>
        </li>
    </ul>
</div>
</body>
</html>

介绍一种css3的选择器nth-child():

/*选中第一个元素*/
        div ul li:first-child{
            font-size: 20px;
            color: red;
        }
        /*选中最后一个元素*/
        div ul li:last-child{
            font-size: 20px;
            color: yellow;
        }
        
        /*选中当前指定的元素  数值从1开始*/
        div ul li:nth-child(3){
            font-size: 30px;
            color: purple;
        }
        
        /*n表示选中所有,这里面必须是n, 从0开始的  0的时候表示没有选中*/
        div ul li:nth-child(n){
            font-size: 40px;
            color: red;
        }
        
        /*偶数*/
        div ul li:nth-child(2n){
            font-size: 50px;
            color: gold;
        }
        /*奇数*/
        div ul li:nth-child(2n-1){
            font-size: 50px;
            color: yellow;
        }
        /*隔几换色  隔行换色
             隔4换色 就是5n+1,隔3换色就是4n+1
            */
        
        div ul li:nth-child(5n+1){
            font-size: 50px;
            color: red;
        }

三、盒模型

1、盒模型

1)介绍

在CSS中,"box model"这一术语是用来设计和布局时使用,然后在网页中基本上都会显示一些方方正正的盒子。我们称为这种盒子叫盒模型。

盒模型有两种:标准模型和IE模型。我们在这里重点讲标准模型。

2)盒模型示意图

3)盒模型的属性

width:内容的宽度

height: 内容的高度

padding:内边距,边框到内容的距离

border: 边框,就是指的盒子的宽度

margin:外边距,盒子边框到附近最近盒子的距离

4)盒模型计算

如果一个盒子设置了padding,border,width,height,margin(先不要设置margin)

盒子的真实宽度=width+2*padding+2*border

盒子的真实宽度=height+2*padding+2*border

2、padding(内边距)

1)padding

padding:就是内边距的意思,它是边框到内容之间的距离

另外padding的区域是有背景颜色的。并且背景颜色和内容的颜色一样。也就是说background-color这个属性将填充所有的border以内的区域。

2)padding的设置

padding有四个方向,分别描述4个方向的padding。

描述的方法有两种

写小属性,分别设置不同方向的padding:

padding-top: 30px;
padding-right: 30px;
padding-bottom: 30px;
padding-left: 30px;

写综合属性,用空格隔开:

/*上 右 下 左*/
padding: 20px 30px 40px 50px ;

/*上 左右  下*/
padding: 20px 30px 40px;

/* 上下 左右*/
padding: 20px 30px;
            
/*上下左右*/
padding: 20px;

3)一些标签默认有padding

比如ul标签,有默认的padding-left值。

那么我们一般在做站的时候,是要清除页面标签中默认的padding和margin。以便于我们更好的去调整元素的位置。

我们现在初学可以使用通配符选择器

*{
  padding:0;
  margin:0;    
}

But,这种方法效率不高。

所以我们要使用并集选择器来选中页面中应有的标签(不同背,因为有人已经给咱们写好了这些清除默认的样式表,reset.css)(https://meyerweb.com/eric/tools/css/reset/)。

3、border(边框)

1)边框

border:边框的意思,描述盒子的边框

边框有三个要素: 粗细 线性样式 颜色,例如  border: solid 就是实线的意思。

如果颜色不写,默认是黑色。如果粗细不写,不显示边框。如果只写线性样式,默认的有上下左右 3px的宽度,实体样式,并且黑色的边框。

2)按照3要素来写border

border- 3px;
border-style: solid;
border-color: red;
/*
border- 5px 10px;
border-style: solid dotted double dashed;
border-color: red green yellow;
*/

3)按照方向划分

border-top- 10px;
border-top-color: red;
border-top-style: solid;

border-right- 10px;
border-right-color: red;
border-right-style: solid;

border-bottom- 10px;
border-bottom-color: red;
border-bottom-style: solid;

border-left- 10px;
border-left-color: red;
border-left-style:solid;

上面12条语句,相当于 bordr: 10px solid red;

另外还可以这样:

border-top: 10px solid red;
border-right: 10px solid red;
border-bottom: 10px solid red;
border-left: 10pxb solid red;

border:none;

border:0;

表示border没有设置样式。

4)使用border来制作小三角

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        div{
            width: 0;
            height: 0;
            border-bottom: 30px solid red;
            border-left: 30px solid transparent;
            border-right: 30px solid transparent;
        }
    </style>
</head>
<body>
<div></div>
</body>
</html>

4、margin

margin:外边距的意思。表示边框到最近盒子的距离。

/*表示四个方向的外边距离为20px*/
margin: 20px;
/*表示盒子向下移动了30px*/
margin-top: 30px;
/*表示盒子向右移动了50px*/
margin-left: 50px;

margin-bottom: 100px;

1)margin塌陷问题

 html结构:

<div class="father">
    <div class="box1"></div>        
    <div class="box2"></div>
</div>

css样式:

 *{
            padding: 0;
            margin: 0;
        }
        .father{
            width: 400px;
            overflow: hidden;
            border: 1px solid gray;
        }
        .box1{
            width: 300px;
            height: 200px;
            background-color: red;
            margin-bottom: 20px;}
        .box2{
            width: 400px;
            height: 300px;
            background-color: green;
            margin-top: 50px;
        }

效果:

当给两个标准流下兄弟盒子 设置垂直方向上的margin时,那么以较大的为准,那么我们称这种现象叫塌陷。

当我们给两个标准流下的兄弟盒子设置浮动之后,就不会出现margin塌陷的问题。

 css样式:

*{
    padding: 0;
    margin: 0;
}
.father{
    width: 400px;
    overflow: hidden;
    border: 1px solid gray;
}
.box1{
    width: 300px;
    height: 200px;
    background-color: red;
    margin-bottom: 20px;
    float:left;
}
.box2{
    width: 400px;
    height: 300px;
    background-color: green;
    margin-top: 50px;
    float:left;
}

效果:

2)margin:0 auto

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
            *{
                padding: 0;
                margin: 0;
            }
          div{
                width: 780px;
                height: 50px;
                background-color: red;
                /*水平居中盒子*/
                margin: 0px auto;
                /*水平居中文字*/
                text-align: center;
            }
    </style>
</head>
<body>
    <div class="box1">文字文字文字文字</div>
</body>
</html>

效果:

使用margin:0 auto;注意点:

1.使用margin: 0 auto;水平居中盒子必须有width,要有明确width,文字水平居中使用text-align: center;

2.只有标准流下的盒子 才能使用margin:0 auto; (当一个盒子浮动了,固定定位,绝对定位(后面会讲),margin:0 auto; 不能用了)

3.margin:0 auto;居中盒子。而不是居中文本,文字水平居中使用text-align: center;

4.margin-left:auto;与margin-right:auto;同时使用--居中盒子。;

备注: margin属性是描述兄弟盒子的关系,而padding描述的是父子盒子的关系

 3)善于使用父亲的padding,而不是margin

实现如图的效果代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        .father{
            width: 300px;
            height: 300px;
            background-color: blue;
            padding-top:30px;
        }
        .box1{
            width: 150px;
            height: 100px;
            background-color: red;
        }
    </style>
</head>
<body>
<div class="father">
    <div class="box1"></div>
</div>
</body>
</html>

如果在box1中加入margin-top: 30px,因为father没有border,那么box1的margin-top实际上踹的是“流” 踹的是行,所以father掉下来了,一旦给father一个border发现就好了。

那么问题来了,我们不可能在页面中无缘无故的去给盒子加一个border,所以此时的解决方案只有一种。就是使用father的padding。让box1挤下来。

三、css的继承性和层叠性

css有两大特性:继承性和层叠性

继承性:

面向对象语言都会存在继承的概念,在面向对象语言中,继承的特点:继承了父类的属性和方法。那么我们现在主要研究css,css就是在设置属性的。不会牵扯到方法的层面。

继承:给父级设置一些属性,子级继承了父级的该属性,这就是我们的css中的继承。

记住:有一些属性是可以继承下来 : color 、 font-*、 text-*、line-* 。主要是文本级的标签元素。

但是像一些盒子元素属性,定位的元素(浮动,绝对定位,固定定位)不能继承。

层叠性:

层叠性: 权重的标签覆盖掉了权重小的标签。
权重: 谁的权重大,浏览器就会显示谁的属性。

第一种情况:(数:id的数量 class的数量 标签的数量,顺序不能乱)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title标签</title>
    <style type="text/css" media="screen">
        <!-- 权重 -->
        /*  id  class  标签  记录个数*/

        /*1 0 0*/
        #pa{
            color: yellow;
        }
        /*0 1 0*/
        .app{
            color: red;
        }
        /*0 0 1*/
        p{
            color: blue;
        }
    </style>
</head>
<body>
<p id="pa" class="app">猜猜我是什么颜色</p>
</body>
</html>

第二种情况:权重不一样,比较大小

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css" media="screen">
        <!--权重-->
        /*1 2 1 */
        #box .wrap2 .wrap3 p{
            color: red;
        }
        /*2 1 1*/
        #box #box2 div .app{
            color: yellow;
        }
    </style>
</head>
<body>
<div id="box" class="wrap">
    <p>段落1</p>
    <div id="box2" class="wrap2">
        <div id="box3" class="wrap3">
            <p id="pa" class="app">段落2</p>
        </div>
    </div>
</div>
</body>
</html>

第三种情况:当权重一样的时候 是以后来设置的属性为准

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css" media="screen">
        <!--权重-->
        /*2 1 1 */
        #box #box2 .wrap3 p{
            color: red;
        }
        /*2 1 1*/
        #box #box2 div .app{
            color: yellow;
        }
    </style>
</head>
<body>
<div id="box" class="wrap">
    <p>段落1</p>
    <div id="box2" class="wrap2">
        <div id="box3" class="wrap3">
            <p id="pa" class="app">段落2</p>
        </div>
    </div>
</div>
</body>
</html>

第四种情况:没有选中的标签权重为0

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css" media="screen">
        <!--权重-->
        /*2 2 0 */
        #box #box2 .wrap3 .app{
            color: red;
        }
        /*2 1 1*/
        #box #box2 div .app{
            color: yellow;
        }
        /*3 0 0  继承(没有选中)的标签权重为0*/
        #box #box2 #box3{
            color: green;
        }
        /*2 0 0 如果权重都为0 还要比较权重*/
        #box #box2 {
            color: blue;
        }
    </style>
</head>
<body>
<div id="box" class="wrap">
    <p>段落1</p>
    <div id="box2" class="wrap2">
        <div id="box3" class="wrap3">
            <p id="pa" class="app">段落2</p>
        </div>
    </div>
</div>
</body>
</html>

总结:

1.先看标签元素有没有被选中,如果选中了,就数数 (id,class,标签的数量) 谁的权重大 就显示谁的属性。权重一样大,后来者居上
2.如果没有被选中标签元素,权重为0。
如果属性都是被继承下来的 权重都是0 。权重都是0:"就近原则" : 谁描述的近,就显示谁的属性

原文地址:https://www.cnblogs.com/xingye-mdd/p/9236543.html