幕客前端基础入门-css选择的艺术

1. CSS简介

CSS:Cascading Style Sheets层叠样式表,用来定义html内容在浏览器内的显示样式。
为什么学习css?

在html中通过标签属性也可以设置背景颜色、文字样式,但这样会导致网页的容量会很大,所以css为我们带来了以下的优势
     1.css简化html相关标签,网页体积小,下载快
      2.解决内容与表现分离的问题
      3.更好地维护网页,提高工作效率

学习内容

  • css基础语法
  • css使用方法
  • css选择器
  • css继承和层叠
  • css优先级
  • css命名规范

2. css基础语法

<!DOCTYPE HTML>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<style type="text/css">
		/*选择器{属性:值;属性:值;} 其中一对属性值就是一个声明*/
		h1{color:red;font-size:20px;}
		/* 多个标签使用同一个样式,用英文' , '分隔 */
		h1,h2,p{
			font-size: 20px;
		}
		p{color: red;font-family: "DFKai-SB";}
		h2{color:blue;}
		/*css注释*/
	</style>
</head>
<body></body>
</html>

3 CSS使用方法

CSS引用有4种方式:行内样式(内联样式)、内部样式表(嵌入样式)、外部样式表、导入式

3.1.行内样式

<h1 style="color: red;font-size: 15px">行内样式</h1>

3.2.内部样式表

<head>
	<style type="text/css">
	<!--
		.spical{
			color: red;
			text-decoration: underline;
		}
	-->
	</style>
</head>

对于一些浏览器不识别style标签的时候,可以使用html注释标签把样式包括起来。浏览器有自己的版本,例如IE6、7、8,Chrome等。在style使用html注视标签包含样式表的目的是针对这些低版本的浏览器。
对于一些低版本的浏览器,它不识别style标签。这时候它就会把样式表的内容先是在页面上,为了避免这个现象,就需要在style标签添加html注释包含我们的样式。这样低版本的浏览器不识别style标签,也不会把样式表的内容限制在页面上。对于高版本的浏览器来说,他识别style标签,就会忽略html注释标签,去解析样式表。

3.3. CSS外部样式

把CSS样式代码写在独立的一个文件中,然后引入

<head>
      <link rel="stylesheet" type="text/css" href="muke.css">
</head>

3.4. CSS导入式

<head>
	<style type="text/css">
		@import "muke.css";
		或@import url(muke.css);
	</style>
</head>

3.5. CSS使用方法的区别

类别引入方法位置加载
行内样式标签内stylehtml文件内同时
内部样式 <head>中<style>内
链入外部样式 <head>中<link>引用css样式文件与html文件分离页面加载时,同时加载css样式
导入式@import在<head>中<style>最开始处在读取完html文件之后加载

使用链入外部样式的好处

  • 1.css和html分开管理
  • 2.多个文件可以使用同一个样式文件
  • 3.多文件引用同一个CSS文件,CSS只需要下载一次。

3.6 CSS使用方法优先级

问题:对于同一个元素,同时使用这些方法来设置CSS样式,那种犯法才能真正的起作用呢?

  • 行内样式优先于内部样式
  • 内部样式优先于导入式样式
  • 内部样式和外部链接优先级取决于前后位置
<!DOCTYPE html>
<html>
<head>
	<title></title>
	<style type="text/css">
		@import "muke.css";
		p1{
			color: blue;font-size: 30px;
		}
	</style>
	<!-- <link rel="stylesheet" type="text/css" href="muke2.css"> -->
</head>
<body>
<p style="color:red;font-size: 10px">行内优先</p>
<p>离谁近,就是谁</p>
</body>
</html>

muke.css

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

muke2.css

p{color:green;font-size: 100px;}

总结

  • 行内样式优先
  • 其他样式取决于距离标签远近,越近越优先。

4. CSS选择器

css规则有两部分构成:选择器、声明

<!-- 选择器{声明(属性:值);}-->

4.1 标签选择器

