HTML(Hyper Text Markup Language)超文本标记语言,是构建网站的基石。游览器通过解析 HTML 来将万维网中传输的 字节流
渲染成丰富多彩的可视化网页。
由于我不是写前端的,就用在线 Web 调试工具 饥人谷 JsBin 和 代码沙盒 来进行 HTML 的编辑。更多参考资料:MDN HTML 文档。
HTML 章节与内容标签
1. HTML 起手式
HTML 代码由许许多多不同的标签(tag)构成。下图为 HTML 的一个常规模版:
<head>
里面一般放一些看不见的元素,如编码方式、全文样式<style>
、标题、JS等<body>
里面写网页的具体内容- 模版中的内容只需要改 title 和语言,其他暂时都不变。
- 有个输入标签的快捷键,打出标签单词后按键盘上的
Tab
键就可以快速补全代码了。
2. HTML 章节标签
章节标签用于划分网页 / 文章的层级,使页面结构清晰,也便于添加 CSS 样式
- 标题:
<h1~h6>
字体从大到小,h1 一个页面最多一个,不能为了调整字体大小而使用 - 章节:
<section>
开始了一个新的章节,里面一般用 h2,h3;章节里面可以再套章节 - 文章:
<article>
- 段落:
<p>
- 头部:
<header>
放置顶的广告 - 脚部:
<footer>
最下面的版权声明等,©
打出版权的符号 - 主要内容:
<main>
里面是标题+章节 - 旁支内容:
<aside>
可以写导航,或在 main 的下面写个参考资料 - 划分:
<div>
用于划分页面结构,使结构更加清晰
3. 全局属性
全局属性一般写在章节标签中,为一个块添加功能或者更改样式:
class
给标签分类,只是个标记,可以写多个 class 名称,方便之后设置样式contenteditable
使元素可以被用户编辑,可以做一个自己的编辑器hidden
写在标签字的后面,将对应的整个块 block 隐藏起来id
- 用 id 还是用 class,如果当前标签内容是全页面唯一的,用 id;不然用 class
- 不到万不得已,千万不要用 id,因为 id 不报错…
#xxx{}
/[id=xxx]{}
写 id 相关的样式- id 可以直接在 JS 中调用,
xxx.style.border = '1px solid green'
当有重复 id 时不生效 - id 名字不可与 windows 自带的全局属性重复。
<style>
写在head里面,[class=middle bordered]
等号判断需要 class 名完全相等,不推荐使用.middle
可以匹配 class 名中用空格分配的一部分- style 可以放 body 然后改 display: block; 显示出来 —> 加 contenteditable,就可以让用户自己改自己的样式
- style 也可以直接写在章节标签后面
style="border: 5px solid green;"
,这里的优先级比写在 head 中的要高 (JS 的优先级高于章节标签,JS 会覆盖它们其他两个)
tabindex
- 让没有鼠标的用户用键盘上的 tab 也可以实现网页的游览
- 加在章节标签后面 tabindex=1 2 3 … ,来控制 tab的顺序的;0 是最后一个,-1 不要到这里
title
- 标题内容太多,一行放不下,然后不换行,最后….
- 用户鼠标放上到…后,显示 title 的值,可以显示完整的内容。
4. 内容标签
- ol + li:ordered list;list item
- ul + li:unordered list
- dl + dt + dd:description list;description term;description data
- pre
- html 默认多个空格 / 换行会缩成一个空格 —> 因为写代码有时候要换行缩进
- 用 pre 标签包住想要保留空格 / 回车的内容就可以了,一般用在 code 中。
- 一般会在 style 中声明 pre 的字体:
font: inherit;
- hr:水平分割线
- br:换行,直接写在要换行的地方就可以了
- a :超链接,href=“qq.com” - target="_blank" 打开一个新的窗口 可以安装个插件 Death To _blank 来实现自己控制是否打开新的标签
- em:emphasis 强调 - 默认斜体,可以自定义样式,指语气很重要
- strong:重要 - 默认加粗,可以自定义样式,指内容很重要
- code
- code 里面的字是等宽的,方便对齐
- 默认为内联 inline,外面套 pre 就可以换行了
- quote:内联的引用
- blockquote:块级的引用
- iframe:内嵌窗口(套娃),已经很少使用了,还有些老系统在用
前端的日常工作有:
<ol>
<li>写页面</li>
<li>发邮件</li>
<li>和产品经理探讨人生</li>
</ol>
老王的兴趣爱好有:
<ul>
<li>唱</li>
<li>跳</li>
<li>篮球</li>
</ul>
5. 文本样式
斜体:<i></i>
粗体:<b></b>
删除线:<s></s>
下划线:<u></u>
上标:<sup></sup>
下标:<sub></sub>
HTML 常用重点标签
重点介绍 a、table、img、form 这几个标签。
1. a 标签
a 标签的作用:
- 跳转外部页面
- 跳转内部锚点
- 跳转到邮箱或电话等
1.1 href 属性
- href (hyper ref) 超链接
<a href="https://google.com">超链接</a>
- 像用户一样打开网页:使用
http-server -c-1
(不要缓存),在结尾加上路径 - 方法二:yarn global add parcel –> parcel a-href.html (直接接 html 文件名)
- 网址
//google.com
无协议地址,它会继承当前的 http —> 跳转到 google 真正的地址- // 最高级,它会自动选择合适的 http / https,以后写网址都写这个
- 检查 - Network - Preserve.log 勾选 - 点击超链接 - 查看网页跳转记录
- 路径
- /a/b/c.html http 的相对路径是相对于 http 服务的根目录
- index.html 等价于 ./index.html 在当前目录下寻找
- 伪协议
<a href="javascript:alert(1);"
点击这个标签就会执行 JS 代码 - 弹窗,显示 1 (早期的用法,现在不怎么用了)- href=“javascript:;” 链接点击之后,什么都不做
- href="" 留空 —> 点击链接页面会刷新
- href="#" —> 页面自动滚到顶部
- href="#xxx" 自动跳转到 [id=xxx] 的标签,做锚点。
- href=“mailto:zch693922442@outlook.com” 发邮件
- href=“tel:1234” 直接打电话。
1.2 target 属性
- target=_blank 指定在哪个窗口打开链接
- 取值
- _blank:新窗口打开
- _top:在最顶层打开链接,从 iframe 跳至外面
- _parent:父级窗口打开
- _self:是默认值,在当前页面打开(google 不允许别人用 iframe 打开它)
- target=“xxx” 如果有个 xxx 的窗口就用它打开链接,没有就创建一个
- target=iframeName 网页内套娃
1.3 其他属性
- download
- download 下载这个网页,很多游览器不支持这个
- rel=noopener
- 防止一个 bug,学了 JS 之后再讲
2. table 标签
table 标签里面只能有三个标签 thead、tfoot、tbody (相互顺序无影响)
- tr=table row;th=table head;td=table data;(没写默认为 td)
- 如果忘记写 thead tfoot 会在网页内自动设置被 tbody
- 如果想给表该样式:需要使用 CSS
- 相关的样式
- table-layout:fixed 等宽;auto 表格宽度随着内容改变
- border-collapse:collapse 表格中间没有空隙
- border-spacing:5px 控制表格 border 之间的距离
<style>
table {
width: 600px;
table-layout:auto;
border-spacing: 20px;
border-collapse: collapse;
}
td,
th {
border: 1px solid blue;
}
</style>
3. img 标签
-
作用
- 发出 get 请求,展示一张图片
-
属性
- alt / height / width / src
- src=“dog.png”
- alt 图片显示错误时代替的文字 alternative
- width=“400” 只写宽度,高度会自适应
- 高度宽度都写,图片可能会变形,永远不要让一张图片变形
-
事件
-
onload / onerror 监听图片是否加载成功
-
可以在图片加载失败的时候,进行一个挽救,显示一个 404 图片。
-
-
响应式
- max-wirdth: 100%:为了能在手机上看
<head>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
img {
max-width: 100%;
}
</style>
</head>
<body>
<img id="xxx" width="400" src="dog.png" alt="一只狗子" />
<script>
xxx.onload = function() {
console.log("图片加载成功")
}
xxx.onerror = function() {
console.log("图片加载失败")
xxx.src='/404.png';
}
</script>
</body>
4. form 标签
- input 标签
- 作用:发 get / post 请求,然后刷新页面
- input 和 button 的区别:input 里面不能再有内容(只能有纯文本),botton 可以还有标签的,也可以加个图片什么的
- type:要设置为 submit 才能提交,不写默认为 submit,写错就不能提交。
- type=radio 选项,设置相同的 name 属性课设置为单选。
- type=checkbox 多选,设置相同的 name 声明多个选项是一组的。
- 属性
- action / autocomplete / method / target
- action:就是你要请求的那个页面的地址
- action:相当于 src,但这个路径是后台给的,so 不知道,它是点击提交按钮后的执行路径
- method:默认为 get 也可以改为 post
- autocomplete:自动填充用户信息,给出建议
- target=_blank 新开一个页面 和 a 标签里的类似 = 我要提交到哪个页面(会被刷新)
- 事件
- onsubmit:当用户提交的时候触发的事件
- type 不是 submit 的话,就不能提交表单 (不写的话 默认也是 submit) 写了别的就会点不动
- input 的事件
- onchange 当用户输入改变的时候触发
- onfocus 鼠标移至当前模块时触发
- onblur 用户鼠标移开 block
- 验证器 required 设置当前 input 为必选项
- 注意事项
- 一般不监听 input 的 click 事件
- form 里面的 input 要有 name
- form 里要放一个 type=submit 才能触发 submit 事件