CSS(一). 基础

114 阅读5分钟

CSS:层叠样式表(级联样式表)
<style> CSS样式 </style>

1. css产生的原因

随着HTML的成长,为了满足页面设计者的要求,HTML添加了很多显示功能。但是随着这些功能的增加,HTML变的越来越杂乱。于是CSS便诞生了,让HTML从样式中解脱苦海,HTML专注去做结构呈现,样式交给CSS。

2.样式规则

1.选择器用于指定css样式作用的HTML对象,花括号内是对该对象设置的具体样式。
2.属性和属性值以“健值对”的形式出现。
3.属性是对指定的对象设置的样式属性,例如字体大小、文本颜色等。
4.属性和属性值之间用英文“:”链接。
5.多个“键值对”之间用英文“;”进行分区。

3. 字体样式属性

3.1 font-size 字号大小

  • 相对长度单位:em(相对于当前对象内文本的字体尺寸),px(像素,最常用)
  • 绝对长度单位:in(英寸)、cm(厘米)、mm(毫米)、pt(点)

相对长度比较常用,推荐使用px

3.2 font-family:字体

{font-family:"微软雅黑";}{font-family:"microsoft yahei"}

支持中文

注意事项:

  1. 现在网页中普遍使用14px+。
  2. 尽量使用偶数的数字字号,ie6等老式浏览器支持奇数会有bug。
  3. 各种字体之间必须使用英文状态下的逗号隔开。{font-family:"microsofr yahei",tahoma,arial} 系统会首先使用microsoft yahei,没有这个字体的话使用tahoma。
  4. 中文字体需要加英文状态下的引号,英文字体一般不需要加引号。当需要设置英文字体时,英文字体名必须位于中文字体名之前。
  5. 如果字体名中包含空格、#、$等符号,则该字体必须加英文状态下的单引号或双引号,例如“microsoft yahei”,"Times New Roman"
  6. 尽量使用系统默认字体,保证在任何用户的浏览器中都能正确显示。

3.3 unicode字体

在CSS中设置字体名称,可以直接写中文。但在文件编码不匹配时会产生乱码错误。这时候可以用Unicode编码来写字体名称可以避免这些错误。使用Unicdoe字体时要加引号。

3.4 font-weight:字体粗细

取值:
1.normal,正常字体,相当于400
2.bold,粗一点,相当于700
3.bolder定义比继承值更重的值
4.lighter定义比继承值更轻的值
5.用数字表示文本字体的粗细。范围100~900(100的整数倍)

3.5 font-style:字体倾斜

取值:
1.normal:指定文本字体样式为正常的字体
2.italic:指定文本字体样式为斜体,对于没有设计斜体的特殊字体,如果要使用斜体外观将应用oblique
3.oblique:指定文本字体样式为倾斜的字体,人为的使文字倾斜,而不是去选取字体中的斜体字

3.6 字体综合

选择器{font: font-style font-weight font-size/line-height font-family;}

使用font属性时,必须按上面语法格式中的顺序书写,不能更换顺序,各个属性以空格隔开。

注意:其中不需要设置的属性可以省略(取默认值),但必须保留font-size和font-family属性,否则font属性将不起作用。

4 选择器

命名规则: 1.长名称或词组可以使用中横线来为选择器命名。 2.不建议使用"_"下划线来命名css选择器 3.不要纯数字、中文等命名,尽量使用英文字母表示。

4.1 标签选择器

4.2 类选择器

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<!-- <title>第一个HTML5</title> -->
	<style>
		
		.star { 
			color:red;
			
		}
	</style>
</head>
<body>
	<div class="star">刘德华</div>
	<div >鸣人</div>
	<div >路飞</div>

</body>
</html>

4.3 多类名选择器

<span class="color-blue font200">G</span>

1.样式显示效果跟HTML元素中的类名先后顺序没有关系,受css样式书写的上下顺序有关。
2.各个类名中间用空格隔开。

