CSS3

Cascading Style Sheet 层叠级联样式表

发展史

CSS1.0

CSS2.0 DIV(块)+CSS,HTML与CSS结构分离思想,网页变得简单,SEO

CSS2.1 浮动,定位

CSS3.0 圆角,阴影,动画....... 浏览器兼容性问题呢

基本语法入门

在HTML里编写CSS的规范

语法:

选择器{

​ 声明1;

​ 声明2;

​ 声明3;

}

代码举例

<!DOCTYPE html>
<html>
<head>
<title>MyHtml.html</title>

<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">

<style>
a {
    color: blue;
}
</style>

</head>
<body>
    <a>top</a>
</body>
</html>

在HTML和CSS分离的规范

CSS中

选择器{

​ 声明1;

​ 声明2;

​ 声明3;

}

HTML中

<link rel="stylesheet" href="路径styles.css">

代码举例

在HTML中
<!DOCTYPE html>
<html>
<head>
<title>MyHtml.html</title>

<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">

<link rel="stylesheet" href="CSS/test.css">

</head>
<body>
    <a>top</a>
</body>
</html>
在CSS中
@CHARSET "UTF-8";
a {
    color: red;
}

CSS优势

1、内容和表现分离

2、网页结构表现统一,可以实现复用

3、样式十分丰富

4、建议使用独立于html的css文件

5、利用SEO,容易被搜索引擎收录

CSS的三种导入方式

1、外部样式

2、内部样式

3、行内样式

参考基本语法入门(上面)

写在HTML里不分彼此的是内部样式

独立一个css文件的是外部样式

行内样式举例

<!DOCTYPE html>
<html>
<head>
<title>MyHtml.html</title>

<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">

</head>
<body>
    <a style="color:red">top</a>
</body>
</html>

优先级关系

就近原则,离元素最近的优先级最高

行内样式最近,优先级最高

内部样式和外部样式,谁后出现谁优先级高

拓展外部样式两种写法

链接式:

属于html

<link rel="stylesheet" href="CSS/test.css">

导入式:

属于CSS2.1特有的

<style>
@import url("CSS/test.css");
</style>

首页link和import语法结构不同。前者<1ink>是html标签,只能放入html源代码中使用,后者可看作为css样式,作用是引入css样式功能,。import在html使用时候需要标签,同时可以直接@import ur(CSS文件路径地址);""放如css文件或css代码里引入其它css文件。
本质上两者使用选择区别不大,但为了软件中编辑布局网页html代码,一般使用link较多,也推荐使用link。

选择器

作用:选择页面上的某一个或者某一类元素

基本选择器

1、标签选择器

一个完整的HTML页面是有很多不同的标签组成,标签选择器,则是决定哪些标签

采用相应的CSS样式,(在大环境中你可能处于不同的位置,但是不管怎么样,你总

是穿着同一套衣服,这件衣服就是由标签选择器事先给你限定好的,不管走到哪里

都是这身衣服)比如,在style.css文件中对p标签样式的声明如下:

p{
    color:red;
}

复制代码则页面中所有p标签的颜色都是红色

2、类选择器(class)

类选择器根据类名来选择

前面以”.”来标志,如:

.demoDiv{

color:red;

}

在HTML中,定义一个class的属性。

如:

<div class="demoDiv">
    这个区域字体颜色为红色
</div>

同时,我们可以再定义一个元素:

<p class="demoDiv">
    这个段落字体颜色为红色
</p>

最后,用浏览器浏览,我们可以发现所有class为demoDiv的元素都应用了这个样式。包括了页面中的div元素和p元素。

上例我们给两个元素都定义了class,但如果有很多个元素都会应用这个元素,那得一个个的定义元素,就会造成页面重复的代码太多,这种现象称为“多类症”。

我们可以改成这样来定义。

<div class="demoDiv">
<div>
这个区域字体颜色为红色
</div>
同时,我们可以再定义一个元素:
<p>
这个段落字体颜色为红色
</p>
</div>

这样,我们就只是定义了一个类,同时把样式应用到了所有的元素当中。

3、id选择器

ID 选择器可以为标有特定 ID 的 HTML 元素指定特定的样式。 根据元素ID来选择元素,具有唯一性,这意味着同一id在同一文档页面中只能出现一次。

前面以”#”号来标志,在样式里面可以这样定义:

#demoDiv{

color:red;

}

这里代表id为demoDiv的元素的设置它的字体颜色为红色。

