首页 > 代码库 > CSS基础
CSS基础
一、什么是CSS
W3C标准中,倡导有3:其一为内容与表现分离,其二为内容与行为分离,其三为内容结构的语义化。其倡导中第一条的“表现”指的便可以说是CSS。CSS全称Cascading StyleSheets,中文名为层叠样式表,是一种用来表现HTML等文件样式的计算机语言。
二、CSS的常用选择器
1、标签选择器
写法:HTML标签名
作用:可以选中页面中,所有与选择器同名的HTML标签。
2、类选择器
写法:.class名{}
调用:在需要调用选择器样式的标签上,使用class="class名"调用选择器。
优先级:类选择器大于标签选择器 。两个起冲突时,优先级高的生效
3、id选择器
写法:#id名{}
调用:需要调用样式的标签,起一个id="ID名"
优先级:id选择器大于class选择器
注意:整个页面中,不能发出现同名ID
【class选择器与ID选择器的区别】
1、写法不同:class选择器用.声明,ID选择器用#声明。
2、优先级不同:ID选择器>class选择器。
3、作用范围不同:class选择器可以多次调用,ID选择器只能使用一次。
4、通用选择器
写法:*{}
作用:可以选中页面中所有的HTML标签。
优先级:最低!!!
5、并集选择器
写法:选择器1,选择器2,……,选择器n{}
生效规则:多个选择器取并集,只要标签满足其中任意一个选择器,样式即可生效。
6、交集选择器
写法:选择器1选择器2……选择器n{} 所有选择器紧挨着,没有分隔
生效规则:多个选择器取交集,则必须满足所有选择器的要求,才能生效。
7、后代选择器
写法:选择器1 选择器2 …… 选择器n{} 选择器之间有空格间隔
生效规则:只要满足,后一选择器是前一个选择器的后代,即可生效。(后代包括子代、孙代、重孙代。。。)通俗的讲:只要后一个选择器,在前一个选择器里面即可。
8、子代选择器
写法:选择器1>选择器2>……>选择器n{} 选择器之间用>间隔
生效规则:必须满足,后一个选择器是前一个选择器的直接子代,才能生效。(中间不能间隔人和标签)。
三、CSS导入方式和优先级
1、优先级的权重问题
1、css生效的第一原则是:近者优先!!即,哪个选择器作用于最里层标签,则这个选择器生效。
2、当选择器作用于同一层时,可以根据优先级权重,进行累加计算:
id选择器*100>class选择器*10>标签选择器*1
注意:并集选择器,相当于多个选择器拆开写,所以,并集选择器优先级不能累加。
3、当选择器作用于同一层,且优先级权重相等时。则,写在最后选择器生效。
2、引入css的三种方式
1、行内样式表:直接在HTML标签中,使用style=""的方式引用;
<div style="height:100px;"></div>
优点:使用灵活,优先级权重最高;
缺点:不符合w3c关于内容与表现分离的要求;不利于样式复用;
2、内部样式表:在<head></head>标签中,使用<style>标签包裹css代码
特点:一定程度的实现了HTML与css的分离,但是分离不够彻底,没有办法多页面公用样式。
3、外部样式表:将css单独写入css文件中,并与HTML文件关联。
优点:彻底实现HTML与css的分离,符合w3c规范,有利于多页面复用统一样式;
3、导入css文件的两种方式
①在<head>标签中,使用link链接:<link rel="stylesheet" type="text/css" href="http://www.mamicode.com/css/02_css.css" />
②在<style>标签中,使用@import导入; @import url("css/02_css.css");【一般不用】
4、【两种导入方式的区别】
①link属于标准的HTML标签,而@import不是标准标签
②link可以兼容所有低版本浏览器,而@import只在css2之后能用;
③link是将两个文件链接起来,起桥梁作用;而@import相当于将css文件复制到HTML文件中;
④link会在HTML文件边加载的过程中,边链接css文件;@import会在HTML文件全部加载完以后,再导入css文件;
综上所述,我们使用link链接的方式,加载css文件。
5、引入外部css样式表
rel:选择stylesheet
type:选择text/css:可以省略
href:表示链接的css文件路径
四、CSS常用文本属性
1、字体、字号类
①font-weight:字体粗细;bold-加粗 normal-正常 、lighter-细体
也可以使用100~900之间的数值。400表示normal,700表示bold
②font-style:字体样式。italic-倾斜、normal-正常
③font-size:字号。可以写px单位,也可以写%
200%表示浏览器默认大小(16px)的两倍=32px;
④font-family:字体系列(字体族)。可以直接写字体名,也可以写字体系列名;
常用字体系列:serif-衬线体 sans-serif-非衬线体;
font-family可以接收多个值,用逗号分隔。表示优先使用第一个,如果没有这种字体,依次向后使用。
通常一个值放字体系列名;
eg:font-family:"黑体","微软雅黑",sans-serif;
⑤font缩写形式:
>>>顺序必须是:
font-weight font-style font-size/line-height font-family
>>>不同属性之间,用空格分隔;
>>>font-size/line-height必须一组,用/分隔;
>>>font-family多个字体之间,用逗号分隔;
>>>eg:font:bold italic 6px/100px "微软雅黑",sans-serif;
2、字体颜色
①color:字体颜色 。可以使用单词、十六进制、RGB等
②opacity:透明度,可选值0-1
[opacity和rgba的区别]
rgba本身可以设置颜色,而opacity必须配合其他颜色属性来用;
rgba仅仅是让当前元素设置的所有文字、背景、子元素都透明;
CSS中的颜色表示方式
①直接使用颜色的英文单词表示:red、green、blue
②使用颜色的十六进制数表示:#ffff00
六位数,两两分组,分别表示红、绿、蓝的配比;
③RGB(0~255,0~255,0~255);三位数,分别表示红、绿、蓝的配比;
rdba();第四位数,表示透明度。
3、行距、对齐类
①line-height:行高。可以写px单位、可以直接写数字(表示默认行距的几倍)、
也可以写%(表示默认行距的百分比)
>>>行高重要作用:怎么让单行文字在div中垂直居中?
设置行高等于div的高度,即可让单行文字垂直居中。
②text-align:设置区域内的行级元素水平方式;left/center/right
③letter-spacing:字符间距,字与字之间的距离
④text-decoration:文本修饰:
underline-下划线、overline-上划线、line-through-删除线、none
⑤overflow:设置超出区域文字的显示方式。
>>>overflow;hidden;超出区域的文字隐藏不显示;
>>>overflow:scroll;无论文字多少,都会显示水平垂直滚动条;
>>>overflow:auto;自动,默认效果。文字多显示滚动条,文字少不显示滚动条;
>>>可以使用overflow-x和overflow-y单独修改两个方向的滚动条;
overflow-y:scroll;overflow-x:hidden;
⑥text-overflow:设置行末多余文字的显示方式;
>>>clip-多余文字裁剪掉 ellipsis-多余文字省略号显示
>>>显示省略号,需要配合white-space:nowrap;使用
>>>【重点内容】设置行末显示省略号:(三行代码,缺一不可)
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
⑦white-space:nowrap;设置中文行末,不断行显示
⑧text-indent:首行缩进。
⑨-webkit-text-stroke: 0.5px blue; 文字描边
-webkit:表示只要webkit内核的浏览器生效、常见的有chrome、safari
⑩text-shadow:文字阴影。有四个属性值,空格分隔;2px 2px 2px green;
>>>水平阴影距离,正数表示阴影右移,负数左移;
>>>垂直阴影距离,正数表示阴影下移,负数上移;
>>>阴影模糊距离,0表示阴影一点不模糊;
>>>阴影的颜色;
4、CSS常用背景属性
1、background-color:背景色
2、background-image:背景图。使用url("")选择背景图片。
背景图和背景色同时存在时,背景图覆盖背景色。
3、background-repeat:背景图的重复方式。
no-repeat:不平铺、repeat:平铺、repeat-x:沿x轴平铺、repeat-y:沿y轴平铺。
4、background-size:背景图的大小
[指定宽度、高度]
>>>宽度高度的指定,可以写px,也可以写%(父容器宽高的百分比)
>>>当写两个属性时,分别表示宽度、高度;
当写一个属性时,表示宽度、高度将会等比缩放;
[其他属性值]
>>>contain:图片等比缩放,直到宽或高中较大的一边缩放到100%为止。
(可能导致较短的一边<100%,图片无法盖住全部区域)
>>>cover:图片等比缩放,直到宽或高中较小的一边缩放到100%为止。
(可能导致较大的一边>100%,图片超出区域显示不全)
5、background-position:背景图偏移量
>>>指定位置:left/center/right top/center/bottom
当只写一个值时,另一个默认居中。
>>>指定坐标:两个属性分别表示 水平位移 垂直位移
①坐标的值,可以是px单位,也可以是百分数
②当写像素单位时:(左负右正,上负下正)
水平方向:正数右移,负数左移
垂直方向:正数下移,负数上移
③当写%(百分数)时:
一般只能是正数。表示的是,去掉图片的宽高,剩余空白区域的分布比例。
eg:background-position:30% 水平方向去掉图片宽度,剩余区域3:7分。
5、CSS伪类选择器
1、写法:伪类选择器,在选择器后面,用:分隔,紧接伪类状态;
eg: .a:link
2、超链接的伪类状态:
:link:未访问状态 :visited已访问状态
:hover-鼠标指上状态 :active-激活选定状态(鼠标点下未松开)
注意:当超链接多种伪类状态同时存在时,必须按照link-visited-hover-active的顺序,
否则会导致部分选择器不生效
3、input的伪类状态:
:hover :focus(获得焦点状态) :active
注意input的多种状态同时存在时,必须按照上面的顺序;
4、其他标签,基本只用:hover事件;
6、CSS盒子模型
1、margin 外边距
①、只写一个值:表示四周的外边距均为指定的值;
②、写两个值:第一个数为上下外边距 第二个数为左右外边距;
③、写三个值:分别表示上右下三个方向,左边默认等于右边;
④、写四个值:表示上右下左四条边顺时针方向;
⑤、margin:0 auto;设置块级元素,在父容器中水平居中!!!
2、padding 内边距
设置方式与magin完全相同;
注意:设置padding,将会导致div区域被撑大!!!使用时必须注意div的实际的宽高是多少!!!!
3、边框
1、设置边框需要三个属性:宽度,样式,颜色 原则上三个属性缺一不可,顺序可以随便修改;
2、可以使用top、right、bottom、left分别设置四个边
4、当父盒子包裹子盒子,给子盒子添加margin-top时,子盒子与父盒子的上边线并不能分开,而是会导致,两个盒子同时掉下来。
[解决办法]
1、给父盒子添加一点padding-top;不推荐使用,会导致父盒子结构多余1px的padding;
2、给父盒子添加1px的border-top;同样会导致1px的多余空间,不推荐使用;
3、给父盒子或者子盒子添加浮动;可能会由于浮动,一定程度的影响页面的布局;
4、给父盒子添加overflow属性;推荐使用的方式。
5、border-radius 圆角
1、border-radius可以接受8个属性值,分别表示:x轴(左上、右上、右下、左下角)/y轴(左上、右上、右下、左下角)
eg:border-radius:10px 20px 30px 40px/10px 20px 30px 40px
2、缩写形式:
只写x轴,y轴将默认等于y轴;
四个角写不全,默认对角相等;
只写一个值,默认8个数均等;
eg:border-radius:50px 20px;
3、当圆角弧度>=正方形边长一半,将会显示为圆形。
6、border-image 图片边框
1、border-image:一共可以放10个属性值:
①图片的路径:url();
②图片的切片宽度:4个值,分别代表上下左右四跳边;
通过4个切线切割,可以将图片分为九宫格,九宫格四个角分别对应边框的四个角(不会进行任何拉伸),九宫格四个边分别对应四条边框(会根据设置进行拉伸/铺完/重复等操作)
注意:写的时候必须不能带px单位!!!!!
③边框的宽度:4个值,分别代表上右下左四条边框的宽度;
注意:写的时候必须带px单位,与切片宽度用/分隔
④边框的重复方式:stretch(拉伸)、round(铺满)、repeat(重复)
[round和repeat的区别]
round:会对四条边进行适当的拉伸、压缩,确保四条边可以重复整数次;
repeat:会保持每条边的宽度长度比例不变,可能导致四角处,无法显示一条完整的边;
7、box shadow 盒子阴影
6个属性值,用空格分隔;
①x轴阴影距离(必选):可正可负,正----右移,负----左移;
②y轴阴影距离(必选):可正可负,正----下移,负----上移;
③阴影的模糊半径(可选):只能是正数,默认为0.数值越大,阴影越模糊;
④阴影扩展半径(可选):可正可负,默认为0,数值增大,阴影扩大;数值减小,阴影减小;
⑤阴影颜色(可选):默认为黑色
⑥内外阴影(可选):默认为外阴影。 inset表示内阴影
8、盒子模型分类
1、 标准盒子(W3C盒子): 我们设置的宽度和高度,仅仅包含content部分; 再添加padding或border,会导致盒子变大;
2、 IE盒子(怪异盒子): 我们设置的宽度和高度,包含content+padding+border;再添加padding或border,会压缩content区域,但盒子总大小不变;
7、CSS浮动
1、标准流中的块级盒子,宽度将会自动伸展为100%;而浮动的块级盒子,宽度不会自动伸展,而是由内容撑开;
2、 当一个盒子浮动, 标准流中未浮动的其他盒子,将视浮动盒子不存在而占据浮动盒子原来的位置。(浮动盒子,会盖在这个盒子的上方),但是,未浮动盒子中的文字内容,将会受到浮动盒子宽度的影响。(未浮动盒子中的内容,不会被浮动盒子盖住)
3、由于第二条的原因。可以给受影响的盒子,添加clear属性,清除掉浮动盒子对自身的影响。
clear可选值:left-清除左浮动影响, right-清除右浮动影响;
both-同时清除左右浮动影响 ,常选;
4、 父盒子没有指定高度。 如果子盒子没有浮动,则父盒子的高度可以被子盒子撑开。如果,父盒子中的所有子盒子都浮动,则父盒子高度将变为0;
[解决所有子盒子浮动,父盒子高度塌陷的问题]
① 给父盒子也添加浮动;
② 给父盒子添加overflow属性; 推荐使用!!!
③ 在父盒子最后,添加一个高度为0的空div。 给这个div添加clear: both;属性,清除掉浮动效果。
④可以将第三条的div,用伪对象选择器::after实现:
#div4::after{
display:block;
content:"";
height:0px;
clear:both;
}
8、CSS定位
[相对定位 relative]
1、使用position: relative;设置元素为相对定位元素;
2、使用top、right、left调整元素的位置。当left和right同时存在时,left生效;top和bottom同时存在时,top生效。
3、定位机制:
①相对定位时相对于自己原来的位置定位。当top等属性不指定时,元素位置不会发生改变
②相对定位,不会释放掉元素在原有文档流中的位置。不会影响其他文档流元素的位置;
4、关于元素z轴重叠
①定位元素,默认的z轴高于普通文档流元素。
②同为定位元素,后来者居上。后面的盖住前面的。
③可以使用z-index手动调节定位元素的上下层z轴顺序。
z-index默认为0,而且只能用于定位元素。
[绝对定位]
1、使用position:absolute;设置元素为绝对定位;
2、定位机制:
①相对于第一个非static定位的祖先元素进行定位。(即相对于使用了relative、absolute、fixed定位的祖先元素进行定位)
②如果所有的祖先元素都未定位,则相对于浏览器左上角进行定位;
③使用absolute的元素,会从文档流中完全删除。原有空间会被释放。
[固定定位]
1、使用position:fixed;设置固定定位;固定定位,是一种特殊的绝对定位!!!!只是祖先元素无法使用定位锁住;
2、定位机制:永远相对于浏览器的左上角进行定位,而且不随滚动条的滚动而滚动
[z-index属性]
1、作用:根据z-index属性设置的数值,决定元素在z轴方向上的层叠次序;
2、使用要求:
①z-index 只能给定位元素调整层叠次序。relative、absolute、fixed
②元素的z-index属性,要考虑父容器z-index的约束:
>>>如果父容器设置了z-index属性,则子容器的所有元素,将不能脱离父容器层次的约束。(即,父容器设置了z-index,则子容器只能以父容器的数值为准。再给子容器设置z-index,只能调整子容器在父容器层次之内的层叠次序)
>>>如果父容器没有设置z-index,或者设置z-index:auto;则子容器调整z-index将不受父容器层次约束。
3、z-index:auto和z-index:0的异同点
①z-index:auto;是默认值,与z-index:0;处于同一个平面;
②z-index:0;会约束子元素必须与父容器在同一平面;
z-index:auto;不会约束子元素的层次;
[clip属性]
1、作用:clip属性用于裁切图片标签,显示图片的指定区域;
2、使用要求:clip属性,只能作用于有absolute或fixed定位的图片标签上;
3、clip属性,接受一个rect()函数,函数传入四个值,分别表示上右下左四条切线的位置;
注意:与其他属性不同的是,rect中的四个值,上下两个值的距离都是从上边量取;左右两个值都是从左边量取;
CSS基础