p1{color: blue;font-size: 30px;}

以html标签作为选择器。通过标签选择器设置样式,那使用该标签的内容都是用该样式。

4.2 类选择器

.tip{color: blue;font-size: 30px;}

为html标签添加class属性,通过类选择器来为具有词class属性的元素设置css样式。可对不同类型元设置同一个样式规则。同一个标签可以设置多个类,类之间用空格隔开。

注意:ID和类选择器区分大小写

4.3 ID选择器

#desc{color: blue;font-size: 30px;}

html标签添加ID属性,通过ID选择器来对具有此ID的元素设置CSS样式。
ID选择器不能象class选择器一样定义多个标签,ID是唯一的,相当于身份证。同一个元素也不能同时引用多个ID。

4.4 全局选择器

*{color:blue;...}

所有标签设置样式,使用通配符选择器。
使用通配符会影响整个页面中所有元素的效果。所以在使用的时候,一定要谨慎。以往在开发的过程中,使用全局选择器在最开始现将所有元素的边距等样式去掉。

4.5 群组选择器

p,h1,h2{color:red};

从一个元素到另一个元素,跨越了一层或多层的元素,就是祖先与后代的关系。body部分是浏览器展现的内容。html是所有元素的祖先,html成为根元素,具有相同父元素之间的元素,我们成为兄弟元素。

4.6 后代选择器

<style>
      /*p标签下面的em标签,使用空格分隔 */
      p em{font-size:40px;}
</style>

后代选择器虽然提高了效率,但是由于后代选择器权重和优先级的问题,它会影响我们样式的冲突,所以在使用后代选择器的时候,一定要注意这个问题(样式的冲突和权重优先级)。

4.7 伪类选择器

在不同状态下显示不同样式的方法,用id,class是无法设置的,需要使用伪类来设置。

:link未访问的链接仅限于链接
:visited已访问的链接仅限于链接
:hover鼠标悬停状态可用于其他元素
:active激活状态,即按下元素之后放开鼠标之前的时间可用于其他元素

链接伪类的顺序 :link>:visited>:hover>:active

  • 1.a:hover必须至于a:link和a:visited之后,才有效
  • 2.a:active必须置于a:hover之后,才有效
  • 3.伪类名称对大小不敏感

针对不同链接设置不同样式,只需加上类或id即可

        a:link{color:red;}
        a:visited{color:green;}
        a.one:hover{font-size:30px;font-weight: bold;}
        a:active{color:orange;}
        a{text-decoration: none}

5.CSS继承、层叠和优先级

5.1 CSS继承

CSS继承:从父元素继承部分CSS属性
继承的好处:

  • 1.父元素设置样式,自元素可以继承部分属性
  • 2.减少CSS代码
<!DOCTYPE html>
<html>
<head>
	<title></title>
	<style type="text/css">
		p{color: red}
		div{font-size: 10px}
	</style>
</head>
<body>
	<div>
		<p>CSS<span>继承</span></p><!-- span标签继承p标签的样式 -->
		<div>CSS层叠</div>
	</div>
	<p>疑是地上霜</p>
</body>
</html>

5.2 CSS层叠

  • 可以定义多个样式
  • 不冲突时,多个样式可层叠为一个
  • 冲突时,按不同样式规则的优先级来应用样式
<!DOCTYPE html>
<html>
<head>
	<title></title>
	<style type="text/css">
		p{color: red}
		.one{font-size: 20px}
		span{color: blue}
	</style>
</head>
<body>
	<p class="one">床前明月光,<span>疑是地上霜</span></p>
</body>
</html>

6 CSS选择器优先级

  • ID选择器>class选择器>标签选择器
  • 同类样式多次引用,样式表中后定义的优先级高,就近原则
<!DOCTYPE html>
<html>
<head>
	<title></title>
	<style type="text/css">
		div{color: red;}
		#idgreen{color: green;}
		.classyellow{color:yellow;}
		.classblue{color:blue;}
		div{color:gray;}
	</style>