我们在页面上定义一个元素把它的ID定义为demoDiv,如:

<div id="demoDiv">
这个区域字体颜色为红色
</div>

优先级关系

id选择器 > 类选择器 > 标签选择器

层次选择器

区分层次关系

爷爷>爸爸>儿子>孙子

后代选择器

在某个元素后面(假设下方p为爸爸,则爸爸、儿子、孙子都包括)

body p{
    background: red;
}

这个元素后面所有都会选中

子选择器

某一代(假设下方p为爸爸,则爸爸这一代都包括)

body>p{
    background: red;
}

与这个元素同层次的都会选中

相邻兄弟选择器

同辈中的下一个(假设下方p为爸爸,则只包括爸爸的第一个弟弟)

/*active是自己添加的类 
<p class="active">p1</p>*/
.active + p{
    background: red;
}

与这个元素同层次的下方第一个元素

通用兄弟选择器

同辈中的下方全部(假设下方p为爸爸,则包括爸爸的所有弟弟)

/*active是自己添加的类 
<p class="active">p1</p>*/
.active~p{
    background: red;
}

与这个元素同层次的下方所有元素

结构伪类选择器

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>结构伪类选择器</title>
    <style>
        /*ul的第一个子元素*/
        ul li:first-child{
            background: red;
        }
        /*ul的最后一个子元素*/
        ul li:last-child{
            background: blue;
        }
        /*选中p1*/
        /*选择当前p元素的父级元素
        选中父级元素的第一个元素
        并且是当前选择元素才生效
        按顺序第一个*/
        p:nth-child(1){
            background: green;
        }
        /*选中p2*/
        /*选择当前p元素的父级元素
        选中父级元素的第一个p元素
        按类型第二个*/
        p:nth-of-type(2){
            background: yellow;
        }
        /*鼠标放上去变色*/
        a:hover{
            background: black;
        }
        /*鼠标单击未释放*/
        a:active{
            background: blue;
        }
    </style>
</head>
<body>
    <a href="">hello</a>
    <p>p1</p>
    <p>p2</p>
    <p>p3</p>
    <ul>
        <li>li1</li>
        <li>li2</li>
        <li>li3</li>
    </ul>
</body>
</html>

属性选择器

id和class选择器的结合

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>结构伪类选择器</title>
    <style>
        /*属性名,属性名=属性值(正则)
        = 绝对等于
        *= 包含这个元素
        ^= 以这个元素开头
        $= 以这个元素结尾
        */
        /*存在id属性的元素*/
        a[id]{
            background:blue;
        }
        /*id为first的元素*/
        a[id=first]{
            background:blue;
        }
        /*class中有link的元素*/
        a[class*=link]{
            background:blue;
        }
        /*选中href中以http开头的元素*/
        a[href^=http]{
            background:blue;
        }
        /*选中href中以com结尾的元素*/
        a[href$=com]{
            background:blue;
        }
    </style>
</head>
<body>
    <a id="first">a1</a>
    <a id="second">a2</a>
    <a class="link one">a3</a>
    <a class="link two" href="abcdefg.com">a4</a>
    <a class="three" href="http//abcdefg">a5</a>
    <a href="http//baidu.com">a6</a>
</body>
</html>

美化网页元素

span标签:突出要突出的字用span标签套起来

我是<span id="">梦寐</span>

字体样式

font-family:字体
font-size:大小
font-weight:字体粗细
color:颜色

也可以直接写成
font: 风格 粗细 大小 字体

文本样式

color:颜色
text-align:center  排版居中
text-indent:2em  段落首行缩进
background:背景色
height:当前元素块高度
line-height:每行高度
text-decoration:underline(下划线)
text-decoration:line-through(中划线)
text-decoration:overline(上划线)
text-decoration:none(去下划线)

水平对齐,要参照物a,b
<style>
    img,span{
        vertical-align:middle;
    }
</style>
<body>
    <img src="dream.png">
    <span>梦寐</span>
</body>

阴影 text-shadow: (阴影颜色 水平偏移 垂直偏移 阴影半径)

四个参数,后三个参数记得带单位

超链接伪类

正常情况下,只用前两个

a{} //正常显示的状态

a:hover{} //鼠标悬停状态

a:active{} //单击未释放

a:link{} //未访问链接

a:visited{} //已访问链接

列表