4.4 id选择器

<span id="big">大哥</span>
#big{ color:red; }

注意:类选择器可以多次重复使用,id选择器不能重复,只能使用一次。

id选择器和类选择器区别

W3C标准规定,在同一个页面内,不允许有相同名字的id对象出现,但是允许相同名字的class。

类选择器(class) 好比人的名字, 是可以多次重复使用的, 比如 张伟 王伟 李伟 李娜

id选择器 好比人的身份证号码, 全中国是唯一的, 不得重复。 只能使用一次。

id选择器和类选择器最大的不同在于 使用次数上。

4.5 通配符选择器

*{属性1:属性值1;属性2:属性值2}

4.6 伪类选择器

4.6.1 链接伪类选择器

  • :link : 未访问的链接
  • :visited : 已访问的链接
  • :hover : 鼠标移动到连接上
  • :active : 选定的链接,当我们点击别松开鼠标显示的装填

注意:他们的顺序不能颠倒。 记忆 lvha lv包包很hao

a {   /* a是标签选择器  所有的链接 */
			font-weight: 700;
			font-size: 16px;
			color: gray;
		}
a:hover {   /* :hover 是链接伪类选择器 鼠标经过 */
			color: red; /*  鼠标经过的时候,由原来的 灰色 变成了红色 */
}

4.6.2 结构(位置)伪类选择器 (CSS3)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<!-- <title>第一个HTML5</title> -->
	<style>
		
		li:first-child{
			color: red;
		}
		
		li:last-child{
			color:green;
		}

		li:nth-child(5){
			color:pink;
		}





	</style>

</head>
<body>
	
	<ul>
		<li>第一个孩子</li>
		<li>第二个孩子</li>
		<li>第三个孩子</li>
		<li>第四个孩子</li>
		<li>第五个孩子</li>
		<li>第六个孩子</li>
		<li>第七个孩子</li>
	</ul>


	<div><li>第八个孩子</li></div>

</body>
</html>

上面代码运行结果: 第一个孩子和第八个孩子是红色,第七个孩子是蓝色,第五个孩子是粉色,第六个孩子是橙色。

  • :first-child:选取属于其父元素的首个子元素的指定选择器
  • :last-child:选取属于其父元素的最后一个子元素的指定选择器
  • :nth-child(n):匹配属于其父元素的第N个子元素,不论元素的类型。even偶数,old奇数 n从0开始
  • :nth-last-child(n):选择器匹配属于其父元素的第N个子元素,不论元素的类型,从最后一个子元素开始计数。n可以是数字、关键词或公式

li:nth-child(even){ color: red; } 结果:第二、四、六个孩子变红色

li:nth-child(2n-1){ color: red; } 结果:第一、三、五、七个孩子变红色

注意:冒号和“li”和“first-child"”中间不能有空格。

4.6.3 目标伪类选择器

:target{
			color:red;
		}

:target 目标伪类选择器:可用于选取当前活动的目标元素

<!DOCTYPE html>
<html>
 
<head>
    <title></title>
    <style type="text/css">
        #big-bam-boom:target {
            color: red;
        }
    </style>
</head>
 
<body>
    <h1 id="big-bam-boom">Kaplow!</h1>
    <div style="height: 800px"> </div>
    <a href="#big-bam-boom">Mission Control, we're a little parched up here.</a>
</body>
 
</html> 

点击滚动到id为big-bam-boom的位置,并且变红。 如果不加 #big-bam-boom:target { color: red; } 只会滚动到big-bam-boom,而不会变红。

5.css外观属性

5.1 color

1.green,red,blue
2.十六进制 #00ff00
3.rgb: rgb(255,0,0)或rgb(100%,0%,0%)

提倡十六进制

5.2 行间距

line-height属性用于设置行间距,就是行与行之间的距离。三种值分别为px,相对值em和百分比%。一般用px。一般情况下,行间距比字号大7.8个像素就可以了。

