[[toc]]
- Web 技术教程-W3School https://www.w3school.com.cn/index.html
- Web 开发技术-MDN https://developer.mozilla.org/zh-CN/docs/Web
- Web API https://developer.mozilla.org/zh-CN/docs/Web/API
- W3C 网页标准教程 http://www.w3chtml.com
- https://github.com/junruchen/junruchen.github.io/wiki
- https://github.com/mathjax
TypeScript
WebAssembly
- https://github.com/WebAssembly
- https://developer.mozilla.org/zh-CN/docs/WebAssembly
- https://webassembly.org
- https://www.wasm.com.cn
- Mozilla:可以用 Rust + WebAssembly 作为 JavaScript 替代
- Google:可以用 Dart + WebAssembly 作为 JavaScript 替代
- Microsoft:可以用 TypeScript/AssemblyScript + WebAssembly 作为 JavaScript 替代
- https://github.com/twbs/bootstrap
- neditor 基于ueditor的更现代化的富文本编辑器,支持HTTPS
- f2ex.cn 各种前端资源
- https://github.com/sentsin/layui
- https://github.com/topics/static-site
- https://github.com/topics/blog-engine
- https://github.com/topics/static-blog
- 不蒜子文章统计
- https://www.algolia.com/docsearch
- 静态编译VuePress
- 静态编译NuxtJs
- 静态编译Hexo
- 静态编译Hugo
- 静态编译Jekyll
- 静态编译Docsite
- 运行时驱动Docsify
- https://github.com/docpress/docpress
- 运行时驱动Docute
- 从仓库生成文档
- https://github.com/getgridea/gridea
创建自己的免费网站
VuePress主题
- https://github.com/ktquez/vuepress-theme-ktquez
- https://github.com/zhhlwd/vuepress-theme-indigo-material
- https://github.com/meteorlxy/vuepress-theme-meteorlxy
- https://github.com/2020807070/vuepress-theme-cchao
- https://github.com/tolking/vuepress-theme-ououe
- https://github.com/ocavue/vuepress-theme-blogue
- https://github.com/xuzhongpeng/vuepress-theme-reform
- https://github.com/yuicer/vuepress-theme-yuicer
- https://github.com/Coolyang1996/vuepress-theme-eugeo
- https://github.com/YoungsunLi/vuepress-theme-concise
- https://github.com/hirCodd/vuepress-theme-tassel
- https://github.com/leCapsimRy/vuepress-theme-cycle
- https://github.com/a298003154/vuepress-theme-hhh
- https://github.com/ms-design/vuepress-theme-fluent
- https://github.com/zp961214/vuepress-theme-lovely
- https://github.com/HKChen/vuepress-theme-prettyPure
- https://github.com/summer1874/vuepress-theme-neon
- https://github.com/zhangximufeng/vuepress-theme-mufeng
- https://github.com/ZjBlog/vuepress-theme-zjblog
- https://github.com/recoluan/vuepress-theme-reco
- https://github.com/zp961214/Blog
- https://www.netlify.com
- https://slack.com/get-started
- https://docs.travis-ci.com/user/tutorial
- https://github.com/zeit
- https://github.com/heroku
- https://fast.io
- https://www.appveyor.com
- https://kubesail.com
- https://azure.microsoft.com/zh-cn/services/devops/pipelines
-
使用固定的版本号:
unpkg.com/[email protected]/umd/react.production.min.js
unpkg.com/[email protected]/umd/react-dom.production.min.js
-
也可使用语义化版本范围,或标签来代替固定版本号,亦可忽略版本和标签,直接使用最新的版本。
unpkg.com/react@^16/umd/react.production.min.js
unpkg.com/react/umd/react.production.min.js
-
如果忽略了文件的路径(例如,使用裸网址 “bare” URL),unpkg 会提供 package.json 里指定的文件,或降级到 main。
unpkg.com/d3
unpkg.com/jquery
unpkg.com/three
注:这种方式会产生一次 302 到最新的文件 URL。好处是自动使用最新版,坏处是多一次性跳转,降低了性能。
- 在网址最后添加斜线,可以查看一个包内的所有文件列表。
unpkg.com/react/
unpkg.com/lodash/
- https://github.com/jsdelivr/jsdelivr
- https://www.bootcdn.cn
- http://staticfile.org
- https://cdn.baomitu.com
fonts.gstatic.com fonts-gstatic.proxy.ustclug.org
fonts.gstatic.com gstatic.loli.net
fonts.gstatic.com gapis.geekzu.org/g-fonts
fonts.googleapis.com fonts.proxy.ustclug.org
fonts.googleapis.com fonts.loli.net
fonts.googleapis.com fonts.geekzu.org
ajax.googleapis.com ajax.proxy.ustclug.org
ajax.googleapis.com ajax.loli.net
ajax.googleapis.com gapis.geekzu.org/ajax
registry-1.docker.io docker.mirrors.ustc.edu.cn
packages.elastic.co elastic.proxy.ustclug.org
ppa.launchpad.net launchpad.proxy.ustclug.org
archive.cloudera.com/cdh5/ cloudera.proxy.ustclug.org/cdh5/
downloads.lede-project.org lede.proxy.ustclug.org
downloads.openwrt.org openwrt.proxy.ustclug.org
registry.npmjs.org npmreg.proxy.ustclug.org
www.npmjs.com npm.proxy.ustclug.org
themes.googleusercontent.com google-themes.proxy.ustclug.org
themes.googleusercontent.com themes.loli.net
themes.googleusercontent.com gapis.geekzu.org/g-themes
secure.gravatar.com gravatar.proxy.ustclug.org
secure.gravatar.com gravatar.loli.net
secure.gravatar.com/avatar sdn.geekzu.org/avatar
www.gravatar.com/avatar fdn.geekzu.org/avatar
[0-2].gravatar.com/avatar fdn.geekzu.org/avatar
cdnjs.cloudflare.com cdnjs.loli.net
面包屑导航(BreadcrumbNavigation),这个概念名词来自一段童话故事“汉塞尔和格莱特”他们在森林里玩耍迷了路, 于是用一路撒面包屑的方式找到了出去的路。所以面包屑导航的作用是告诉访问者他们目前所在网站的位置以及如何返回上一级页面
面包屑导航(BreadcrumbNavigation)的作用及影响,让用户了解目前所在的位置,以及当前页面在整个网站中所在的位置; 体现了网站的架构层级;提高了用户体验;减少返回到上一级页面的操作;不用常常占用屏幕空间;降低跳出率; 有利于蜘蛛对网站的抓取;提供返回各个曾记得快速入口;有利于网站内链的建设。
注意:不管事次导航还是面包屑导航我们都要记住一点,不要堆砌关键词来放在导航栏上面。 关键词一定要自然分布,结合面包屑的导航让用户体验更好,页面更友好与搜索引擎也更友好。
Chrome
打开网页F12
后下面的调试工具出来后点击Elements
左边的那个框框里的鼠标箭头 (或者按Ctrl + Shift + C), 然后网页会变成蓝色,到网页点击自己要选择的区域,接下来就会自动跳到Elements
对应的位置, 在HTML
的标签上点击鼠标右键->Copy
->COpy selector
或者xpath
,就能复制选择器了。
css元素选择器
语法 | 说明 |
---|---|
* | 通用元素选择器,匹配任何元素 |
E | 标签选择器,匹配所有使用E标签的元素 |
.info | class选择器,匹配所有class属性中包含info的元素 |
#footer | id选择器,匹配所有id属性等于footer的元素 |
E,F | 多元素选择器,同时匹配所有E元素或F元素,E和F之间用逗号分隔 |
E F | 后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔 |
E > F | 子元素选择器,匹配所有E元素的子元素F |
E + F | 毗邻元素选择器,匹配紧随E元素之后的同级元素F (只匹配第一个) |
E ~ F | 同级元素选择器,匹配所有在E元素之后的同级F元素 |
E[att='val'] | 属性att的值为val的E元素 (区分大小写) |
E[att^='val'] | 属性att的值以val开头的E元素 (区分大小写) |
E[att$='val'] | 属性att的值以val结尾的E元素 (区分大小写) |
E[att*='val'] | 属性att的值包含val的E元素 (区分大小写) |
E[att1='v1'][att2*='v2'] | 属性att1的值为v1,att2的值包含v2 (区分大小写) |
E:contains('xxxx') | 内容中包含xxxx的E元素 |
E:not(s) | 匹配不符合当前选择器的任何元素 |
- 匹配示例
locator | 匹配 |
---|---|
css=divcss=div.formdiv | <div class="formdiv"> |
css=#recordlistcss=ul#recordlist | <ul id="recordlist"> |
css=div.subdiv pcss=div.subdiv > ul > p | <p>Heading</p> |
css=form + div | <div class="subdiv"> |
css=p + licss=p ~ li | 二者定位到的都是<li>Cat</li> 但是storeCssCount的时候,前者得到1,后者得到4 |
css=form > input[name=username] | <input name="username"> |
css=input[name$=id][value^=SYS] | <input value="SYS123456" name="vid" type="hidden"> |
css=input:not([name$=id][value^=SYS]) | <input name="username" type="text"></input> |
css=li:contains('Goa') | <li>Goat</li> |
css=li:not(contains('Goa')) | <li>Cat</li> |
Sizzle
的Css3
结构性定位
语法 | 说明 |
---|---|
E:nth(n)E:eq(n) | 在其父元素中的E子元素集合中排在第n+1个的E元素 (第一个n=0) |
E:first | 在其父元素中的E子元素集合中排在第1个的E元素 |
E:last | 在其父元素中的E子元素集合中排在最后1个的E元素 |
E:even | 在其父元素中的E子元素集合中排在偶数位的E元素 (0,2,4…) |
E:odd | 在其父元素中的E子元素集合中排在奇数的E元素 (1,3,5…) |
E:lt(n) | 在其父元素中的E子元素集合中排在n位之前的E元素 (n=2,则匹配0,1) |
E:gt(n) | 在其父元素中的E子元素集合中排在n位之后的E元素 (n=2,在匹配3,4) |
E:only-child | 父元素的唯一一个子元素且标签为E |
E:empty | 不包含任何子元素的E元素,注意,文本节点也被看作子元素 |
- 匹配示例
locator | 匹配 |
---|---|
css=ul > li:nth(0) | <li>Cat</li> |
css=ul > li:first | <li>Cat</li> |
css=ul > li:lt(2) | <li>Cat</li> |
css=ul > *:nth(0)css=ul > :nth(0) | <p>Heading</p> |
css=ul > :first | <p>Heading</p> |
css=ul > :even | <p>Heading</p> |
css=ul > *:lastcss=ul > li:last | <li>Goat</li> |
css=ul > li:gt(2) | <li>Goat</li> |
css=ul > li:even | Cat, Car |
css=ul > li:odd | Dog, Goat |
css=ul > p:odd | [error] not found |
css=ul > li:only-childcss=ul > :only-childcss=ul > *:only-child | [error] not found (ul没有only-child) |
css=div.subdiv > :only-child | <ul id="recordlist">… … … …</ul> |
执行以下JS然后保存页面,打开保存到本地的页面再打印即可
document.querySelector("body").style.margin="0px";
document.querySelector(".header").style.display="none";
document.querySelector(".template-container").style.paddingTop="14px";
document.querySelector(".template-container").style.paddingBottom="0px";
document.querySelector(".preview-box").style.margin="0 auto";
document.querySelector(".preview-box").style.borderRadius="0";
document.querySelector(".preview-box").style.boxShadow="none";
var certificateBox = document.querySelectorAll(".certificate-box .item");
certificateBox[0].style.display="list-item";
certificateBox[0].style.margin="0px";
certificateBox[1].style.display="list-item";
certificateBox[1].style.margin="0px";