cainiaoblog 23.2.171

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/CNAME +1 -0
  2. package/MP_verify_o6dHCK5mIkxNpzvZ.txt +1 -0
  3. package/README.md +8 -0
  4. package/about/index.html +54 -0
  5. package/ads.txt +1 -0
  6. package/app/manual.html +104 -0
  7. package/appConfigs/config +1 -0
  8. package/archives/2018/index.html +48 -0
  9. package/archives/2019/index.html +48 -0
  10. package/archives/2019/page/2/index.html +48 -0
  11. package/archives/2020/index.html +48 -0
  12. package/archives/2021/index.html +48 -0
  13. package/archives/2022/index.html +48 -0
  14. package/archives/2023/index.html +48 -0
  15. package/archives/index.html +48 -0
  16. package/archives/page/2/index.html +48 -0
  17. package/archives/page/3/index.html +48 -0
  18. package/article/10047.html +148 -0
  19. package/article/10164.html +64 -0
  20. package/article/10624.html +436 -0
  21. package/article/10745.html +586 -0
  22. package/article/11674.html +71 -0
  23. package/article/11939.html +72 -0
  24. package/article/12238.html +86 -0
  25. package/article/1230.html +533 -0
  26. package/article/13265.html +69 -0
  27. package/article/13823.html +78 -0
  28. package/article/14125.html +72 -0
  29. package/article/14192.html +561 -0
  30. package/article/14375.html +85 -0
  31. package/article/14744.html +83 -0
  32. package/article/14936.html +451 -0
  33. package/article/1518.html +250 -0
  34. package/article/15428.html +71 -0
  35. package/article/15518.html +288 -0
  36. package/article/15569.html +418 -0
  37. package/article/1566.html +122 -0
  38. package/article/16017.html +156 -0
  39. package/article/16947.html +440 -0
  40. package/article/17096.html +82 -0
  41. package/article/17246.html +89 -0
  42. package/article/17575.html +350 -0
  43. package/article/179.html +757 -0
  44. package/article/18039.html +233 -0
  45. package/article/18071.html +375 -0
  46. package/article/18142.html +71 -0
  47. package/article/19909.html +160 -0
  48. package/article/20014.html +89 -0
  49. package/article/20021.html +389 -0
  50. package/article/20037.html +280 -0
  51. package/article/20056.html +95 -0
  52. package/article/20093.html +404 -0
  53. package/article/2021.html +607 -0
  54. package/article/20459.html +115 -0
  55. package/article/20613.html +263 -0
  56. package/article/20635.html +71 -0
  57. package/article/21317.html +71 -0
  58. package/article/21320.html +90 -0
  59. package/article/21782.html +548 -0
  60. package/article/22230.html +435 -0
  61. package/article/22237.html +347 -0
  62. package/article/22398.html +109 -0
  63. package/article/22422.html +270 -0
  64. package/article/22565.html +300 -0
  65. package/article/23046.html +250 -0
  66. package/article/23083.html +215 -0
  67. package/article/23195.html +297 -0
  68. package/article/23301.html +835 -0
  69. package/article/23589.html +285 -0
  70. package/article/23655.html +338 -0
  71. package/article/23864.html +76 -0
  72. package/article/23914.html +96 -0
  73. package/article/24169.html +135 -0
  74. package/article/24581.html +349 -0
  75. package/article/2475.html +500 -0
  76. package/article/24826.html +77 -0
  77. package/article/24924.html +247 -0
  78. package/article/25164.html +1495 -0
  79. package/article/25318.html +394 -0
  80. package/article/25710.html +1129 -0
  81. package/article/25734.html +83 -0
  82. package/article/26083.html +174 -0
  83. package/article/26147.html +283 -0
  84. package/article/26291.html +110 -0
  85. package/article/26354.html +71 -0
  86. package/article/26624.html +145 -0
  87. package/article/26639.html +298 -0
  88. package/article/26850.html +138 -0
  89. package/article/26940.html +258 -0
  90. package/article/27796.html +190 -0
  91. package/article/27800.html +161 -0
  92. package/article/28963.html +159 -0
  93. package/article/28976.html +247 -0
  94. package/article/29042.html +72 -0
  95. package/article/29596.html +81 -0
  96. package/article/29619.html +183 -0
  97. package/article/29623.html +329 -0
  98. package/article/29829.html +205 -0
  99. package/article/29abbd1c.html +112 -0
  100. package/article/30215.html +178 -0
  101. package/article/30552.html +78 -0
  102. package/article/30818.html +201 -0
  103. package/article/31330.html +364 -0
  104. package/article/3154.html +577 -0
  105. package/article/31695.html +348 -0
  106. package/article/31826.html +71 -0
  107. package/article/31843.html +132 -0
  108. package/article/32280.html +212 -0
  109. package/article/32431.html +74 -0
  110. package/article/32443.html +72 -0
  111. package/article/32732.html +122 -0
  112. package/article/3286.html +251 -0
  113. package/article/32960.html +198 -0
  114. package/article/33713.html +72 -0
  115. package/article/33899.html +615 -0
  116. package/article/34351.html +74 -0
  117. package/article/34372.html +89 -0
  118. package/article/34410.html +74 -0
  119. package/article/34431.html +118 -0
  120. package/article/3447.html +75 -0
  121. package/article/34474.html +142 -0
  122. package/article/34871.html +147 -0
  123. package/article/35397.html +175 -0
  124. package/article/3544.html +199 -0
  125. package/article/35503.html +115 -0
  126. package/article/35624.html +84 -0
  127. package/article/35697.html +384 -0
  128. package/article/35863.html +73 -0
  129. package/article/36037.html +253 -0
  130. package/article/36118.html +71 -0
  131. package/article/3621.html +119 -0
  132. package/article/36251.html +296 -0
  133. package/article/36642.html +352 -0
  134. package/article/37102.html +763 -0
  135. package/article/37336.html +351 -0
  136. package/article/37351.html +89 -0
  137. package/article/3760.html +294 -0
  138. package/article/37749.html +75 -0
  139. package/article/37789.html +83 -0
  140. package/article/38005.html +765 -0
  141. package/article/38009.html +284 -0
  142. package/article/38269.html +194 -0
  143. package/article/38344.html +88 -0
  144. package/article/38359.html +334 -0
  145. package/article/38423.html +379 -0
  146. package/article/38530.html +213 -0
  147. package/article/38743.html +268 -0
  148. package/article/38753.html +204 -0
  149. package/article/38881.html +71 -0
  150. package/article/39087.html +414 -0
  151. package/article/39309.html +84 -0
  152. package/article/39486.html +74 -0
  153. package/article/39637.html +306 -0
  154. package/article/39839.html +72 -0
  155. package/article/39937.html +152 -0
  156. package/article/39970.html +71 -0
  157. package/article/402.html +559 -0
  158. package/article/40698.html +71 -0
  159. package/article/40811.html +71 -0
  160. package/article/40964.html +462 -0
  161. package/article/41011.html +322 -0
  162. package/article/41152.html +78 -0
  163. package/article/41696.html +71 -0
  164. package/article/41717.html +281 -0
  165. package/article/41777.html +149 -0
  166. package/article/419.html +985 -0
  167. package/article/4233.html +136 -0
  168. package/article/4292.html +86 -0
  169. package/article/43302.html +96 -0
  170. package/article/43397.html +106 -0
  171. package/article/43724.html +281 -0
  172. package/article/43999.html +224 -0
  173. package/article/44426.html +77 -0
  174. package/article/44964.html +137 -0
  175. package/article/45004.html +123 -0
  176. package/article/4510.html +83 -0
  177. package/article/45156.html +320 -0
  178. package/article/45157.html +52 -0
  179. package/article/45267.html +87 -0
  180. package/article/45641.html +207 -0
  181. package/article/45960.html +75 -0
  182. package/article/46100.html +1262 -0
  183. package/article/46366.html +74 -0
  184. package/article/46771.html +96 -0
  185. package/article/46911.html +517 -0
  186. package/article/46948.html +137 -0
  187. package/article/46ee4850.html +349 -0
  188. package/article/47019.html +84 -0
  189. package/article/47532.html +94 -0
  190. package/article/4783.html +429 -0
  191. package/article/47972.html +72 -0
  192. package/article/48216.html +127 -0
  193. package/article/48252.html +185 -0
  194. package/article/48520.html +74 -0
  195. package/article/48722.html +75 -0
  196. package/article/48807.html +99 -0
  197. package/article/49126.html +323 -0
  198. package/article/50001.html +88 -0
  199. package/article/50058.html +151 -0
  200. package/article/50343.html +410 -0
  201. package/article/50510.html +82 -0
  202. package/article/51082.html +98 -0
  203. package/article/51677.html +111 -0
  204. package/article/5204.html +1085 -0
  205. package/article/52500.html +538 -0
  206. package/article/52689.html +259 -0
  207. package/article/52877.html +569 -0
  208. package/article/53125.html +191 -0
  209. package/article/53428.html +251 -0
  210. package/article/53524.html +74 -0
  211. package/article/53698.html +322 -0
  212. package/article/53803e6.html +93 -0
  213. package/article/53924.html +291 -0
  214. package/article/53962.html +253 -0
  215. package/article/54006.html +71 -0
  216. package/article/54018.html +88 -0
  217. package/article/54161.html +83 -0
  218. package/article/54178.html +69 -0
  219. package/article/54258.html +327 -0
  220. package/article/54295.html +214 -0
  221. package/article/54313.html +1976 -0
  222. package/article/54351.html +90 -0
  223. package/article/54604.html +80 -0
  224. package/article/54632.html +71 -0
  225. package/article/54912.html +756 -0
  226. package/article/54918.html +129 -0
  227. package/article/55119.html +136 -0
  228. package/article/55756.html +118 -0
  229. package/article/55769.html +136 -0
  230. package/article/55870.html +161 -0
  231. package/article/56139.html +92 -0
  232. package/article/56557.html +69 -0
  233. package/article/56604.html +69 -0
  234. package/article/56816.html +266 -0
  235. package/article/56926.html +153 -0
  236. package/article/57747.html +409 -0
  237. package/article/57965.html +475 -0
  238. package/article/58816.html +78 -0
  239. package/article/59059.html +435 -0
  240. package/article/59095.html +350 -0
  241. package/article/59349.html +244 -0
  242. package/article/59402.html +216 -0
  243. package/article/59448.html +55 -0
  244. package/article/59870.html +94 -0
  245. package/article/59877.html +208 -0
  246. package/article/5dbb6f41.html +86 -0
  247. package/article/6008.html +75 -0
  248. package/article/60327.html +126 -0
  249. package/article/6035.html +76 -0
  250. package/article/60428.html +71 -0
  251. package/article/60544.html +128 -0
  252. package/article/61319.html +95 -0
  253. package/article/61367.html +93 -0
  254. package/article/624d1918.html +292 -0
  255. package/article/62543.html +71 -0
  256. package/article/62887.html +169 -0
  257. package/article/63074.html +120 -0
  258. package/article/63266.html +311 -0
  259. package/article/63351.html +74 -0
  260. package/article/63542.html +104 -0
  261. package/article/63824.html +275 -0
  262. package/article/64051.html +653 -0
  263. package/article/64189b69.html +72 -0
  264. package/article/64354.html +75 -0
  265. package/article/64869.html +79 -0
  266. package/article/64923.html +596 -0
  267. package/article/65128.html +95 -0
  268. package/article/65295.html +79 -0
  269. package/article/6888.html +75 -0
  270. package/article/7065.html +84 -0
  271. package/article/7455.html +85 -0
  272. package/article/7a3ef8f.html +315 -0
  273. package/article/8140.html +188 -0
  274. package/article/8190.html +85 -0
  275. package/article/8225.html +78 -0
  276. package/article/84c9ccd6.html +159 -0
  277. package/article/8f9a9ae3.html +82 -0
  278. package/article/9174.html +73 -0
  279. package/article/9738.html +294 -0
  280. package/article/a4145266.html +71 -0
  281. package/article/bedea419.html +72 -0
  282. package/article/bf7e7421.html +78 -0
  283. package/article/c1867fbf.html +103 -0
  284. package/article/c5576490.html +70 -0
  285. package/article/dcb0db28.html +76 -0
  286. package/article/fc3b727a.html +79 -0
  287. package/atom.xml +445 -0
  288. package/baidusitemap.xml +1079 -0
  289. package/blocks/dns.txt +264 -0
  290. package/blocks/filter.txt +1070 -0
  291. package/blocks/script.js +42 -0
  292. package/categories/CDN/index.html +48 -0
  293. package/categories/IDE/index.html +48 -0
  294. package/categories/git/index.html +48 -0
  295. package/categories/hexo/index.html +48 -0
  296. package/categories//345/205/254/345/205/261/350/212/202/346/227/245/index.html +48 -0
  297. package/categories//345/210/206/344/272/253/index.html +48 -0
  298. package/categories//345/211/215/347/253/257/index.html +48 -0
  299. package/categories//345/211/215/347/253/257/page/2/index.html +48 -0
  300. package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250/index.html +48 -0
  301. package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250//347/275/221/347/273/234/345/215/217/350/256/256/index.html +48 -0
  302. package/categories//345/215/232/345/256/242/index.html +48 -0
  303. package/categories//345/267/245/345/205/267/index.html +48 -0
  304. package/categories//345/271/277/345/221/212/350/277/207/346/273/244/index.html +48 -0
  305. package/categories//345/271/277/345/221/212/350/277/207/346/273/244//350/247/206/351/242/221/347/224/265/350/247/206/345/260/217/350/257/264/346/274/253/347/224/273/350/265/204/350/256/257/351/237/263/344/271/220/index.html +48 -0
  306. package/categories//346/255/243/345/210/231/index.html +48 -0
  307. package/categories//346/265/217/350/247/210/345/231/250/index.html +48 -0
  308. package/categories//347/256/227/346/263/225/index.html +48 -0
  309. package/categories//350/265/204/350/256/257/index.html +48 -0
  310. package/categories//350/275/273/346/235/276/344/270/200/345/210/273/index.html +48 -0
  311. package/cdn/css/font-awesome.min.css +4 -0
  312. package/cdn/css/grids-responsive-min.css +7 -0
  313. package/cdn/css/normalize.css +349 -0
  314. package/cdn/css/pure-min.css +11 -0
  315. package/cdn/fonts/fontawesome-webfont.eot +0 -0
  316. package/cdn/fonts/fontawesome-webfont.svg +2671 -0
  317. package/cdn/fonts/fontawesome-webfont.ttf +0 -0
  318. package/cdn/fonts/fontawesome-webfont.woff +0 -0
  319. package/cdn/fonts/fontawesome-webfont.woff2 +0 -0
  320. package/cdn/js/Valine.min.js +17 -0
  321. package/cdn/js/canvas-nest.js +1 -0
  322. package/cdn/js/clipboard.min.js +7 -0
  323. package/cdn/js/crypto-js.js +25 -0
  324. package/cdn/js/jquery.min.js +2 -0
  325. package/css/default.css +1144 -0
  326. package/css/donate.css +338 -0
  327. package/css/hbe.style.css +749 -0
  328. package/css/style.css +2095 -0
  329. package/donate/index.html +39 -0
  330. package/google917dcf72f6e5c7f5.html +1 -0
  331. package/guestbook/index.html +68 -0
  332. package/hosts/ads.txt +149 -0
  333. package/hosts/flash.txt +9 -0
  334. package/hosts/github.txt +6 -0
  335. package/hosts/google.txt +16936 -0
  336. package/hosts/winrar.txt +2 -0
  337. package/img/alipay.svg +46 -0
  338. package/img/bitcoin.svg +135 -0
  339. package/img/blog.ico +0 -0
  340. package/img/blog.png +0 -0
  341. package/img/gaba.png +0 -0
  342. package/img/github.svg +1 -0
  343. package/img/like.svg +1 -0
  344. package/img/mp-mini.jpg +0 -0
  345. package/img/mp.png +0 -0
  346. package/img/paypal.svg +63 -0
  347. package/img/upy_logo.svg +59 -0
  348. package/img/wechat.svg +49 -0
  349. package/index.html +48 -0
  350. package/jd_root.txt +1 -0
  351. package/js/codeblock-resizer.js +51 -0
  352. package/js/dark.js +12 -0
  353. package/js/donate.js +87 -0
  354. package/js/fixedPage.js +106 -0
  355. package/js/gitment.browser.js +3751 -0
  356. package/js/search.js +86 -0
  357. package/js/share.js +60 -0
  358. package/js/smartresize.js +32 -0
  359. package/js/totop.js +12 -0
  360. package/kankan/index.html +77 -0
  361. package/lib/hbe.js +293 -0
  362. package/package.json +25 -0
  363. package/page/10/index.html +49 -0
  364. package/page/11/index.html +59 -0
  365. package/page/12/index.html +67 -0
  366. package/page/13/index.html +63 -0
  367. package/page/14/index.html +66 -0
  368. package/page/15/index.html +60 -0
  369. package/page/16/index.html +60 -0
  370. package/page/17/index.html +62 -0
  371. package/page/18/index.html +61 -0
  372. package/page/19/index.html +58 -0
  373. package/page/2/index.html +48 -0
  374. package/page/20/index.html +57 -0
  375. package/page/21/index.html +61 -0
  376. package/page/22/index.html +55 -0
  377. package/page/23/index.html +64 -0
  378. package/page/24/index.html +60 -0
  379. package/page/25/index.html +58 -0
  380. package/page/26/index.html +48 -0
  381. package/page/27/index.html +58 -0
  382. package/page/3/index.html +48 -0
  383. package/page/4/index.html +48 -0
  384. package/page/5/index.html +51 -0
  385. package/page/6/index.html +51 -0
  386. package/page/7/index.html +51 -0
  387. package/page/8/index.html +53 -0
  388. package/page/9/index.html +48 -0
  389. package/randomcall/README.html +1 -0
  390. package/randomcall/lucker.html +290 -0
  391. package/randomcall/lucky.png +0 -0
  392. package/robots.txt +22 -0
  393. package/search.xml +6740 -0
  394. package/sitemap.xml +2669 -0
  395. package/tags//345/216/237/345/210/233/index.html +48 -0
  396. package/tags//345/250/261/344/271/220/index.html +48 -0
  397. package/tags//346/211/213/345/206/231/index.html +48 -0
  398. package/tags//347/226/253/346/203/205/index.html +48 -0
  399. package/tags//350/275/254/350/275/275/index.html +48 -0
  400. package/tags//350/275/254/350/275/275/page/2/index.html +48 -0
  401. package/v.html +90 -0
