[TOC]

# 选择器
## * - 通配选择器
星号*代表通配选择器,可以与任何元素匹配。
许多开发者会使用这个技巧来把margin和padding都设为0。在快速开发测试中这种设置固然是好的,但我建议绝对不要在最终的产品代码中使用。因为会给浏览器增加大量不必要的负荷。
~~~
*{color: red;}
~~~
兼容的浏览器
* IE6+
* Firefox
* Chrome
* Safari
* Opera
<br>
## # - ID选择器
ID选择器用于选择一个元素。使用#号作为前缀可以选择该id的元素。这是最常见的用法,但使用id选择器时要谨慎。
~~~
#container {
width: 960px;
margin: auto;
}
~~~
问问自己:是否真的需要使用id来定义元素的样式?
> 在实际中,浏览器并不会检查ID的唯一性,设置多个ID,可以为这些具有相同ID的元素应用相同样式,但在编写DOM脚本时只能识别该id的第一个元素。
兼容的浏览器
* IE6+
* Firefox
* Chrome
* Safari
* Opera
<br>
## . - 类选择器
类选择器用于选择一类元素。
~~~
.div{color: red;}
~~~
兼容的浏览器
* IE6+
* Firefox
* Chrome
* Safari
* Opera
<br>
## X Y - 后代选择器
当你需要更精确地定位时,可以使用后代选择器
~~~
li a {
text-decoration: none;
}
~~~
> 如果你的选择器看起来像X Y Z A B.error这样就错了。问问自己是否真的需要加入这么多负荷
兼容的浏览器
* IE6+
* Firefox
* Chrome
* Safari
* Opera
<br>
## X - 元素选择器
~~~
a { color: red; }
ul { margin-left: 0; }
~~~
兼容的浏览器
* IE6+
* Firefox
* Chrome
* Safari
* Opera
<br>
## X + Y - 邻近元素选择器
只会选中紧接在另一个元素后的元素。
~~~
// 只有每个ul后面的第一个段落是红色的
ul + p {
color: red;
}
~~~
兼容的浏览器
* IE7+
* Firefox
* Chrome
* Safari
* Opera
<br>
## X > Y - 子元素选择器
X Y和X > Y的区别是后者只会选中直接后代。
~~~
// #container > ul 只会定义id为container的div里的ul元素
// 而不会定义第一个li里的ul
div#container > ul {
border: 1px solid black;
}
<div id="container">
<ul>
<li> List Item
<ul>
<li> Child </li>
</ul>
</li>
<li> List Item </li>
<li> List Item </li>
<li> List Item </li>
</ul>
</div>
~~~
兼容的浏览器
* IE7+
* Firefox
* Chrome
* Safari
* Opera
<br>
## X ~ Y - 兄弟选择器
选择器 X 之后出现的所有 Y。
两种元素必须拥有相同的父元素,但是 Y 不必直接紧随X。
兼容的浏览器
* IE7+
* Firefox
* Chrome
* Safari
* Opera
<br>
## X[Y] - 属性选择器
~~~
// 带有title属性的链接标签才会被匹配。没有title属性的标签不会受到影响。
a[title] {
color: green;
}
~~~
兼容的浏览器
* IE7+
* Firefox
* Chrome
* Safari
* Opera
### X[href*="nettuts"] - 模糊匹配属性选择器
### X[href^="http"] - 前缀属性选择器
### X[href$=".jpg"] - 后缀属性选择器
### X[data-*="foo"] - 自定义属性选择器
~~~
a[data-filetype="image"] {
color: red;
}
<a href="path/to/image.jpg" data-filetype="image"> Image Link </a>
~~~
### X[foo~="bar"] - 部分属性选择器
波浪符号(~)可以让你定义取值带有空格的属性。
~~~
/* Target data-info attr that contains the value "external" */
a[data-info~="external"] {
color: red;
}
/* And which contain the value "image" */
a[data-info~="image"] {
border: 1px solid black;
}
<a href="path/to/image.jpg" data-info="external image"> Click Me, Fool </a>
~~~
## 伪元素选择器
### X:first-letter - 设置首字母样式
所有前导标点符号应与第一个字母一同应用该样式;只能与块级元素关联;只有当选择器部分和左大括号之间有空格时,IE6-浏览器才支持。因为first-letter中存在连接符的原因
### X:first-line - 设置首行样式
只能与块级元素关联;只有当选择器部分和左大括号之间有空格时,IE6-浏览器才支持。因为first-line中存在连接符的原因
### X:before - 在元素内容前面插入内容
默认这个伪元素是行内元素,继承元素可继承的属性;所有元素都必须放在出现该伪元素的选择器的最后面。
兼容的浏览器
* IE8+
* Firefox
* Chrome
* Safari
* Opera
### X:after - 在元素内容后面插入内容
兼容的浏览器
* IE8+
* Firefox
* Chrome
* Safari
* Opera
## 伪类
伪类顺序:link-visited-focus-hover-active
### 静态伪类(只应用于超链接)
#### X:visited and X:link
:link伪类来定义所有还没点击的链接。
:visited伪类可以让我们给曾经点击过或者访问过的链接添加样式。
兼容的浏览器
* IE7+
* Firefox
* Chrome
* Safari
* Opera
### 动态伪类(可应用于任何元素)
#### X:hover
鼠标停留
兼容的浏览器
* IE6+ (只能用于链接标签)
* Firefox
* Chrome
* Safari
* Opera
#### X:active
点击未松开时
#### X:focus
获取焦点时
### 目标伪类
#### X:target
代表一个唯一的页面元素(目标元素),其id 与当前URL片段匹配 .
~~~
/* 选择一个ID与当前URL片段匹配的元素*/
:target {
border: 2px solid black;
}
~~~~
<br>
例如, 以下URL拥有一个片段 (以#标识的) ,该片段指向一个ID为section2的页面元素:
~~~html
http://www.example.com/index.html#section2
~~~
若当前URL等于上面的URL,下面的元素可以通过 :target选择器被选中:
~~~html
<section id="section2">Example</section>
~~~
兼容的浏览器
* IE9+
* Firefox
* Chrome
* Safari
* Opera
### UI元素伪类
兼容的浏览器
* IE9+
* Firefox
* Chrome
* Safari
* Opera
#### X:check - 选中
定义选中(checked)的元素,比如单选按钮(radio)或多选按钮(checkbox)
#### X:enabled - 可用状态
#### X:disabled - 不可用状态
### 否定伪类
#### X:not(selector)
~~~
// 我希望选中所有的div元素,除了一个id为container的div
div:not(#container) {
color: blue;
}
~~~
兼容的浏览器
* IE9+
* Firefox
* Chrome
* Safari
* Opera
### 结构伪类
#### X:first-child
父元素的第一个子元素,且该子元素是X,与E:nth-child(1)等同
兼容的浏览器
* IE7+
* Firefox
* Chrome
* Safari
* Opera
#### X:last-child
父元素的最后一个子元素,且该子元素是X,与X:nth-last-child(1)等同
兼容的浏览器
* IE9+
* Firefox
* Chrome
* Safari
* Opera
#### :root
选择文档的根元素,即<html>元素
#### X Y:nth-child(n)
选择父元素的第n个子元素,父元素是X,子元素是Y
兼容的浏览器
* IE9+
* Firefox 3.5+
* Chrome
* Safari
#### X Y:nth-last-child(n)
选择父元素的倒数第n个子元素,父元素是X,子元素是Y
兼容的浏览器
* IE9+
* Firefox 3.5+
* Chrome
* Safari
* Opera
#### X Y:nth-of-type(n)
选择父元素的具有指定类型的第n个子元素,父元素是X,子元素是Y
兼容的浏览器
* IE9+
* Firefox 3.5+
* Chrome
* Safari
#### X Y:nth-last-of-type(n)
选择父元素的具有指定类型的倒数第n个子元素,父元素是X,子元素是Y
兼容的浏览器
* IE9+
* Firefox 3.5+
* Chrome
* Safari
* Opera
#### X:first-of-type
选择父元素中具有指定类型的第1个子元素,与X:nth-of-type(1)相同
兼容的浏览器
* IE9+
* Firefox
* Chrome
* Safari
* Opera
#### X:last-of-type
选择父元素中具有指定类型的最后1个子元素,与X:nth-last-of-type(1)相同
#### X:only-child
选择父元素中只包含一个子元素,子元素是X
兼容的浏览器
* IE9+
* Firefox
* Chrome
* Safari
* Opera
#### X:only-of-type
选择父元素中只包含一个同类型的子元素,子元素是X
兼容的浏览器
* IE9+
* Firefox
* Chrome
* Safari
* Opera
#### X:empty
选择没有子元素的元素,而且该元素也不包含任何文本节点
#参考资料
[选择器 · FE-booklet](https://www.xiaohuochai.site/CSS/grammar/grammar_selector.html)
[30个你必须熟记的CSS选择器](https://code.tutsplus.com/zh-hans/tutorials/the-30-css-selectors-you-must-memorize--net-16048)
- 第一部分 HTML
- meta
- meta标签
- HTML5
- 2.1 语义
- 2.2 通信
- 2.3 离线&存储
- 2.4 多媒体
- 2.5 3D,图像&效果
- 2.6 性能&集成
- 2.7 设备访问
- SEO
- Canvas
- 压缩图片
- 制作圆角矩形
- 全局属性
- 第二部分 CSS
- CSS原理
- 层叠上下文(stacking context)
- 外边距合并
- 块状格式化上下文(BFC)
- 盒模型
- important
- 样式继承
- 层叠
- 属性值处理流程
- 分辨率
- 视口
- CSS API
- grid(未完成)
- flex
- 选择器
- 3D
- Matrix
- AT规则
- line-height 和 vertical-align
- CSS技术
- 居中
- 响应式布局
- 兼容性
- 移动端适配方案
- CSS应用
- CSS Modules(未完成)
- 分层
- 面向对象CSS(未完成)
- 布局
- 三列布局
- 单列等宽,其他多列自适应均匀
- 多列等高
- 圣杯布局
- 双飞翼布局
- 瀑布流
- 1px问题
- 适配iPhoneX
- 横屏适配
- 图片模糊问题
- stylelint
- 第三部分 JavaScript
- JavaScript原理
- 内存空间
- 作用域
- 执行上下文栈
- 变量对象
- 作用域链
- this
- 类型转换
- 闭包(未完成)
- 原型、面向对象
- class和extend
- 继承
- new
- DOM
- Event Loop
- 垃圾回收机制
- 内存泄漏
- 数值存储
- 连等赋值
- 基本类型
- 堆栈溢出
- JavaScriptAPI
- document.referrer
- Promise(未完成)
- Object.create
- 遍历对象属性
- 宽度、高度
- performance
- 位运算
- tostring( ) 与 valueOf( )方法
- JavaScript技术
- 错误
- 异常处理
- 存储
- Cookie与Session
- ES6(未完成)
- Babel转码
- let和const命令
- 变量的解构赋值
- 字符串的扩展
- 正则的扩展
- 数值的扩展
- 数组的扩展
- 函数的扩展
- 对象的扩展
- Symbol
- Set 和 Map 数据结构
- proxy
- Reflect
- module
- AJAX
- ES5
- 严格模式
- JSON
- 数组方法
- 对象方法
- 函数方法
- 服务端推送(未完成)
- JavaScript应用
- 复杂判断
- 3D 全景图
- 重载
- 上传(未完成)
- 上传方式
- 文件格式
- 渲染大量数据
- 图片裁剪
- 斐波那契数列
- 编码
- 数组去重
- 浅拷贝、深拷贝
- instanceof
- 模拟 new
- 防抖
- 节流
- 数组扁平化
- sleep函数
- 模拟bind
- 柯里化
- 零碎知识点
- 第四部分 进阶
- 计算机原理
- 数据结构(未完成)
- 算法(未完成)
- 排序算法
- 冒泡排序
- 选择排序
- 插入排序
- 快速排序
- 搜索算法
- 动态规划
- 二叉树
- 浏览器
- 浏览器结构
- 浏览器工作原理
- HTML解析
- CSS解析
- 渲染树构建
- 布局(Layout)
- 渲染
- 浏览器输入 URL 后发生了什么
- 跨域
- 缓存机制
- reflow(回流)和repaint(重绘)
- 渲染层合并
- 编译(未完成)
- Babel
- 设计模式(未完成)
- 函数式编程(未完成)
- 正则表达式(未完成)
- 性能
- 性能分析
- 性能指标
- 首屏加载
- 优化
- 浏览器层面
- HTTP层面
- 代码层面
- 构建层面
- 移动端首屏优化
- 服务器层面
- bigpipe
- 构建工具
- Gulp
- webpack
- Webpack概念
- Webpack工具
- Webpack优化
- Webpack原理
- 实现loader
- 实现plugin
- tapable
- Webpack打包后代码
- rollup.js
- parcel
- 模块化
- ESM
- 安全
- XSS
- CSRF
- 点击劫持
- 中间人攻击
- 密码存储
- 测试(未完成)
- 单元测试
- E2E测试
- 框架测试
- 样式回归测试
- 异步测试
- 自动化测试
- PWA
- PWA官网
- web app manifest
- service worker
- app install banners
- 调试PWA
- PWA教程
- 框架
- MVVM原理
- Vue
- Vue 饿了么整理
- 样式
- 技巧
- Vue音乐播放器
- Vue源码
- Virtual Dom
- computed原理
- 数组绑定原理
- 双向绑定
- nextTick
- keep-alive
- 导航守卫
- 组件通信
- React
- Diff 算法
- Fiber 原理
- batchUpdate
- React 生命周期
- Redux
- 动画(未完成)
- 异常监控、收集(未完成)
- 数据采集
- Sentry
- 贝塞尔曲线
- 视频
- 服务端渲染
- 服务端渲染的利与弊
- Vue SSR
- React SSR
- 客户端
- 离线包
- 第五部分 网络
- 五层协议
- TCP
- UDP
- HTTP
- 方法
- 首部
- 状态码
- 持久连接
- TLS
- content-type
- Redirect
- CSP
- 请求流程
- HTTP/2 及 HTTP/3
- CDN
- DNS
- HTTPDNS
- 第六部分 服务端
- Linux
- Linux命令
- 权限
- XAMPP
- Node.js
- 安装
- Node模块化
- 设置环境变量
- Node的event loop
- 进程
- 全局对象
- 异步IO与事件驱动
- 文件系统
- Node错误处理
- koa
- koa-compose
- koa-router
- Nginx
- Nginx配置文件
- 代理服务
- 负载均衡
- 获取用户IP
- 解决跨域
- 适配PC与移动环境
- 简单的访问限制
- 页面内容修改
- 图片处理
- 合并请求
- PM2
- MongoDB
- MySQL
- 常用MySql命令
- 自动化(未完成)
- docker
- 创建CLI
- 持续集成
- 持续交付
- 持续部署
- Jenkins
- 部署与发布
- 远程登录服务器
- 增强服务器安全等级
- 搭建 Nodejs 生产环境
- 配置 Nginx 实现反向代理
- 管理域名解析
- 配置 PM2 一键部署
- 发布上线
- 部署HTTPS
- Node 应用
- 爬虫(未完成)
- 例子
- 反爬虫
- 中间件
- body-parser
- connect-redis
- cookie-parser
- cors
- csurf
- express-session
- helmet
- ioredis
- log4js(未完成)
- uuid
- errorhandler
- nodeclub源码
- app.js
- config.js
- 消息队列
- RPC
- 性能优化
- 第七部分 总结
- Web服务器
- 目录结构
- 依赖
- 功能
- 代码片段
- 整理
- 知识清单、博客
- 项目、组件、库
- Node代码
- 面试必考
- 91算法
- 第八部分 工作代码总结
- 样式代码
- 框架代码
- 组件代码
- 功能代码
- 通用代码