5.3 text-align:水平对齐方式

left:左对齐(默认值) right:右对齐 center:居中对齐

5.4 text-indent:首行缩进

其属性值可为不同单位的数值,em的倍数,浏览器窗口宽度的百分比%,允许使用负值,建议使用em作为设置单位。

1em就是一个字的宽度,如果是汉字的段落,1em就是一个汉字的宽度。

5.5 letter-spacing:字间距

5.6 word-spacing:单词间距

对中文无效。letter-spacin和word-spacing均可对英文设置,只不过letter-spacing是定义字母间的间距,word-spacing是定义英文单词间的间距

5.7 半透明

color:rgb(r,g,b,a) a是alpha透明的意思,取值0~1.

5.8 文字阴影

text-shadow:水平位置 垂直位置 模糊距离 阴影颜色;

前两项是必须的,后两项可以选写。

6.样式显示模式

6.1 行内样式表(内联样式表)

是通过标签的style属性来设置元素的样式,基本语法: <标签名 style:"属性1:值1;属性2:值2">内容</标签名>

实际上任何HTML标签都有style属性。只对其所在的标签及嵌套在其中的子标签起作用。
修改一些小样式,快速完成。

6.2 内部样式表

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>综合案例</title>
	<style type "text/css"> <!-- teype类型 css文本 -->
		div{
			color:red;
		}
	</style>
</head>
<body>
	<div>内部样式表</div>
</body>
</html>

1.style标签一般位于head标签title之后,也可以放在html文档的任何地方。
2.type "text/css" 在HTML5中可以省略。

6.3 外部样式表(外链表)

	<head>
		
		<link rel="stylesheet" href="CSS文件路径" type="text/css">

	</head>

css文件里只能写css,不能写任何标签。

href:定义所链接外部样式表文件的URL,可以是相对路径,也可以是绝对路径。
type:定义所链接文档的类型,在这里需要指定为“text/CSS”,表示链接的外部文件为CSS样式表。
rel:定义当前文档与被链接文档之间的关系,在这里需要指定为“stylesheet”,表示被链接的文档是一个样式表文件。

==总结:行内样式表,权重高==

7. 标签的类型(显示模式)

HTML标签一般分为块标签和行内标签。

7.1 块级元素(block-level)

常用的 <h1>~<h6>,<p>,<div>,<ul>,<li>,<ol>

div是最典型的

块级元素特点:
1.总是从新行开始.
2.高度、行高、外边距以及内边距都可以控制。
3.宽度默认是容器的100%。(一整行的100%)
4.可以容纳内联元素和其他块元素。

7.2 行内元素(inline-level)

常用的<a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、<span>

span是最典型的。

行内元素特点:
1.和相邻的元素在一行上。
2.宽高是无效的,但水平方向的padding和margin可以设置,垂直方向无效。
3.行内元素只能容纳文本或者其他行内元素。(a特殊)。

注意:
1.文字类的块级元素,不能再放其他块级元素。只有文字才能组成段落,因此p里面不能放块级元素,同理还有这些标签h1,h2,h3,h4,h5,h6,dt。他们都是文字类块级标签,里面不能放其他块级元素。
2.链接里面不能再放链接。

7.3.行内块元素(inline-block)

行内元素有几个特殊标签,<input /> <img /> <td></td> 可以设置宽高和对齐属性。

特点:
1.和相邻行内元素在一行上,但是之间会有空白缝隙。
2.默认宽度就是它本身内容的宽度。
3.高度,行高,外边距以及内边距都可以控制。

7.4 标签显示模式转换display

块转行:display:inline
行转块:display:block
块、行元素转成行内块:dispaly:inline-block

8 复合选择器

8.1 交集选择器

交集选择器有两个选择器构成,第一个为标签选择器,第二个为类选择器。结构

h3.class{ 属性1:值;属性2:值;}