/*ul li*/
/*height: 行高*/
/*list-style:
none 去掉圆点
circle 空心圆
decimal 数字
square 正方形
*/
/**/
ul li{
    height: 30px;
    list-style: none;
    text-indent: 1em;
}

背景

背景颜色

background没啥好说的

默认参数为 颜色 图片 横坐标 纵坐标 平铺方式

背景图片

background-image: url("路径");/*默认平铺*/
background-repeat: repeat-x;/*水平平铺一行*/
background-repeat: repeat-y;/*垂直平铺一行*/
background-repeat: no-repeat;/*不平铺仅一张*/
background-position: 10px 10px/*背景图片位置*/

渐变

<!DOCTYPE html>
<html>
<head>
<title>MyHtml.html</title>

<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">

    <style>
        body{
            background-color: #21D4FD;
            background-image: linear-gradient(19deg, #21D4FD 0%, #B721FF 100%);
        }
    </style>
</head>
<body>

</body>
</html>

linear-gradient参数(渐变轴,颜色1,颜色2(带透明度))

盒子模型

盒子模型包括

margin:外边距

border:边框

padding:内边距

外边距

边框外面的距离

margin:外边距距离

总有一个默认外边距

外边距的作用:居中元素margin:auto

margin:0;/*上下左右都为0*/
margin:0 0;/*上下,左右都为0*/
margin:0 0 0 0;/*上,下,左,右都为0*/
margin:auto;/*上下左右居中*/
margin:0 auto;/*上下为0,左右居中*/

内边距相似

边框

border:粗细,样式,颜色

样式包括:solid 实线、dashed 虚线

圆角边框

border-radius:50px;/*上左,上右,下右,下左画四分之一圆,半径50px*/
border-radius:50px 0;/*上左,下右画四分之一圆,半径50px*/
border-radius:50px 0 0 0/*上左画四分之一圆,半径50px*/

注意设置边框的宽高,避免宽高不够使圆角被挤压变形

div{
    width:50px;
    height:50px;
    background:red;
    border-radius:50px 0 0 0;
}/*画一个四分之一圆*/

盒子的计算(元素大小)

元素大小为:外边距margin + 边框border + 内边距padding + 内容宽度

浮动

display

块级元素

h1~h6 p div 列表...

行内元素

span a img strong...

行内元素可以被包含在块级元素中,反之不行。

<!DOCTYPE html>
<html>
<head>
<title>MyHtml.html</title>
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
<!--
display:是块元素还是行内元素。
block 块元素
inline 行内元素
inline-block 是块元素,但可以内联在一行
none 不显示
-->
    <style>
        div{
            width:100px;
            height:100px;
            border:1px solid black;
            display:inline;
        }
        spam{width:100px;
            height:100px;
            border:1px solid black;
            display:inline-block;
        }
    </style>
</head>
<body>
    <div>块元素</div>
    <span>行内元素</span>
</body>
</html>

一般用float,不用它

float

<body>
    <div id="father">
        <div class="layer01"><img src="images/1.jpg" alt=""/></div>
        <div class="layer02"><img src="images/2.jpg" alt=""/></div>
        <div class="layer03"><img src="images/3.jpg" alt=""/></div>
    </div>
</body>
.layere01{
    width:100px;
    height:100px;
    border:1px solid black;
    display:inline-block;
    float:left;/*靠左浮动*/
}
.layere02{
    width:100px;
    height:100px;
    border:1px solid black;
    display:inline-block;
    float:left;//*靠左浮动*/
}
.layer03{
    width:100px;
    height:100px;
    border:1px solid black;
    display:inline-block;
    float:right;
}

会随着页面变化而变化,浮在对应位置。

clear

clear:right;右侧不允许有浮动元素。

clear:left;左侧不允许有浮动元素。

clear:both;两侧都不允许有浮动元素。

排列到下一行。

父级边框塌陷问题

1、增加父级元素高度

<body>
    <div id="father">
        <div class="layer01"><img src="images/1.jpg" alt=""/></div>
        <div class="layer02"><img src="images/2.jpg" alt=""/></div>
        <div class="layer03"><img src="images/3.jpg" alt=""/></div>
    </div>
</body>
#father{
    border:1px #000 solid;
    height:800px;
}

2、增加一个空的div标签,清除浮动

<body>
    <div id="father">
        <div class="layer01"><img src="images/1.jpg" alt=""/></div>
        <div class="layer02"><img src="images/2.jpg" alt=""/></div>
        <div class="layer03"><img src="images/3.jpg" alt=""/></div>
        <div class="clear"></div>
    </div>