@@ -0,0 +1,429 @@
1
+ <!DOCTYPE html><html lang="zh-CN" data-dark><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description" content="前端壹菜鸟,记录工作难题,关注前端知识,收集精彩博文,做技术的搬运工"><meta name="msvalidate.01" content="0FE4D8B3381D3D87088996B886E1E2BD"><title>CSS第四级选择器 | 前端壹菜鸟</title><link rel="stylesheet" type="text/css" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/css/style.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/normalize.css@latest/normalize.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/pure-min.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/grids-responsive-min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css"><link rel="icon" mask="" sizes="any" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="Shortcut Icon" type="image/x-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="apple-touch-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="apple-touch-icon-precomposed" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="alternate" type="application/atom+xml" href="/atom.xml"><script type="text/javascript" src="//cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8385136408348258"></script><script src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script><script>(function(){
2
+ var bp = document.createElement('script');
3
+ var curProtocol = window.location.protocol.split(':')[0];
4
+ if (curProtocol === 'https'){
5
+ bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
6
+ }
7
+ else{
8
+ bp.src = 'http://push.zhanzhang.baidu.com/push.js';
9
+ }
10
+ var s = document.getElementsByTagName("script")[0];
11
+ s.parentNode.insertBefore(bp, s);
12
+ })();
13
+ </script><script>(function(){
14
+ var src = 'https://jspassport.ssl.qhimg.com/11.0.1.js?d182b3f28525f2db83acfaaf6e696dba';
15
+ document.write('<script src="' + src + '" id="sozz"><\/script>');
16
+ })();
17
+ </script><script>var _hmt=_hmt||[];(function(){var hm=document.createElement("script");hm.src='https://hm.baidu.com/hm.js?011f0b44e8452bfa57fbfa23c5fe7683';var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();
18
+ </script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-150860401-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);};gtag('js',new Date());gtag('config','UA-150860401-1');
19
+ </script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/fixedPage.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div class="body_container"><div id="header"><div class="site-name"><a id="logo" href="/.">前端壹菜鸟</a><p class="description">关注前端知识,收集精彩博文,做技术的搬运工</p></div><div id="nav-menu"><a class="current" href="/." target="_self"><i class="fa fa-home"> 首页</i></a><a href="/archives/" target="_self"><i class="fa fa-archive"> 归档</i></a><a href="/guestbook/" target="_self"><i class="fa fa-comments"> 留言</i></a><a href="/about/" target="_self"><i class="fa fa-user"> 关于</i></a><a href="https://laonongmin.online/" target="_target"><i class="fa fa-group"> 看看</i></a><a href="https://love.xuehuayu.cn/" target="_target"><i class="fa fa-heart"> LOVE</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title c-post">CSS第四级选择器</h1><div class="post-meta"><span class="date">2019-10-24</span><span> | </span><span class="tag"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载 </a></span><span> | </span><span class="category"><a href="/categories/%E5%89%8D%E7%AB%AF/">前端 </a></span><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"><i class="fa fa-spinner"></i></span><span> 阅读</span></span><span class="post-time"><span class="post-meta-item-text"> | </span><span class="post-meta-item-icon"><i class="fa fa-keyboard-o"></i><span class="post-count"> 4.4k</span><span class="post-meta-item-text"> 字</span></span></span><span class="post-time"> | <span class="post-meta-item-icon"><i class="fa fa-hourglass-half"></i><span class="post-count"> 16</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/4783.html#vcomment"><span class="waline-comment-count" data-path="/article/4783.html"></span><span> 条评论</span></a><div class="post-content"><p><code>原文地址:https://juejin.im/post/5da6e7aee51d4524cc224d78</code></p>
20
+ <p>选择器是 CSS 的核心部分。你用来做一些操作比如说选择某种类型的所有元素,就像下面这样:</p>
21
+ <span id="more"></span>
22
+
23
+ <blockquote>
24
+ <p>译文出自:<a target="_blank" rel="noopener" href="https://lightningminers.github.io/articles/">闪电矿工翻译组</a><br>原文地址: <a target="_blank" rel="noopener" href="https://blog.logrocket.com/css-selectors-level-4-b5da36bcd54c/">CSS selectors level 4</a><br>原文作者: <a target="_blank" rel="noopener" href="https://blog.logrocket.com/author/ehrrera/"> Esteban Herrera</a><br>仓库原文链接:<a target="_blank" rel="noopener" href="https://github.com/lightningminers/article/issues/53">issue</a><br>译者: <a target="_blank" rel="noopener" href="https://github.com/thisang">thisang</a></p>
25
+ </blockquote>
26
+ <pre><code>div &#123;
27
+ /* 一些应用在所有 div 元素上的样式 */
28
+ &#125;
29
+ 复制代码
30
+ </code></pre>
31
+ <p>或者你可以选择一个在它的父元素下的最后一个子元素:</p>
32
+ <pre><code>ulli:last-child &#123;
33
+ /* 一些只应用在列表的最后一个子元素上的样式 */
34
+ &#125;
35
+ 复制代码
36
+ </code></pre>
37
+ <p>当然,你也可以去做一些更复杂的事情,比如说选择选择列表中除了最后一个子元素之外的所有子元素。</p>
38
+ <p>事实上,这样做的方法不止一种,一些方法甚至更复杂。</p>
39
+ <p>例如,比较以下这两个:</p>
40
+ <pre><code>ulli &#123;
41
+ /* 一些应用在所有子元素上的样式 */
42
+ &#125;
43
+ ulli:last-child &#123;
44
+ /* 一些样式用来重置上面生效的样式,因为上面的样式不适用于上面最后一个子元素 */
45
+ &#125;
46
+ 复制代码
47
+
48
+ uili:nth-last-child(n+2) &#123;
49
+ /* 一些应用在除了最后一个子元素之外的所有子元素上面的样式 */
50
+ &#125;
51
+ 复制代码
52
+ </code></pre>
53
+ <p><code>ul li</code>属于第一级选择器。</p>
54
+ <p><code>last-child</code>和<code>nth-last-child</code>属于第三级选择器。</p>
55
+ <p>你可以把级别看作是 CSS 选择器的<a target="_blank" rel="noopener" href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors#Specifications">版本</a>,其中每个级别都会添加一些功能更强大的选择器。</p>
56
+ <p>在这篇文章中,我会根据截至 2019 年 1 月的<a target="_blank" rel="noopener" href="https://drafts.csswg.org/selectors-4/">草案规范</a>,和你一起过一遍下一代选择器(第四级),主要有以下分类:</p>
57
+ <ul>
58
+ <li>逻辑组合</li>
59
+ <li>属性选择器</li>
60
+ <li>语言伪类</li>
61
+ <li>位置伪类</li>
62
+ <li>用户操作伪类</li>
63
+ <li>输入伪类</li>
64
+ <li>树结构伪类</li>
65
+ <li>网格结构伪类</li>
66
+ </ul>
67
+ <p>在我写这篇文章的时候,第四级选择器的规范还处于草案阶段。直到官方推荐之前,它可能还会改,而且你可能还会发现很多选择器甚至都还没有被一些浏览器支持或者需要添加一些前缀(<code>:-moz-</code>或<code>:-webkit-</code>)。</p>
68
+ <p>对于每一个选择器,我都会提供一个<a target="_blank" rel="noopener" href="https://caniuse.com/#home">can I use</a>的链接以便你可以看到哪些浏览器支持它(如果有的话)、一些简短的介绍、一个例子、和一个 Codepen 的链接,这样你就能自己去尝试一下(即使它暂时无法使用,因为将来可能会改)。</p>
69
+ <p>好了,让我们中逻辑组合选择器开始。</p>
70
+ <h4 id="逻辑组合选择器"><a href="#逻辑组合选择器" class="headerlink" title="逻辑组合选择器"></a>逻辑组合选择器</h4><p>这个类别包括通过组合选择其他选择器而起作用的选择器。</p>
71
+ <h4 id="not-selector1-selector2"><a href="#not-selector1-selector2" class="headerlink" title=":not(selector1,selector2,...)"></a><code>:not(selector1,selector2,...)</code></h4><p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=css-not-sel-list">浏览器支持</a></p>
72
+ <p>它选择那些与传入的参数不匹配的元素列表。例如:</p>
73
+ <pre><code>p:not(.beginning, .middle)&#123;
74
+ color: red;
75
+ &#125;
76
+ 复制代码
77
+ </code></pre>
78
+ <p>这会给所有的没有<code>.beginning</code>和<code>.middle</code>类的<code>p</code>元素设置颜色为红色的样式。</p>
79
+ <p>这个选择器的第三级版本只能允许一个选择器,而不是两个或更多的的选择器。例如,上面的样式可以写成:</p>
80
+ <pre><code>p:not(.beginning):not(.middle)&#123;
81
+ color: red;
82
+ &#125;
83
+ 复制代码
84
+ </code></pre>
85
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/xMGxvY">在 Codepen 上试试</a></p>
86
+ <h4 id="is-selector1-selector2"><a href="#is-selector1-selector2" class="headerlink" title=":is(selector1,selector2)"></a><code>:is(selector1,selector2)</code></h4><p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=css-matches-pseudo">浏览器支持</a></p>
87
+ <p>它选择那些与传入的参数匹配的元素列表。例如:</p>
88
+ <pre><code>p:is(.beginning, .middle)&#123;
89
+ color: blur;
90
+ &#125;
91
+ 复制代码
92
+ </code></pre>
93
+ <p>这会给所有的具有<code>.beginning</code>和<code>.middle</code>类的<code>p</code>元素设置颜色为蓝色的样式。</p>
94
+ <p>自从上一个工作草案版本以来最重大的变化之一就是<a target="_blank" rel="noopener" href="https://github.com/w3c/csswg-drafts/issues/3258"><code>:matches()</code>选择器被更名为<code>:is()</code></a>并且已经被 Safari(<a target="_blank" rel="noopener" href="https://caniuse.com/#feat=css-matches-pseudo">唯一一个完全支持这个选择器的浏览器</a>)弃用,因此它和与之相反的选择器<code>:not()</code>可以更好的配对。</p>
95
+ <p>如果要向后兼容,可以用<code>:is()</code>作为<code>:matches()</code>的别名。</p>
96
+ <p>然而,<code>:matches()</code>以前叫做<code>:any()</code>,因此大多数浏览器都支持带前缀的伪类:</p>
97
+ <pre><code>p:-webkit-any(.beginning, .middle)&#123;
98
+ color: blue;
99
+ &#125;
100
+ p:-moz-any(.beginning, .middle) &#123;
101
+ color: blue;
102
+ &#125;
103
+ 复制代码
104
+ </code></pre>
105
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/daYRLJ">在 Codepen 上试试</a></p>
106
+ <h4 id="where-selector1-selector"><a href="#where-selector1-selector" class="headerlink" title=":where(selector1,selector,...)"></a><code>:where(selector1,selector,...)</code></h4><p>在我写这篇文章的时候,还没有任何一个浏览器支持这个选择器。</p>
107
+ <p>它具有和<code>:is()</code>相同的语法和功能,但是不管这个选择器接受多少个参数,这个选择器的权重都是 0。</p>
108
+ <p>权重是 CSS 的应用规则。如果两个选择器同时应用在同一个元素上面,则权重高的那个生效。如果不同规则具有相同的权重,那么应用在这个元素上的最后一个规则将会生效。</p>
109
+ <p>这个选择器可以用来实现筛选和覆盖与之关联的元素的样式。</p>
110
+ <p>下面是一个权重的例子:</p>
111
+ <pre><code>a:not(:hover) &#123;
112
+ text-decoration: none;
113
+ &#125;
114
+ nava &#123;
115
+ /* 不会生效 */text-decoration: underline;
116
+ &#125;
117
+ /* 使用新的第四级选择器 :where */a:where(:not(:hover)) &#123;
118
+ text-decoration: none;
119
+ &#125;
120
+ nava&#123;
121
+ /* 生效 */text-decoration: underline;
122
+ &#125;
123
+ 复制代码
124
+ </code></pre>
125
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/daYzZg">在 Codepen 上试试</a></p>
126
+ <h4 id="has-reslativeSelector1-reslativeSelector2"><a href="#has-reslativeSelector1-reslativeSelector2" class="headerlink" title=":has(reslativeSelector1,reslativeSelector2,...)"></a><code>:has(reslativeSelector1,reslativeSelector2,...)</code></h4><p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=css-has">浏览器支持</a>(在写这篇文章的时候,还没有任何一个浏览器支持这个选择器)</p>
127
+ <p>这个选择器将一个相对选择器列表作为参数。它选择那些在指定范围内匹配相对选择器列表的元素。</p>
128
+ <p>例如:</p>
129
+ <pre><code>p:has(strong, em) &#123;
130
+ color: red;
131
+ &#125;
132
+ 复制代码
133
+ </code></pre>
134
+ <p>这会给所有的包含<code>&lt;strong&gt;</code>或者<code>&lt;em&gt;</code>元素的<code>p</code>元素添加一个颜色为红色的样式。</p>
135
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/QYjmYX">在 Codepen 上试试</a></p>
136
+ <h4 id="属性选择器"><a href="#属性选择器" class="headerlink" title="属性选择器"></a>属性选择器</h4><p>这类选择器包含那些应用在元素属性上的选择器。</p>
137
+ <h4 id="foo-x3D-”bar”i"><a href="#foo-x3D-”bar”i" class="headerlink" title="[foo&#x3D;”bar”i]"></a>[foo&#x3D;”bar”i]</h4><p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=css-case-insensitive">浏览器支持</a></p>
138
+ <p>它选择那些<code>foo</code>属性的值等于<code>bar</code>的元素,忽略大小写。</p>
139
+ <p>例如:</p>
140
+ <pre><code>p[class=&quot;text&quot; i] &#123;
141
+ color: green;
142
+ &#125;
143
+ 复制代码
144
+ </code></pre>
145
+ <p>这会给所有的<code>class</code>属性的值为<code>Text</code>、<code>TEXT</code>、或者是<code>text</code>、又或者是其他组合的<code>p</code>元素添加一个颜色为绿色的样式。</p>
146
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/pGjVEg">在 Codepen 上试试</a></p>
147
+ <h4 id="foo-quot-bar-quot-s"><a href="#foo-quot-bar-quot-s" class="headerlink" title="[foo=&quot;bar&quot;s]"></a><code>[foo=&quot;bar&quot;s]</code></h4><p>在我写这篇文章的时候,还没有任何一个浏览器支持这个选择器。</p>
148
+ <p>它选择那些<code>foo</code>属性的值严格等于<code>bar</code>的元素。</p>
149
+ <p>例如:</p>
150
+ <pre><code>p[class=&quot;text&quot; s]&#123;
151
+ color: green;
152
+ &#125;
153
+ 复制代码
154
+ </code></pre>
155
+ <p>这会给所有<code>class</code>属性的值为<code>text</code>(例如,不是<code>Text</code>)的<code>p</code>元素添加一个颜色为绿色的样式。</p>
156
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/yZYjbJ">在 Codepen 上试试</a></p>
157
+ <h4 id="语言伪类?"><a href="#语言伪类?" class="headerlink" title="语言伪类?"></a>语言伪类?</h4><p>这类选择器包括那些使用语言相关设置的选择器。</p>
158
+ <h4 id="dir-ltr"><a href="#dir-ltr" class="headerlink" title=":dir(ltr)"></a><code>:dir(ltr)</code></h4><p><a target="_blank" rel="noopener" href="https://caniuse.com/#search=dir">浏览器支持</a></p>
159
+ <p>它选择那些具有从左到右方向性的元素,其中文档语言指定如何确定方向性。与之对应的:<code>:dir(rtl)</code>表示具有从右到左方向性的元素。其他值是无效的也不会匹配任何元素。</p>
160
+ <p>例如:</p>
161
+ <pre><code>p:dir(rtl) &#123;
162
+ background-color: red;
163
+ &#125;
164
+ 复制代码
165
+ </code></pre>
166
+ <p>这会给设置了从左到右方向的<code>p</code>元素添加一个背景色为红色的样式。</p>
167
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/GzpdwV">在 Codepen 上试试</a></p>
168
+ <h4 id="lang-zh-quot-hant-quot"><a href="#lang-zh-quot-hant-quot" class="headerlink" title=":lang(zh,&quot;*-hant&quot;)"></a><code>:lang(zh,&quot;*-hant&quot;)</code></h4><p><a target="_blank" rel="noopener" href="https://caniuse.com/#search=%3Alang">浏览器支持</a></p>
169
+ <p>在我写这篇文章的时候,还没有任何一个浏览器支持这个第四级选择器。</p>
170
+ <p>它选择那些被标记为中文的元素(或者选择其他语言标记的元素,只需要把<code>zh</code>改为其他的语言代码就可以了)或者用繁体字书写的元素(或者在其他字符的系统中,将<code>-hant</code>替换为其它字符代码)。</p>
171
+ <p>实际上,第二级选择器里面就有这个选择器,但是在第四级选择器里面新增了通配符和逗号分隔列表。</p>
172
+ <p>它接收一个或多个以逗号为分隔的语言代码作为参数。如果语言代码里面包含<code>*</code>,则必须对它们进行正确的转义(<code>:lang(es-\*)</code>)或字符串引号(<code>:lang(&quot;es-*&quot;)</code>)。</p>
173
+ <p>例如:</p>
174
+ <pre><code>p:lang(&quot;*-CH&quot;) &#123;
175
+ background-color: red;
176
+ &#125;
177
+ 复制代码
178
+ </code></pre>
179
+ <p>这会给所有被标记为使用瑞士语言的<code>p</code>元素添加一个背景色为红色的背景色。</p>
180
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/YByjzp">在 Codepen 上试试</a></p>
181
+ <h4 id="位置伪类"><a href="#位置伪类" class="headerlink" title="位置伪类"></a>位置伪类</h4><p>这类选择器包括那些与超链接有关得选择器。</p>
182
+ <h4 id="any-link"><a href="#any-link" class="headerlink" title=":any-link"></a><code>:any-link</code></h4><p>在<a target="_blank" rel="noopener" href="https://caniuse.com/#home">Can I use</a>上并没有这个选择器的兼容性介绍,但是大多数主流浏览器都支持这个选择器。</p>
183
+ <p>它选择那些具有<code>href</code>属性的元素(例如<code>&lt;a&gt;或&lt;link&gt;</code>。或者说,所有与<code>:link</code>或<code>:visited</code>伪类匹配的元素。</p>
184
+ <p>例如:</p>
185
+ <pre><code>a:any-link &#123;
186
+ color: red;
187
+ &#125;
188
+ 复制代码
189
+ </code></pre>
190
+ <p>这会给所有具有<code>href</code>属性的的所有<code>a</code>元素添加一个颜色为红色的样式。</p>
191
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/vbNaeJ">在 Codepen 上试试</a></p>
192
+ <h4 id="local-link"><a href="#local-link" class="headerlink" title=":local-link"></a><code>:local-link</code></h4><p>在我写这篇文章的时候,还没有任何一个浏览器支持这个第四级选择器。</p>
193
+ <p>它选择那些链接到当前 URL 的元素。如果链接的指向包括 URL 片段,则 URL 片段和和当前 URL 也必须要匹配。比如不匹配,则在比较中不考虑当前 URL 的片段 URL 部分。</p>
194
+ <p>例如:</p>
195
+ <pre><code>a:local-link &#123;
196
+ text-decoration: none;
197
+ &#125;
198
+ 复制代码
199
+ </code></pre>
200
+ <p>这会给所有的具有<code>href</code>属性的指向当前页面的<code>a</code>元素(也许它们是导航菜单的一部分)去掉下划线。</p>
201
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/GzpBwG">在 Codepen 上试试</a></p>
202
+ <h4 id="用户操作伪类"><a href="#用户操作伪类" class="headerlink" title="用户操作伪类"></a>用户操作伪类</h4><p>这类选择器包括那些用户正在操作的元素的选择器。</p>
203
+ <p><code>:focus-within</code></p>
204
+ <p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=css-focus-within">浏览器支持</a></p>
205
+ <p>它选择那些与<code>:focus</code>伪类匹配的元素(当元素具有焦点时)或具有与<code>:focus</code>匹配的子元素。</p>
206
+ <p>例如,使用如下的一个表单:</p>
207
+ <pre><code>&lt;from&gt;&lt;inputtype=&quot;text&quot;id=&quot;name&quot;placeholder=&quot;Enter your name&quot; /&gt;&lt;/from&gt;复制代码
208
+ </code></pre>
209
+ <p>当表单里的输入框获得焦点的时候,它会给表单添加一个边框。</p>
210
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/BMoGWx">在 Codepen 上试试</a></p>
211
+ <h4 id="focus-visible"><a href="#focus-visible" class="headerlink" title=":focus-visible"></a><code>:focus-visible</code></h4><p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=css-focus-visible">浏览器支持</a></p>
212
+ <p>它选择一个处于焦点状态的元素(与<code>:focus</code>伪类匹配),浏览器通常会为了让获得焦点的元素清晰可见,给它添加一个焦点环。</p>
213
+ <p>和<code>:focus</code>的区别和细微。</p>
214
+ <p>如果<code>:focus-visible</code>匹配了,<code>:focus</code>一定会匹配,但是反过来就不一定了,它取决于浏览器(如果启用了聚焦环的绘制)和获取焦点的元素(通过鼠标点击或者 tab 键)。</p>
215
+ <p>Firefox 把这个选择器实现为<code>:-moz-focusring</code>伪类。</p>
216
+ <p>例如,在某些场景下,有以下样式:</p>
217
+ <pre><code>/* 标准第四级选择器 */:focus-visible &#123;
218
+ background-color: lightgary;
219
+ &#125;
220
+ /* 基于 Firefox 的第四级选择器 */:moz-focusring &#123;
221
+ background-color: lightgary;
222
+ &#125;
223
+ 复制代码
224
+ </code></pre>
225
+ <p>只有在元素通过 tab 获得焦点的时候才会生效。</p>
226
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/KJdbMp">在 Codepen 上试试</a></p>
227
+ <h4 id="输入伪类"><a href="#输入伪类" class="headerlink" title="输入伪类"></a>输入伪类</h4><p>这类选择包括那些应用于接受用户输入的元素的选择器。</p>
228
+ <p><code>:read-write</code> and <code>:read-only</code></p>
229
+ <p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=css-read-only-write">浏览器支持</a></p>
230
+ <p><code>:read-write</code>选择可读可写的元素(例如那些不具有 <code>readonly</code>属性的<code>&lt;input&gt;</code>的元素)。</p>
231
+ <p><code>:read-only</code>选择那些只能读的元素(例如具有<code>readonly</code>属性的<code>&lt;input&gt;</code>的元素)。</p>
232
+ <p>然而,这些选择器不仅仅选择<code>&lt;input&gt;</code>或<code>&lt;textarea&gt;</code>元素,它们也可以选择用户能输入的任何选择,例如将<code>contenteditable</code>属性设置为<code>true</code>的<code>&lt;p&gt;</code>元素。</p>
233
+ <p>例如:</p>
234
+ <pre><code>:read-write &#123;
235
+ background-color: lightyellow;
236
+ &#125;
237
+
238
+ :read-only &#123;
239
+ background-color: lightgary;
240
+ &#125;
241
+
242
+ /* Firefox */:-moz-read-write &#123;
243
+ background-color: lightyellow;
244
+ &#125;
245
+
246
+ :moz-read-only &#123;
247
+ background-color: lightgary;
248
+ &#125;
249
+ 复制代码
250
+ </code></pre>
251
+ <p>这会把页面上所有的不可编辑元素背景色设置为浅灰色,把可以编辑的元素的背景色设置为浅黄色。</p>
252
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/JxGXWw">在 Codepen 上试试</a></p>
253
+ <h4 id="placeholder-shown"><a href="#placeholder-shown" class="headerlink" title=":placeholder-shown"></a><code>:placeholder-shown</code></h4><p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=css-placeholder-shown">浏览器支持</a></p>
254
+ <p>它选择一个当前正在显示占位符文本的输入框元素。</p>
255
+ <p>例如:</p>
256
+ <pre><code>input:placeholder-shown &#123;
257
+ color: red;
258
+ &#125;
259
+ 复制代码
260
+ </code></pre>
261
+ <p>这会给当前显示占位符文本的<code>input</code>元素设置一个颜色为红色的样式,注意这里设置的只是光标的颜色。</p>
262
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/jdWrbp">在 Codepen 上试试</a></p>
263
+ <h4 id="default"><a href="#default" class="headerlink" title=":default"></a><code>:default</code></h4><p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=css-default-pseudo">浏览器支持</a></p>
264
+ <p>它选择那些在一组相关元素里面作为默认选项的元素。通常用于按钮和选择列表 &#x2F; 菜单。</p>
265
+ <p>例如:</p>
266
+ <pre><code>input:default &#123;
267
+ box-shadow: 002px2px green;
268
+ &#125;
269
+
270
+ input:defaut + lable &#123;
271
+ color: green;
272
+ &#125;
273
+ 复制代码
274
+ </code></pre>
275
+ <p>这会给默认<code>&lt;input&gt;</code>元素的标签设置绿色阴影和颜色。</p>
276
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/wNMWjx">在 Codepen 上试试</a></p>
277
+ <h4 id="indeterminate"><a href="#indeterminate" class="headerlink" title=":indeterminate"></a><code>:indeterminate</code></h4><p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=css-indeterminate-pseudo">浏览器支持</a></p>
278
+ <p>它选择那些处于不确定状态的元素。例如,单选框组和复选框组里包含的那些未被选中的元素,或者进度百分比未知的进度条。</p>
279
+ <p>例如:</p>
280
+ <pre><code>input[type=&quot;radio&quot;]:indeterminate + label &#123;
281
+ color: red;
282
+ &#125;
283
+ 复制代码
284
+ </code></pre>
285
+ <p>如果组中还没有任何一个元素被选,。这会给这个组的标签添加一个颜色为红色的样式。</p>
286
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/yZeaBL">在 Codepen 上试试</a></p>
287
+ <h4 id="valid-和-invalid"><a href="#valid-和-invalid" class="headerlink" title=":valid 和 :invalid"></a><code>:valid</code> 和 <code>:invalid</code></h4><p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=form-validation">浏览器支持</a></p>
288
+ <p>它选择那些根据有效性语义或值的有效或无效的元素。如果没有定义值的有效性规则,则这个元素既不满足<code>:valid</code>也不满足<code>:invalid</code>。</p>
289
+ <p>例如:对于一个输入类型为<code>email</code>的元素:</p>
290
+ <pre><code>input:invalid &#123;
291
+ color: red;
292
+ &#125;
293
+ input:valid &#123;
294
+ color: green;
295
+ &#125;
296
+ 复制代码
297
+ </code></pre>
298
+ <p>这会根据元素里面输入的电子邮件是否有效为依据去为元素的文本设置不同颜色。</p>
299
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/xMZEjp">在 Codepen 上试试</a></p>
300
+ <h4 id="in-range-和-out-of-range"><a href="#in-range-和-out-of-range" class="headerlink" title=":in-range 和 :out-of-range"></a><code>:in-range</code> 和 <code>:out-of-range</code></h4><p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=css-in-out-of-range">浏览器支持</a></p>
301
+ <p>这些选择器只适用于那些具有范围限制的元素,例如,定义了最大最小值的元素。如果没有定义,则都不匹配。</p>
302
+ <p>例如:一个设置了最小只为 1 最大值为 5 的输入框。</p>
303
+ <pre><code>input:out-of-range &#123;
304
+ color: red;
305
+ &#125;
306
+
307
+ input:in-range &#123;
308
+ color: green;
309
+ &#125;
310
+ 复制代码
311
+ </code></pre>
312
+ <p>这会给依据输入的值设置不同的颜色样式。</p>
313
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/RvroLN">在 Codepen 上试试</a></p>
314
+ <p>在某些情况下,某些选择器会具有与<code>:valid</code>和<code>:invalid</code>相同的效果。</p>
315
+ <h4 id="required和-optional"><a href="#required和-optional" class="headerlink" title=":required和:optional"></a><code>:required</code>和<code>:optional</code></h4><p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=form-validation">浏览器支持<code>:required</code></a></p>
316
+ <p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=css-optional-pseudo">浏览器支持<code>:optional</code></a></p>
317
+ <p>这些选择器分别适用于在提交表单的之前必填的和选填的表单元素。那些非表单元素不会被匹配。</p>
318
+ <p>例如:</p>
319
+ <pre><code>input:optional &#123;
320
+ color: gray;
321
+ &#125;
322
+ input:required &#123;
323
+ color: red;
324
+ &#125;
325
+ 复制代码
326
+ </code></pre>
327
+ <p>这会给那些必填的元素添加设置红色的样式,给非必填的元素添加灰色的样式。</p>
328
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/QYyGRQ">在 Codepen 上试试</a></p>
329
+ <h4 id="树结构伪类"><a href="#树结构伪类" class="headerlink" title="树结构伪类"></a>树结构伪类</h4><p>这类选择器包括那些允许基于文档树中的信息进行选择,但是不能由其它选择器表示的选择器,例如元素相对于其父元素的位置。</p>
330
+ <h4 id="nth-child-n-of-selector-和-nth-last-child-n-of-selector"><a href="#nth-child-n-of-selector-和-nth-last-child-n-of-selector" class="headerlink" title=":nth-child(n [of selector]?) 和 :nth-last-child(n [of selector]?)"></a><code>:nth-child(n [of selector]?)</code> 和 <code>:nth-last-child(n [of selector]?)</code></h4><p><a target="_blank" rel="noopener" href="https://caniuse.com/#feat=css-nth-child-of">浏览器支持</a>(在我写这篇文章的时候,还没有任何一个浏览器支持这个第四级选择器。)</p>
331
+ <p><code>:nth-child</code>选择器匹配作为其父级的第 n 个子元素。<code>:nth-last-child</code>也一样的,只不过它是从最后一个元素开始计数的。你可以使用<a target="_blank" rel="noopener" href="https://css-tricks.com/examples/nth-child-tester/"><code>:nth</code>测试</a>来了解它们之间的区别,并进一步了解 <a target="_blank" rel="noopener" href="https://drafts.csswg.org/css-syntax-3/#anb-microsyntax">An+B 表示法</a>。</p>
332
+ <p>在这篇文章的开头,我举了一个<code>:nth.last-child</code>的例子,我说这个第三级的选择器。然而,对于第四级选择器,这个选择器接收一个可选的<code>of</code>选择器用来筛选仅与该选择器匹配的子元素。</p>
333
+ <p>除了功能更加强大之外,它的声明方式也可以不同。例如:</p>
334
+ <pre><code>li.item:nth-child(-n+2)复制代码
335
+ </code></pre>
336
+ <p>选择前面两个具有<code>item</code>类的<code>&lt;li&gt;</code>元素。</p>
337
+ <p>它和以下的不同:</p>
338
+ <pre><code>:nth-child(-n+2ofli.item)
339
+ 复制代码
340
+ </code></pre>
341
+ <p>这会选择前面两个带有<code>item</code>类的<code>&lt;li&gt;</code>元素即使它们并不是列表的前两个元素。</p>
342
+ <p>尝试一下(在支持该选择器的浏览器中,例如 Safari):</p>
343
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/NoxgEE">例一</a></p>
344
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/pGgwpG">例二</a></p>
345
+ <h4 id="网格结构伪类"><a href="#网格结构伪类" class="headerlink" title="网格结构伪类"></a>网格结构伪类</h4><p>这类选择器包括使用表格的列的选择器。</p>
346
+ <h4 id="F-E"><a href="#F-E" class="headerlink" title="F || E"></a><code>F || E</code></h4><p>在我写这篇文章的时候,还没有任何一个浏览器支持这个选择器。</p>
347
+ <p>列组合器选择器(||)选择类型 E 的元素,该元素表示表中的单元格并属于由类型 F 的元素表示的列。</p>
348
+ <p>例如,有如下表:<br>IDDescriptionPrice1Computer$9992Tablet$499<br>对于以下样式</p>
349
+ <pre><code>col.selected || td &#123;
350
+ background-color: lightyellow;
351
+ &#125;
352
+ 复制代码
353
+ </code></pre>
354
+ <p>这会给所选列(价格)的单元格(<code>&lt;td&gt;元素</code>)设置浅黄色的背景色。</p>
355
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/xMZLQY">在 Codepen 上试试</a></p>
356
+ <h4 id="nth-col-An-B-和-nth-last-col-An-B"><a href="#nth-col-An-B-和-nth-last-col-An-B" class="headerlink" title=":nth-col(An+B)和:nth-last-col(An+B)"></a><code>:nth-col(An+B)</code>和<code>:nth-last-col(An+B)</code></h4><p>在我写这篇文章的时候,这个选择器还没有被任何一个浏览器支持。</p>
357
+ <p>你可以把这些选择器看作是<code>:nth-child</code>和<code>:nth-last-child</code>的列版本。</p>
358
+ <p><code>:nth-col(An+B)</code>选择网格或表格中的一个在该元素之间还有 An+B-1 个元素的元素(n 为 0 或任意一个整数)。</p>
359
+ <p>例如:</p>
360
+ <pre><code>col.nth-col(1) &#123;
361
+ background-color: lightyellow;
362
+ &#125;
363
+ col.nth-last-col(1) &#123;
364
+ background-color: lightgreen;
365
+ &#125;
366
+ 复制代码
367
+ </code></pre>
368
+ <p>这会给表格的第一列元素添加一个浅黄色背景色,。被最后一列元素添加一个浅绿色背景色。</p>
369
+ <p><a target="_blank" rel="noopener" href="https://codepen.io/eh3rrera/pen/RvrLwm">在 Codepen 上试试</a></p>
370
+ <h4 id="结论"><a href="#结论" class="headerlink" title="结论"></a>结论</h4><p>第四级选择器使您可以轻松声明复杂的选择规则。</p>
371
+ <p>我们涵盖了2019年1月《编辑器草案》规范中定义的大多数选择器,但是,我遗漏了一些可能会很快消失或很快改变的选择器,或者关于它们的信息不多(除了不受支持) 任何浏览器):</p>
372
+ <ul>
373
+ <li><a target="_blank" rel="noopener" href="https://drafts.csswg.org/selectors-4/#target-within-pseudo"><code>:target-within</code></a></li>
374
+ <li><a target="_blank" rel="noopener" href="https://drafts.csswg.org/selectors-4/#the-scope-pseudo"><code>:scope</code></a>(不要将它和作用域样式混淆)</li>
375
+ <li><a target="_blank" rel="noopener" href="https://drafts.csswg.org/selectors-4/#time-pseudos">时间伪类</a>(你可以在<a target="_blank" rel="noopener" href="http://css4.rocks/time-dimensional-pseudo-classes.php">这里</a>了解更多信息)</li>
376
+ <li><a target="_blank" rel="noopener" href="https://drafts.csswg.org/selectors-4/#blank"><code>:blank</code></a></li>
377
+ <li><a target="_blank" rel="noopener" href="https://drafts.csswg.org/selectors-4/#user-pseudos"><code>:user-invalid</code></a></li>
378
+ </ul>
379
+ <p>但绝对要注意这些以及第4级选择器的其余部分。</p>
380
+ </div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&amp;WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&amp;UnionPayQR=null&amp;GitHub=null&amp;BTCQR=null&amp;BTCKEY=null&amp;PayPal=https://www.paypal.com/paypalme/OrdinaryPerson" style="overflow-x:hidden; overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/4783.html">https://xuehuayu.cn/article/4783.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载</a></div><div class="post-nav"><a class="pre" href="/article/26624.html">Node.js 13.0 正式发布</a><a class="next" href="/article/23655.html">webpack 5 之持久化缓存指南</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
381
+ const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
382
+ const locale = {
383
+ placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',
384
+ sofa: '沙发空缺中,还不快抢~',
385
+ };
386
+ Waline.init({
387
+ el: '#vcomment',
388
+ serverURL: serverURL,
389
+ pageSize: '20',
390
+ visitor: true, // 阅读量统计
391
+ requiredMeta: ['nick', 'mail'],
392
+ emoji: [
393
+ 'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
394
+ 'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/qq',
395
+ 'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/tw-emoji',
396
+ ],
397
+ locale,
398
+ pageview: true
399
+ })
400
+ </script></div></div></div><div class="pure-u-1 pure-u-md-1-4 fixed-search hidden_mid_and_down"><div id="sidebar"><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/search.min.js"></script><div class="widget"><div class="widget-search"><input class="search" type="radio" name="search" value="baidu" id="baidu" checked="checked"/><label class="label" for="baidu" title="百度全站搜索">百度</label><input class="search" type="radio" name="search" value="google" id="google"/><label class="label" for="google" title="谷歌全站搜索">谷歌</label><input class="search" type="radio" name="search" value="self" id="self"/><label class="label" for="self" title="使用站内搜索">站内</label></div><div class="widget" id="search"><form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"/><input type="hidden" name="si" value="xuehuayu.cn"/><input type="hidden" name="cl" value="3"/><input type="hidden" name="ct" value="2097152"/><input type="hidden" name="s" value="on"/><input class="search-submit" type="submit" value=""/></form></div></div><script>$('input[type=radio][name=search]').change(function() {
401
+ var val = $(this).val()
402
+ var self = '<div class="search-form"><input id="local-search-input" placeholder="站内搜索,首次慢" type="search" name="q" results="0"><input class="search-submit" type="submit" value=""/><div id="local-search-result"></div></div>'
403
+ var google = '<form class="search-form" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="q" maxlength="30" placeholder="谷歌全站搜索"><input type="hidden" name="sitesearch" value="xuehuayu.cn"><input class="search-submit" type="submit" value=""/></form>'
404
+ var baidu = '<form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"><input type="hidden" name="si" value="xuehuayu.cn"><input type="hidden" name="cl" value="3"><input type="hidden" name="ct" value="2097152"><input type="hidden" name="s" value="on"><input class="search-submit" type="submit" value=""/></form>'
405
+
406
+ if (val === 'self') {
407
+ $('#search').html(self)
408
+ var search_path = 'search.xml';
409
+ if (search_path.length == 0) {
410
+ search_path = 'search.xml';
411
+ }
412
+ var path = 'https://cdn.staticaly.com/gh/npljy/npljy.github.io/main/' + search_path;
413
+ searchFunc(path, 'local-search-input', 'local-search-result');
414
+ } else if (val === 'baidu') {
415
+ $('#search').html(baidu)
416
+ } else if (val === 'google') {
417
+ $('#search').html(google)
418
+ }
419
+ })</script><div class="widget widget-wxmp"><img alt="微信公众号" width="100%" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/mp-mini.jpg"/></div><div class="widget widget-categories"><div class="widget-title"><i class="fa fa-folder-o"> 分类</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/CDN/">CDN</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/IDE/">IDE</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/git/">git</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/hexo/">hexo</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%85%AC%E5%85%B1%E8%8A%82%E6%97%A5/">公共节日</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%88%86%E4%BA%AB/">分享</a><span class="category-list-count">29</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/">前端</a><span class="category-list-count">191</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">1</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/">网络协议</a><span class="category-list-count">1</span></li></ul></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%8D%9A%E5%AE%A2/">博客</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B7%A5%E5%85%B7/">工具</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/">广告过滤</a><span class="category-list-count">8</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/%E8%A7%86%E9%A2%91%E7%94%B5%E8%A7%86%E5%B0%8F%E8%AF%B4%E6%BC%AB%E7%94%BB%E8%B5%84%E8%AE%AF%E9%9F%B3%E4%B9%90/">视频电视小说漫画资讯音乐</a><span class="category-list-count">2</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%AD%A3%E5%88%99/">正则</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E7%AE%97%E6%B3%95/">算法</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%B5%84%E8%AE%AF/">资讯</a><span class="category-list-count">16</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%BD%BB%E6%9D%BE%E4%B8%80%E5%88%BB/">轻松一刻</a><span class="category-list-count">1</span></li></ul></div><div class="widget widget-tags"><div class="widget-title"><i class="fa fa-star-o"> 标签</i></div><div class="tagcloud"><a href="/tags/%E5%8E%9F%E5%88%9B/" style="font-size: 15px;">原创</a> <a href="/tags/%E8%BD%AC%E8%BD%BD/" style="font-size: 15px;">转载</a> <a href="/tags/%E6%89%8B%E5%86%99/" style="font-size: 15px;">手写</a> <a href="/tags/%E7%96%AB%E6%83%85/" style="font-size: 15px;">疫情</a> <a href="/tags/%E5%A8%B1%E4%B9%90/" style="font-size: 15px;">娱乐</a></div></div><div class="widget widget-recent-posts"><div class="widget-title"><i class="fa fa-file-o"> 最近文章</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/article/c5576490.html">面试准备</a></li><li class="post-list-item"><a class="post-list-link" href="/article/84c9ccd6.html">精读《SolidJS》</a></li><li class="post-list-item"><a class="post-list-link" href="/article/53803e6.html">git提交注释规范</a></li><li class="post-list-item"><a class="post-list-link" href="/article/a4145266.html">前端数组拍平flat一行代码</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bedea419.html">一道前端this面试题</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bf7e7421.html">git多账号配置</a></li></ul></div><div class="widget widget-links"><div class="widget-title"><i class="fa fa-external-link"> 友情链接</i></div><ul></ul><a href="https://github.com/npljy?utm_source=xuehuayu.cn" title="GitHub" target="_blank">GitHub</a><ul></ul><a href="https://laonongmin.online?utm_source=xuehuayu.cn" title="看看" target="_blank">看看</a><ul></ul><a href="https://cainiaoblog.cn?utm_source=xuehuayu.cn" title="菜鸟博客" target="_blank">菜鸟博客</a><ul></ul><a href="mailto:cainiaoblog@126.com" title="友链联系" target="_blank">友链联系</a></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer"><div class="flex-block justify-center align-center flex-wrap"><a class="gxba-link" id="gxba" rel="nofollow" target="_blank" href="http://beian.miit.gov.cn/">京ICP备20007647号-2</a><a class="gaba-link" id="gaba-link" rel="nofollow" target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031264"><img class="nofancybox" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/gaba.png" alt=""/><span id="gaba">京公网安备 11010802031264号</span><span style="padding-right: 10px;"></span></a><span>Copyright © 2023 </span><a href="/." rel="nofollow">前端壹菜鸟. </a><script>(function(){
420
+ var cnb =window.location.origin.indexOf('cainiaoblog') !==-1
421
+ if (cnb) {
422
+ var gxba =document.getElementById('gxba')
423
+ var gaba =document.getElementById('gaba')
424
+ var gabaLink =document.getElementById('gaba-link')
425
+ gxba.innerText ='京ICP备20007647号-1'
426
+ gaba.innerText ='京公网安备 11010802031254号'
427
+ gabaLink.setAttribute('href','http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031254')
428
+ }
429
+ })()</script></div><div class="flex-block justify-center align-center flex-wrap"><a rel="nofollow" target="_blank" href="https://v6.51.la/s/Guz3lwHCsVme9Cu"><div class="busuanzi_container" id="busuanzi_container"><span class="busuanzi_container_site_pv" id="busuanzi_container_site_pv">访问量:<span id="busuanzi_value_site_pv"><i class="fa fa-spinner"></i></span></span><span class="busuanzi_container_site_uv" id="busuanzi_container_site_uv">访客数:<span id="busuanzi_value_site_uv"><i class="fa fa-spinner"></i></span></span><span style="padding-right: 10px;"></span></div></a><a rel="nofollow" target="_blank" href="https://www.upyun.com/?utm_source=lianmeng&amp;utm_medium=referral"><span style="font-weight:bold;letter-spacing: 1px;">本网站由 </span><img class="nofancybox" height="32" style="vertical-align: middle" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/upy_logo.min.svg" alt=""/><span style="font-weight:bold;letter-spacing: 1px;">提供CDN加速/云存储服务</span></a><span style="padding-right: 10px;"></span><a rel="nofollow" style="font-size:18px;font-weight:bold;vertical-align: middle" target="_blank" title="注册就送代金券可直接使用" href="https://console.upyun.com/register/?invite=HyDsjZHIL">注册</a></div></div></div></div><a class="show" id="rocket" href="#top"></a><div class="darkmode-toggle">🌓</div><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/totop.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/dark.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/codeblock-resizer.min.js"></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/smartresize.min.js"></script></div></body></html>