8.2 并集选择器(选择器分组)

如果某些选择器定义的样式完全相同,或部分相同,就可以利用并集选择器为他们定义相同的样式。

.class,h3{color:red;font-size:25px;}

所有选择器都会执行后面的样式。任何形式的选择器都可以构成并集选择器(标签选择器,类选择器,id选择器)

8.3 后代选择器(包含选择)

用来选择元素或元素组的后代,写法是外层标签写在前面,内层标签写在后面,中间用空格分割。当标签发生嵌套时,内层标签就成为外层标签的后代。

.class h3{color:red;font-size:25px;}

子孙后代都可以这么选择。或者说,它能选择任何包含在内的标签。

8.4 子元素选择器

子元素选择器只能选择作为某元素子元素的元素。其写法就是把父级标签写在前面,子级标签写在后面,中间跟>进行连接,==注意符号左右两侧各留一个空格==。 .class > h3{color:red;font-size:25px;}

这里的 子 指的是亲儿子 不包含孙子 重孙子之类。

==注意下面两个例子:==
例1:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>综合案例</title>
	<style type "text/css">
		

	.item >li{   
		color: #0f0;
	}


	/*效果是,全部菜单都变成绿色,因为子结构如果没有样式,会继承父结构的样式*/
	

		
	</style>
</head>
<body>
	
	<ul class="item">
		<li>一级菜单1
			<ul>
				<li>二级菜单1</li>
				<li>二级菜单2</li>
			</ul>
		</li>
		<li>一级菜单2
			<ul>
				<li>二级菜单1</li>
				<li>二级菜单2</li>
			</ul>
		</li>
		<li>一级菜单3
			<ul>
				<li>二级菜单1</li>
				<li>二级菜单2</li>
			</ul>
		</li>
	</ul>

</body>
</html>

效果是,全部菜单都变成绿色,因为子结构如果没有样式,会继承父结构的样式

例子2:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>综合案例</title>
	<style type "text/css">
		
	.item li {
		color: #f00;
	}


	.item >li{   
		color: #0f0;
	}



		
	</style>
</head>
<body>
	
	<ul class="item">
		<li>一级菜单1
			<ul>
				<li>二级菜单1</li>
				<li>二级菜单2</li>
			</ul>
		</li>
		<li>一级菜单2
			<ul>
				<li>二级菜单1</li>
				<li>二级菜单2</li>
			</ul>
		</li>
		<li>一级菜单3
			<ul>
				<li>二级菜单1</li>
				<li>二级菜单2</li>
			</ul>
		</li>
	</ul>

</body>
</html>

效果是:一级菜单绿色,二级菜单粉红色。

8.5 属性选择器

  1. a[title]{color:red; } a标签中带有title属性的都变红
  2. input[type=text] input标签中 属性type值完全等于text的
  3. div[class^=font] div标签中class属性值以font开头的
  4. div[class$=footer] div标签中class属性值以footer结束的
  5. div[class*=jd] div标签中class属性值包含jd的
/* 获取到 拥有 该属性的元素 */
li[type] {
  border: 1px solid gray;
}
/* 获取 属性等于某个值的 元素 属性值 可以使用 引号进行包裹 */
li[type="vegetable"] {
  background-color: green;
}
/* 使用空格分隔的 多个属性 其中有某个属性即可获取 */
li[type~="hot"] {
  font-size: 40px;
}
/* 获取以某个属性开头的语法  */
li[color^='green'] {
  background-color: orange;
}
/* 获取以某个值 结尾的属性 */
li[type$='t']{
  color: hotpink;
  font-weight: 900;
}