</body>
.clear{
    clear:both;
    margin:0;
    padding:0;
}

3、overflow

<body>
    <div id="father">
        <div class="layer01"><img src="images/1.jpg" alt=""/></div>
        <div class="layer02"><img src="images/2.jpg" alt=""/></div>
        <div class="layer03"><img src="images/3.jpg" alt=""/></div>
    </div>
</body>
#father{
    border:1px #000 solid;
    overflow:hidden;/*未规定高度,由元素撑起高度,所以不存在超出问题*/
}

overflow:hidden;超出宽度,则超出部分隐藏

overflow:scroll;超出宽度,则侧边出现滚动条

4、父类添加一个伪类,after

<body>
    <div id="father">
        <div class="layer01"><img src="images/1.jpg" alt=""/></div>
        <div class="layer02"><img src="images/2.jpg" alt=""/></div>
        <div class="layer03"><img src="images/3.jpg" alt=""/></div>
    </div>
</body>
#father:after{
    content:'';/*添加一个空内容,就像一个空的div*/
    display:block;
    clear:both;
}

小结

1.设置父元素的高度

简单,元素假设有了固定的高度,就会被限制

2.浮动元素后面增加空div

简单,代码中尽量避免空div

3.overflow

简单,下拉的一些场景避免使用

4.父类添加一个伪类:after(推荐使用)

写法稍微复杂,但是没有副作用。

对比

display

方向不可控制

float

浮动起来的话会脱离标准文档流,所以要解决父级边框塌陷问题

定位

相对定位

<style>
    div{
        margin:10px;
        padding:5px;
        font-size:12px;
        line-height:25px;
    }
    #father{
        border:1px solid black;
        padding:0;
    }
    #first{
        background-color:red;
        position:relative;/*相对定位:上下左右*/
        top:-20px;/*相对于原来位置,向上移动20*/
        left:20px;/*相对原来位置,左边增加20,即为向右移动*/
    }
</style>
<body>
    <div id="father">
        <div id="first">
            第一个盒子
        </div>
    </div>
</body>

相对定位:position:relative;

相对原来的位置,进行指定的偏移,仍在标准文档流中,原来的位置会被保留。

绝对定位

定位:基于XXX定位,上下左右

1、没有父级元素定位的前提下,基于浏览器定位

2、假设父级元素存在定位,我们通常相对父级元素进行偏移

3、在父级元素范围内移动

相对于父级或浏览器的位置进行指定的偏移,它不在标准文档流中,原来的位置不会被保留。

<style>
    div{
        margin:10px;
        padding:5px;
        font-size:12px;
        line-height:25px;
    }
    #father{
        border:1px solid black;
        padding:0;
        position:relative;/*不加这句下面的绝对定位就是相对于浏览器定位。*/
    }
    #first{
        background-color:red;
        position:absolute;/*绝对定位*/
        top:20px;/*相对父级元素,上方举例增加20*/
        left:20px;/*相对父级元素,左边增加20*/
    }
</style>
<body>
    <div id="father">
        <div id="first">
            第一个盒子
        </div>
    </div>
</body>

固定定位

<style>
    body{
        height:1000px;/*使浏览器产生滚动条*/
    }
    div:nth-of-type(1){/*绝对定位*/
        width:100px;
        height:100px;
        background:red;
        position:absolute;
        right:0;
        botton:0;
    }
    div:nth-of-type(1){/*固定定位*/
        width:50px;
        height:50px;
        background:yellow;
        position:fix;
        right:0;
        bottom:0;
    }
</style>
<body>
    <div>绝对定位</div>
    <div>固定定位</div>
</body>

滑动滚动条,绝对定位会随着变换,固定定位不会

z-index

层级问题,0最底,数字越大越高。

<style>
    div:nth-of-type(1){/*绝对定位*/
        width:100px;
        height:100px;
        background:red;
        line-height:100px;
        text-align:center;
        position:absolute;
        left:0;
        top:0;
        z-index:0;
    }
    div:nth-of-type(2){/*固定定位*/
        width:50px;
        height:50px;
        background:yellow;
        position:absolute;
        left:0;
        top:0;
        z-index:99;
        opacity:0.5;/*背景透明度*/
    }
</style>
<body>
    <div>第一层</div>
    <div>大气层</div>
</body>

动画

参考菜鸟教程,内容太多自行学习