我爱编程

css初探之css选择器

2018-05-07  本文已影响0人  Papio_y

前端学习之css选择器


专业素养之你知道什么是主浏览器及其内核吗?

浏览器的组成部分: 内核部分(这里是我们需要研究的东西) shell部分(这里就是外壳)
主流浏览器的区分方式是,是否有自主研发的内核

主浏览器

结构、样式、行为相分离

前端开发的重要思想,结构(html), 样式(css), 行为(javascript)相分离

这里我们介绍一下这三种语言的注释方式
  1. html
<!-- 我是html注释 -->
  1. css
 /*  我是CSS注释,并且我只有这一种注释方式  */
  1. javascript
 /* 我是JavaScript块计注释 */
 // 我是JavaScript行级注释

CSS

什么是css?

CSS: cascading style sheet (层叠样式表)

css的引入方式
  1. 行间样式, 直接在标签当中写入css样式
<div style="width:100px;height:100px;background-color:red;"></div>
  1. 页面级css样式, 在head标签当中写入css样式
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
  div{
      width: 100px;
      height: 100px;
      background-color: green;
  }
</style>
</head>
<body>
<div></div>
</body>
  1. 外部css文件,这种是最常用的
// html
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <link rel="stylesheet" href="./style.css">
</head>
<body>
  <div></div>
</body>
//css style.css文件
div{
   width: 100px;
   height: 100px;
   background-color: red;
}
  • link标签href属性指向css文件的地址
  • link标签加载css文件的时候,适用了异步加载,不会阻塞页面。
  1. @import
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        @import url("./style.css")
    </style>
</head>

这种方式引入文件的缺点

  1. 必须写在第一行,如果有多个则一起写在前面
  2. ie6的环境下,最多只能适用31次,当然这是别人测出来的数据
  3. 程序读取到css文件的时候,会忽略调import,等到html所有内容包括图片在内的所有资源下载完成之后才加载css文件,采用的是同步加载的方式,并且css文件的 优先级低

一个网速的bug

link标签引入和style标签修改样式没有优先级的区分,一般是谁写在后面会覆盖前面的内容。有时候因为网速的问题,link写在前面,但是link没有加载出来,导致页面使用了style当中的样式。

css选择器

一般不常用id值来标记一个元素,因为它的唯一性,我们通常将它当作页面当中某一个模块的唯一标识
<div id = "demo">需要适用#demo选中我,我是独一无二的</div>

#demo{
  width: 100px;
  height: 100px;
  background-color: red;
}

<div class = "demo">使用.demo可以选中我</div>
<span class = "demo">我也可以被.demo选中哦</span>

/* 这里可以选中两个元素 */
.demo{
  width: 100px;
  height: 100px;
  background-color: red;
}
demo{
  width: 100px;
  height: 100px;
  background-color: red;
}
*{
    padding: 0;
    margin: 0;
    list-style: none;
    text-decoration: none;
    font-size: 0;
}
 [id = "demo1"]{
   width: 100px;
   height: 100px;
   background-color: red;
 }
 div {
    width: 100px;
    height: 100px;
    background-color: green!important;
}

CSS选择器的权重值

css选择器 优先级大小/权重值
!import 无穷大,infinity
行间样式 1000
id 100
class/属性选择/伪类 10
标签/伪元素 1
统配符 0

关于计算机当中的infinity的问题

计算机当中的infinity表示无穷大,但是infinity + 1 > infinity

优先级权重的进制问题

css权重的进制表示为 256进制 所以这里的10表示的256,所以要256个1才等于一个10

权重的计算

  1. 权重值高的覆盖权重低的属性,权重值相同的时候,在后面的属性覆盖在前面的属性
  2. 出现在同一个位置的选择器,将他们的权重值相加,注意这里的权重的进制为256进制,也就是说10个class对应的属性无法覆盖一个id对应的属性!!!!
<div>
    <strong class = "middle">
        <span>可以通过我的父辈可以选中我</span>
    </strong>
</div>
<span></span>

选择出其中的strong下面的span

div .middle span {
        background-color: red;  
}
<div>
    <span>通过我的父元素可以选中我</span>
</div>
div > span {
    background-color: green;
}

使用父子选择器选择元素的时候浏览器的检索元素的方式

当有很多的父子选择的时候, .wrapper div .content ul li span a em,遇到这种情况的时候,浏览器是通过自右向左的方式进行排查还是自左向右的方式进行排查呢?
如果从左往右去找元素的,因为浏览器根本就不知道下一个元素到底是啥,又因为元素的树状结构,必须等它知道自己错了才回来去换路线, 假如有很多的错误的话,他会走很多的回头路。所以浏览器采用的是从右向左的方式去检索元素,只要一条路线被确认是正确的那么这个元素就被取到了。

<div>1</div>
<div class = "demo">1234</div>
<p class = "demo">12</p>

选择出第二个div标签

div.demo{
        background-color: red;
}
<div>123</div>
<strong>123</strong>
<p>123</p>

使用分组选择器来讲所有的123变成红色

strong, div, p {
        color: red;     
}

css3当中添加了很多的更加准确的选择器,我会在后面的内容介绍他们!

上一篇下一篇

猜你喜欢

热点阅读