/* 获取 属性中 拥有某个值的 元素 */
li[type*=ea] {
  font-size: 100px;
}
/*  如果属性的值 只有very 也能够获取  用来获取 多个属性 并且 使用-连接 */
li[price|='very'] {
  background-color: darkred;
}
<ul>
  <li type='fruit' color='green'>西瓜</li>
  <li type='vegetable' color='greenyellow'>西兰花</li>
  <li type='meat'>牛肉</li>
  <li type='meat hot'>猪肉</li>
  <li type='drink hot'>可乐</li>
  <li type='drink hot'>雪碧</li>
  <li price='very-cheap'>红酒</li>
  <li price='very'>白酒</li>
</ul>

8.6 伪元素选择器

.demo 类选择器
:first-child 伪类选择器
::first-letter 伪元素选择器

  1. E::first-letter E元素文本的第一个单词或字
  2. E::first-line E元素文本第一行;
  3. E::selection E元素可改变选中文本的样式;
  4. E::before和E::after 在E元素内部的 开始位置和结束位置创建一个元素,该元素为行内元素,且必须要结合content使用。例如:div::before{content:"呵呵";} 在div盒子内部开始的地方插入"呵呵";
p::first-letter {
  font-size: 20px;
  color: hotpink;
}

/* 首行特殊样式 */
p::first-line {
  color: skyblue;
}

p::selection {
  /* font-size: 50px; */
  color: orange;
}

9. CSS书写规范

1.选择器与{之间必须包含空格
2.属性名与之后的:之间不允许包含空格,与属性值 之间必须包含空格。
3.并集选择器,每个选择器声明必须独占一行。示例:

    .post,
    .page,
    .comment {
        line-height: 1.5;
    }

==「建议」==:选择器的嵌套层级应不大于3级,位置靠后的 限定条件应尽可能精确。

4.属性定义必须另起一行。
5.属性必须以分号结尾。

10.CSS背景

  • backgroud-image: 允许指定一个图片展示在背景中(只有CSS3才可以多背景)可以和 background-color 连用。 如果图片不重复地话,图片覆盖不到地地方都会被背景色填充。 如果有背景图片平铺,则会覆盖背景颜色。

  • repeat

    repeat :  背景图像在纵向和横向上平铺(默认的)

    no-repeat :  背景图像不平铺

    repeat-x :  背景图像在横向上平铺

    repeat-y :  背景图像在纵向平铺

    设置背景图片时,默认把图片在水平和垂直方向平铺以铺满整个元素。

  • position

background-position : length || length

background-position : position || position 

length :  百分数 | 由浮点数字和单位标识符组成的长度值。
position :  top | center | bottom | left | center | right

  1. position 后面是x坐标和y坐标。 可以使用方位名词或者 精确单位。
  2. 如果和精确单位和方位名字混合使用,则必须是x坐标在前,y坐标后面。比如 background-position: 15px top; 则 15px 一定是 x坐标 top是 y坐标。
  3. 必须先指定background-image属性

  • background-attachment

scroll :  背景图像是随对象内容滚动
fixed :  背景图像固定

  • 简写

没有强制标准,建议:

background:背景颜色 背景图片地址 背景平铺 背景滚动 背景位置

background: transparent url(image.jpg) repeat-y  scroll 50% 0 ;
  • backgroud-size 背景图片尺寸

a) 可以设置长度单位(px)或百分比(设置百分比时,参照盒子的宽高)

b) 设置为cover时,会自动调整缩放比例,保证图片始终填充满背景区域,如有溢出部分则会被隐藏。

c) 设置为contain会自动调整缩放比例,保证图片始终完整显示在背景区域。

background-image: url('images/gyt.jpg');
background-size: 300px 100px;
/* background-size: contain; */
/* background-size: cover; */
  • 多背景(CSS3)

逗号分隔

background-image: url('images/gyt.jpg'),url('images/robot.png');

11.文本的装饰

text-decoration 通常我们用于给链接修改装饰效果

描述
none默认。定义标准的文本。
underline定义文本下的一条线。下划线 也是我们链接自带的
overline定义文本上的一条线。
line-through定义穿过文本下的一条线。