</head>
<body>
	<p>单独使用</p>
	<div>使用标签选择器样式</div>
	<div id="idgreen">使用ID样式“绿色”</div>
	<div class="classblue">使用class样式“蓝色”</div>
	<!-- 优先级结果:ID选择器>标签选择器;class选择器>标签选择器 -->
	<p>同一个元素引用标签、ID、class定义的样式</p>
	<div id="idgreen" class="classblue">CSS优先级,同时引用标签、ID、class定义的样式</div>
	<div class="classblue" id="idgreen">CSS优先级,同时引用标签、ID、class定义的样式</div>
	<!-- 优先级结果:ID选择器>class选择器>标签选择器 -->
	<p>同一个元素引用多个class定义的样式</p>
	<div class="classblue classyellow">CSS优先级,蓝色在前,黄色在后</div>
	<div class="classyellow classblue">CSS优先级,黄色在前,蓝色在后</div>>
	<p>同一个元素引用多个标签样式</p>
	<div>CSS优先级</div>
	<!-- 优先级结果:同类样式多次引用,样式表中后定义的优先级高,就近原则 -->
</body>
</html>

选择器优先级规则
同一样式表中:

  • 权值相同,就近原则(离备设置元素越近,优先级越高)
  • 权值不同,根据权值来判断样式,哪种CSS样式权值高,就采用哪种。
选择器权值
通配符选择器0
标签选择器1
类选择器和伪类选择器10
ID选择器100
行内选择器1000

权值计算规则:

  • 统计不同选择器的个数
  • 每类选择器的个数乘以相应权值
  • 把所有的值相加得出选择器的权值
#main div.warning h2{...}
id: 1 * 100 = 100
class: 1 * 10 = 10
标签:2 * 1 = 2
权值:100+10+2=112

计算前面示例中样式权值

		div{color: red;} /* 1 */
		#idgreen{color: green;} /* 100 */
		.classyellow{color:yellow;} /* 10 */
		.classblue{color:blue;} /* 10 */
		div{color:gray;} /* 1 */

通过!important规则可以设置最高优先级

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>CSS优先级</title>
    <style type="text/css">
         /*补充代码*/
         ul li.li1{color:orange !important;}
    </style>
</head>
<body>
    <ul>
        <li style="color:green" class="li1">JS基础</li>  
        <li>JS函数</li> 
        <li>JS对象</li>
    </ul>
</body>
</html>

CSS优先级总结:

  • 1.!important优先级是最高的
  • 2.CSS使用方法的优先级:行内样式>内部样式>外部样式
    * 注:link链入外部样式和style内部样式优先级,取决于先后顺序
  • 3.样式表中优先级
    • ID选择器>class选择器>标签选择器>通配符
    • 权值相同,就近原则;权值不同,使用权值高的

7 CSS命名规范

CSS命名规则:采用英文字母,数字以及‘_’和‘-’命名

  • 以小写字母开头,不能以数字和- _开头
  • 命名形式:单子,连字符,下划线和驼峰
  • 使用有意义的命名
<!-- 一个单词,采用全部小写 -->
.special{...}
<!-- 多个单词,驼峰写法,除第一个单词外,其他首字母大写 -->
.mainTitle{...}
<!-- 采用_连接符-->
.main_title{...}
<!-- 采用-连接符-->
.main-title{...}

常用CSS样式命名

  • ID不要滥用,谨慎使用
  • 适当使用class
页面结构
页头header导航nav
页面主体main侧栏sidebar
页尾footer栏目column
内容content/container页面外围控制wrapper
容器container左右中left/right/center
导航
导航nav左导航leftsidebar
主导航mainnav右导航rightsidebar
子导航subnav菜单menu
顶导航topnav子菜单submenu
边导航sidebar标题title
功能摘要summary
标志logo注册register
广告banner搜索search
登陆login功能区shop
登陆条loginbar标题title
原文地址:https://www.cnblogs.com/csj2018/p/12919493.html