我自学前端已经有6年多了,自问当时学前端是没有系统化学习的。一开始边看文档,连滚带爬学HTML和CSS排版,然后深入研究JavaScript,因为当时最火的就是JQuery,所以用了很长一段时间的JQ。
到了后面遇到有一个项目需要我做APP开发,但是不可能去学IOS开发和安卓开发,因为项目时间也不可能给我们这么充裕的学习时间。所以当时的我深入分析了几个混合APP开发的框架。分析对象包括当时基于AngularJs的Ionic框架和React Native。综合考虑最后选择了Ionic,然后自学了Angular2。(过程也是踩过成千上万的坑学会的)
APP开发的这个过程让我深入感觉到那时候前端的革命性变化。庞大的前端知识扑面而来,也没有想到前端已经发展到这样一个地步。这段时间让我深刻领会到前端的博大精深,并且被前端这个技术领域深深的吸引住了。
到了后面Vue突然开始火了,各大技术公司都开始使用Vue+Cli脚手架搭建前端应用。越来越多的企业要求使用Vue开发前端应用和WebAPP。热爱前端的我从来不畏惧需要学更多的知识,既然Vue来势汹汹,我也开始深入研究和学习Vue开发前端。经过一番折腾Vue也上手了。
至今我依然在不停的学习前端无边无际的知识和技术。
最近我发现,现在学习技术容易了很多。有各种技术文章、手摸手教学、线上培训课程和视频,甚至还有全免费的线上学习课程和练习。相比以前从看文档,连滚带爬的在项目中试错式的学习真的是容易多了。
我们都深刻知道,如果想在前端走的更远更久,基础知识必须是要牢固的。最近发现一个免费学习编程的网站 freeCodeCamp()
- 官方版(英文)
| 中文社区版
。我好学的性格牵动着我的灵魂,忍不住就去研究了一下。我发现里面的课程确实很全面,而且还有实时和实战编程练习。就算是对于零基础的童鞋,也是可以开始学习编程的。
在一个夜深人静的夜晚,我看着电脑思考人生的时候,我灵机一动,要不我开始写一个系列的文章和大家一起闯关进攻前端全方位知识点。没有闯过这些关卡的童鞋,无论前端能力如何,这个可以锻炼我们自己,也可以深入知道我们自己的前端水平和差距。想学习前端的童鞋可以从零开始学习,一起排除困难共同打开前端大门!
使用这个免费网站学习编程,每一个知识学习完成后会给大家发放一个证书,然后每一个关键学习点之后,还有项目实战。自从2014年,有超过4万个freeCodeCamp
毕业的童鞋获得了大企业工作机会。(里面有提到谷歌,苹果,微软,亚马逊,Spotify等公司)
还有看到一些学员的评价:
- “我在实习的时候,导师就叮嘱我在 freeCodeCamp 上做题闯关。技术的精进不仅给了我强大的自信,也让我得以进入大厂 ThoughtWorks。” — 姜玉珍
- “对于还没有形成编程思维的新人,即使是 leetcode 上面 easy 级别的算法题目都感到非常有难度,而 freeCodeCamp 的算法题恰好是一个良好的过渡。” — 魏朝欣
无论这些证书是否对我们在中国的企业有一定的价值。但是能获得多一个证书,没有什么不好的呀。废话不多说了,我们这里就开始勇闯第一课《基础HTML与HTML5入门》!
在开始这个闯关的系列之前,讲一下我们具体怎么一起闯关。
首先,如果我是单纯在这里给大家发布答案,我觉得这些文章就没有太大意义了。所以我希望在闯关的过程中一起学习到更多的知识,弄懂更深层的技术和用我的相关经验讲说这些知识在工作中的使用场景和小技巧。
个人觉得英文版本的操作和体验都更好,加上英文版本的课题会更新。所以我会在英文版中与大家一起闯关。但是喜欢用中文社区版本也是可以的哦。酸甜苦辣各有所爱,但是效果和课题基本都是一样的哈。
每一篇文章的大概内容:
FCC一共有6大课程,一共大约1800个小时的内容和练习。如果是新人,推荐从第一个开始一个一个闯关学习。如果是老司机,是来这里学习你需要的知识,那可以随意选择你需要的课程开始学习。
最后还有一个是数千个小时的面试题可以提供给我们使劲的刷哦!
首先我们展开第一课看一下:
回到第一小节
开始闯关!⚠️注意:
大家闯关之前,推荐大家都先使用GitHub登陆,到时候颁发的证书和闯关进度才能得到保存和跟踪哦!!!
我们先从左边 部分的内容开始说明:
接下来就是说明中间的代码区:
测试代码
后,如果有错误就会显示在这里。最后,最右边的部分是代码被编译后的效果,也就是我们在代码去编写的代码最终会在浏览器呈现出来的效果哦。(这里的效果会在我们编写代码的同时触发变化哦!)
提交代码/测试成功后:
HTML是什么?
HTML 的全称是 HyperText Markup Language(超文本标签语言),它是一种用来描述网页结构的标签语言。
它采用一种特殊的语法或符号来组织网页的内容,元素通常都有开始标签和结束标签,例如标题、段落、列表。
对于没有计算机基础的童鞋(就算是有)都会觉得有点抽象,不太好理解。我们换一个说法来理解一下:
HTML就等同于我们人体里面的骨架,一块一块骨头(标签)组装起来建立起一个人的骨架和结构。比如说经常可以见到的
head
,body
,footer
等标签,就等同于一个人的头
,身体
和脚
。那其他的标签比如h1
,h2
,div
,section
和ul
,li
等标签就是用来组建我们人体每一个部位的小骨头。
如果HTML加上了JavaScript(人体中的大脑和肌肉)就可以操控整个人的动作,让一个人活起来了。但是只有骨头和肌肉,这个也太难看了吧?想想都觉得吓人。所以我们会有皮肤来把这些不太好看的东西藏起来,这个时候就需要在HTML中使用CSS(人体的皮肤)。这样子我们有好的皮肤加上衣服和化妆品的打扮,这样才可以貌美如花嘛对吧?
如果我们上面说的骨头和骨架,在代码中又是什么样子的呢?我们一起来看看:
<h1>Top level heading: Maybe a page titleh1>
<p>A paragraph of text. Some information we would like to communicate to the viewer. This can be as long or short as we would like.p>
<ol>
<li>Number one on the listli>
<li>Number twoli>
<li>A third itemli>
ol>
这段代码被编译后就会在浏览器呈现出这个样子:
HTML这种超文本源自于Web早期和最初的用例。当时页面都是静态文档,并且文档中也有连接和引用到其他的文档。通过浏览器中的hypertext links(超文本链接)在文档之中跳转与导航。这样用户就可以自由的在文档之中翱翔,不用在文档直接搜索查看。
后期web页面和web应用渐渐变得越来越复杂,W3C更新了HTML的规范来让所有的浏览器更加兼容彼此。为什么呢?大家应该都知道市面上有五花八门的各种浏览器,如果每一个浏览器都对HTML有不同的写法,不同的规范,那我们做前端开发的,有多少的浏览器规范我们就需要学会多少种写法。不用后浪推上来,已经累死在沙滩上了。
那HTML5其实就是第五版的HTML规范,也是目前最新的版本。
基础知识弄懂了,我们马上就来开始闯关吧!GO GO GO!
关卡名:
Say Hello to HTML Elements
身在技术领域的童鞋们都知道,入门任何语言的开头都是先与世界问个好(所谓的输出一个"Hello World")。所以第一关当然是用HTML元素与世界问好啦!
hello
这一段代码,这个就是所谓的HTML元素了!也就是人体中的一小块骨头 !。
为开始,
为结束。/
(斜杠)。
与关闭标签
之间的内容。Hello
改为Hello World
。这关卡主要教会我们:
关卡名:
Headline with the h2 Element
接下来的几个关卡中,我们会慢慢的一步一步的搭建一个HTML5的 “猫星人图片的网页应用”。
h2
元素是常用的副标题,其实就是比h1
字体要小的标题,用过WPS
或者word
文档的童鞋应该秒懂了。h1
一般用于网页大标题,而h2
就是用于副标题。h3
,h4
,h5
和h6
,每一个代码一个等级的副标题,这里数字越大,标题的大小就越小哦。h1
标签后面(第二行)加入一个h2
标签。h2
元素中加入CatPhotoApp
的文字内容。h2
元素h2
元素必须有一个结束标签h2
元素必须含有"CatPhotoApp"的文字内容h1
元素必须含有"Hello World"的文字内容这关卡主要教会我们:
关卡名:
Inform with the Paragraph Element
p
是paragragh
(段落)的缩写,就是我们在写文章中的段落一样,一般都是用来放信息内容的。我是一个p标签
,这样的方式来加入段落元素。h2
元素下方加入p
元素。p
元素的内容中加入文字"Hello Paragraph"。p
元素。p
元素中必须含有文字"Hello Paragraph"。p
元素必须有一个结束标签。这关卡主要教会我们:
p
元素是什么关卡名:
Fill in the Blank with Placeholder Text
Lorem ipsum从15世纪开始就被广泛地使用在西方的印刷、设计领域中,在电脑排版盛行之后,这段被传统印刷产业使用几百年的无意义文字又再度流行。由于这段文字以“Lorem ipsum”起头,并且常被用于标题的测试中,所以一般称为Lorem ipsum,简称为Lipsum。
原先大家以为这段拉丁文只是没有意义的组合,目的是让阅读者不要被文章内容所影响,而只专注于观察字型或版型,并借此填满空间。但根据美国拉丁学者Richard McClintock的研究,Lorem ipsum原来起源于西赛罗《善恶之尽》(De finibus bonorum et malorum)第一章(Liber Primus)的32、33两节。
p
元素的内容替换成这一段占位文字:“Kitty ipsum dolor sit amet, shed everywhere shed everywhere stretching attack your ankles chase the red dot, hairball run catnip eat the grass sniff.”p
元素需要含有“kitty ipsum text”的首几个单词。这关卡主要教会我们:
关卡名:
Uncomment HTML
。例如:
。h1
,h2
和p
元素生效。h1
元素内容h2
元素内容p
元素内容-->
这关卡主要教会我们:
关卡名:
Comment out HTML
。⚠️注意:
在注释代码的时候要注意的一个点,HTML的元素都是有开始与结束标签的,注释的过程中如果我们注释掉半个元素,那代码就会有结束没有开头了。这样是会报错的哦。同等概念,后面我们会学到,HTML元素是可以加入属性的,属性也是无法单独注释的。
h1
元素和p
元素,h2
元素要生效。(也可以说页面上只能看到h2
这个元素的效果)h1
元素应该被注释掉,页面看不到该元素效果p
元素应该被注释掉,页面看不到该元素效果h2
元素内容-->
h1
,h2
和p
元素在代码中的顺序不能变这关卡主要教会我们:
关卡名:
Delete HTML Elements
h1
元素删除掉。⚠️注意:
删除代码和注释代码都有一个一样的原则。就是开始与结束的标签不能缺了其中之一,要不代码就会报错。所以删除元素的时候也要注意元素的开始与结束标签的完整性。
h1
元素,让我们的页面更加整洁和更有空间感。h1
元素应该被完整的被删除h2
元素内容p
元素内容这关卡主要教会我们:
关卡名:
Introduction to HTML5 Elements
main
(主要内容)、header
(头部)、footer
(脚步)、nav
(导航)、video
(视频)、article
(文章)、section
(区域/分段内容)和更多。搜索引擎
找到对应的内容,加入这些标签也让我们的网页做到更好的搜索引擎优化(SEO)。什么是搜素引擎?
我们可以把搜索引擎看作是一本很大很大的书中的目录。我们想想在现代的互联网中,全世界有多少个网站或者网页应用?如果没有一个目录让我们可以搜索,我们怎么可以找到我们想看的内容或者网站?可以说基本是不可能的!
搜索引擎怎么运作?
那搜索引擎的目录是怎么生成的呢?这个世界有一种很厉害的虫,那就是"爬虫"。每天搜索引擎的公司会派出成千上万的爬虫军队出去,在互联网上到处找网站,然后进入每一个网站中阅读里面的内容。然后收集回来的内容会经过做过滤和分析,然后建立关键词等等,最后生成一个搜索目录。我们经常用的搜索引擎包括:百度搜索,谷歌搜索,搜狗搜素,360搜素等等。
用其中一个标签来举例,一个main
元素中嵌套了两个子元素:
<main>
<h1>Hello Worldh1>
<p>Hello Paragraphp>
main>
小贴士:这些HTML5的标签的作用和适用性会在后面的“Applied Accessibility(应用无障碍)”的课程中详细讲说。
p
元素下方添加一个新的p
元素,并且加入这段内容Purr jump eat the grass rip the couch scratched sunbathe, shed everywhere rip the couch sleep in the sink fluffy fur catnip scratched.
main
元素两个p
元素包裹起来。p
元素,每个都有文字内容p
元素都有结束标签p
元素的内容含有“Purr jump eat…”这段文字main
元素main
元素中必须含有两个p
子元素main
元素开始必须在第一个p
元素之前main
元素结束必须在第二个p
元素之后这关卡主要教会我们:
main
元素关卡名:
Add Images to Your Website
img
元素为我们的网页插入图片,然后使用元素中的src
属性来指定图片地址。⚠️ 注意:
img
元素是不需要结束标签的,它是属于自动关闭型元素。
img
必须填写alt
属性(alt是“Alternative”的缩写,就是“替代”的意思)。当一个图片无法加载或者显示时,alt
属性的值就会替代这个图片显示出来。alt
对于搜索引擎优化是有一定的帮助的,因为这个属性是用来描述一个图片的。如果这个图片是一只猫,对于搜索引擎的爬虫会针对图片的Alt取得关于这个图片的描述。这样搜索引擎才能知道这个图片大概是什么。⚠️ 注意:
- 如果图片是单纯为了装饰的,那
alt
就留空:alt=""
- 尽量不要在
alt
属性中加入特殊字符(或者符号),除非是必须的
一个完整的img
元素例子如下:
<img src="https://www.your-image-source.com/your-image.jpg" alt="Author standing on a beach with two thumbs up.">
main
元素中的p
元素之前添加img
元素。img
元素的src
属性的值指向https://bit.ly/fcc-relaxing-cat
img
元素的alt
属性一个合适的名字:比如“Kitty” (小猫咪的意思)img
元素。img
元素中的src
属性指向一个猫咪的图片地址。img
元素中的alt
属性值不能为空。这关卡主要教会我们:
img
图片元素src
属性alt
属性关卡名:
Link to External Pages with Anchor Elements
a
(锚) 元素是用于跳转页面,可以是内部页面或者是外部页面。(内部指的是本网站内的页面,外部指的是本网站以外的其他网站的页面。)a
元素需要一个网页地址的属性叫href
。也需要一个anchor text(锚文字):
- 网页地址:https://freecodecamp.org
- 锚文字(其实就是跳转链接的文案):这个链接会跳转到 freecodecamp.org
额外知识点:
以上例子讲说的是跳转外部链接,如果我想跳转当前网址的子页面呢?(所谓的内部跳转,但是其实还可以做到当前页面的位置跳转,这个下一个关卡就会学到咯!)
- 比如现在我们当前的页面是"www.freecodecamp.org",我们的链接想跳转到“www.freecodecamp.org/learn”。
- 这个时候我们的
a
元素的href
属性可以这么写
<a href="/learn">这个链接会跳转到 freecodecamp.org/learna>
a
元素,链接文案为“cat photos”,并且指定跳转到http://freecatphotoapp.com
a
元素的链接文案必须含有“cat photos”a
元素的跳转地址必须是http://freecatphotoapp.com
。a
元素必须有结束标签。这关卡主要教会我们:
href
属性关卡名:
Link to Internal Sections of a Page with Anchor Elements
a
(锚)元素还可以用于跳转页面内部的特定区域。href
属性的值中绑定一个哈希符号#
和一个唯一id
属性。id
属性是在HTML中任何一个元素都可以绑定的唯一标识。id
属性可以给予一个元素一个唯一的识别名,让这个元素可以在HTML中被选择到。以下是一个内部跳转链接的例子,其中的...
代表被省略的一段代码。
<a href="#contacts-header">Contactsa>
...
<h2 id="contacts-header">Contactsh2>
我们来分析一下这个例子:
- 这里的
h2
元素被绑定了一个id
属性,名字为“contacts-header”。- 我们的
a
元素链接的指定href
跳转地址为#contacts-header
。- 我们可以看到
#
后面的名字与h2
的id
值一致,就是这样点击这个链接的时候,页面就会移动到绑定了同一个名字的元素的位置。- 我们要注意的是
id
属性的值,在当前页面中必须是唯一的。
知识点:
在这个例子里面,我们可以看到a
元素多了一个target
属性。这个属性在链接中是非常常用的。我们经常用的各大电商平台,我们点击一个商品的链接都会打开一个新窗口,但是有一些链接就不会。这种就是用target
属性控制的。
target
属性的常用值有:
- _blank:在新窗口中打开被链接文档。
- _self:默认。在相同的框架中打开被链接文档。
- _parent:在父框架集中打开被链接文档。
- _top:在整个窗口中打开被链接文档。
- framename:在指定的框架中打开被链接文档。
href
属性为#footer
,并且把链接的文案“cat photos”改为"Jump to Bottom"。target="_blank"
属性,因为这个属性会让我们的链接在全新的窗口打开这个跳转链接。footer
元素中添加id
属性,属性值为"footer"。a
元素的href
属性值必须是#footer
a
元素必须没有target
属性a
元素的链接文章应该是“Jump to Bottom”footer
元素的id
属性值必须是"footer"这关卡主要教会我们:
id
属性关卡名:
Nest an Anchor Element within a Paragraph
<p>
Here's a <a target="_blank" href="http://freecodecamp.org"> link to freecodecamp.orga> for you to follow.
p>
分析一下这个例子的实现原理:
- 首先我们有一个文字段落
Here's a ... for you to follow.
- 在这个文字段落中"…“的部分我们加入
a
(锚) 元素:...
,这里我们用a
元素包裹了”…"这个文字内容,这样这个文字内容就会变成一个链接,并且可点击跳转网页。(记住这里需要我们有开始与结束
标签,这样才能指定这个链接的开始与结束区域)
- 这里
a
元素中加入target="_blank"
可以让链接在新窗口打开,href
属性指定了跳转链接。- 最后"…“的内容在这个例子里面就是” link to freecodecamp.org",也就是链接的文案(锚文字)。
main
元素中加入一个新的p
元素。p
元素中的文案写入"View more cat photos"。a
元素替换这段文案中的“cat photos”,从而把这段文案中的"cat photos"改为一个链接。a
元素的链接需要指定跳转"http://freecatphotoapp.com"a
元素的链接文案应该是“cat photos”a
元素需要被p
元素包裹着,然后main
元素中需要一共有3个p
元素a
元素需要被新的p
元素包裹着,不能是其他的p
元素p
元素中必须含有“View more ” (more后面需要含有一个空格)a
元素中不能含有“View more”等文字p
元素必须有结束标签a
元素必须有结束标签这关卡主要教会我们:
关卡名:
Make Dead Links Using the Hash Symbol
代码例子:
<a href="#">死链接a>
a
元素中的href
是指向一个链接地址"http://freecatphotoapp.com"href
属性值改为#
,就可以把这个锚元素变成一个死链接target
属性移除掉,要不还是会跳转页面的a
元素的href
属性值是#
,是一个死链接这关卡主要教会我们:
关卡名:
Turn an Image into a Link
a
元素包裹一个元素,让这个元素变成一个链接a
元素包裹一个img
元素,这样就可以把一个图片变成一个链接。(也就是说,点击这个图片就可以跳转页面了)代码例子:
<a href="#">
<img src="https://bit.ly/fcc-running-cats" alt="Three kittens running towards the camera.">
a>
这个例子中,我们希望这个图片的链接是一个"死链接",所以
href
属性的值需要使用#
。
a
元素包裹页面中的img
元素img
元素需要包裹在a
元素之中a
元素必须有结束标签这关卡主要教会我们:
关卡名:
Create a Bulleted Unordered List
ul
元素包裹着多个li
元素,开始标签为
,结束标签为
代码例子:*
<ul>
<li>牛奶li>
<li>芝士li>
ul>
这段代码就会创建一个无序列表,列表内容有“牛奶”与“芝士”。
p
元素。ul
元素ul
元素应该包裹着3个li
元素ul
元素必须有结束标签li
元素必须有结束标签li
元素中必须有内容,也不能是只有空格这关卡主要教会我们:
ul
元素li
元素关卡名:
Create an Ordered List
ol
元素包裹着多个li
元素,开始标签为
,结束标签为
代码例子:
<ol>
<li>肥猪li>
<li>肥牛li>
ol>
以上这段代码会创建一个有序列表,有序的列出“肥猪”和“肥牛”。
p
元素下方加入一个有序列表ul
元素ol
元素ul
元素中有3个li
元素ol
元素中有3个li
元素li
元素必须有结束标签li
元素的内容不能为空或者只有空格这关卡主要教会我们:
ol
元素关卡名:
Create a Text Field
接下来的几个关卡,我们一起来创建一个表单。
什么是表单?
表单就是一个网页端的表格,让用户在其中填写信息提交给我们保存起来。在办理事情的时候,我们经常会需要填写表格,然后提交给工作人员。在网络上填写表格也是一样的。用户在表单中填写表格,然后提交给我们保存起来,工作人员在后台管理系统就可以对这些表格进行处理了。
input
元素来创建一个文本输入框,给到用户填写文字。代码例子:
<input type="text">
知识点:
input
元素是一个自我关闭型标签,所以不需要结束标签的。input
元素中有一个type
属性,这个是用来定义这个输入框的类型,这里因为我们需要文本类型,所以就是text
。那其他类型有什么呢?其他的类型在后面的关卡中会讲到哦。input
元素中的name
属性也是非常重要的,后端接受表单的输入框数据时,用的就是name
属性值来获取数据的。
ol
元素下方创建一个input
元素,type
元素值使用“text”input
元素,type
属性值为text
这关卡主要教会我们:
input
元素创建文本输入框关卡名:
Add Placeholder Text to a Text Field
我们可以用以下方式加入占位文本:
<input type="text" placeholder="这个是占位文本/提示语">
⚠️ 记住:
input
元素是自我结束型元素,不需要结束标签哦!
input
元素当中添加placeholder
属性,属性值为"cat photo URL"input
元素中有placeholder
属性placeholder
的属性值必须为“cat photo URL”input
元素不需要有结束标签input
元素语法不能有误这关卡主要教会我们:
input
元素中添加placeholder
属性关卡名:
Create a Form Element
form
元素来建立一个表单,然后在form
元素中添加一个action
属性,并且给他一个提交的地址即可。小知识:
我们知道现实中我们会把表格提交给工作人员,那在网页中我们提交给谁呢?我们用一个简单接地气的例子来理解一下:
- 首先表格的内容都是电子化数据不是纸质的,那肯定是要提交给一个电子化储存的地方
- 电子化储存的地方就是服务器,也就是一台电脑
- 但是总要有一个
人
这样的东西接收我们的表单吧?是的,操控这个服务器的就是后端
- 所以表单的
action
顾名思义是一个提交动作,表单需要指定给一个“人”来接收,在网络上就是“服务器地址或者后端地址”- 我们再想想现实中,工作人员拿到我们的表格,会存放到文件仓库对吧?那在网络应用中电子表单的数据放哪里呢?
- 表单数据提交给到后端之后,后端会拿着这个数据储存到
数据库
中,数据库也就是文件库了通过这个例子大家应该可以能理解表单数据提交和储存的概念了。也更能懂得这个
action
背后的基本逻辑是什么了。
代码例子:
<form action="/url-where-you-want-to-submit-form-data">
...
form>
input
元素包裹在form
元素之中,然后在form
元素中加入action
属性值“/submit-cat-photo”form
元素之中form
元素需要有action
属性值为“/submit-cat-photo”form
元素需要有完整的开始与结束标签这关卡主要教会我们:
form
元素action
属性的意义和用法关卡名:
Add a Submit Button to a Form
button
元素(按钮元素),并且给它的type
属性一个“submit
(提交动作)”的类型form
元素中的最后添加button
元素,类型为submit
button
元素必须有一个type
属性值为submit
button
元素中的文字内容必须是"Submit"button
元素必须有结束标签这关卡主要教会我们:
button
元素关卡名:
Use HTML5 to Require a Field
input
元素中添加一个require
属性代码例子:
<input type="text" required>
⚠️ 注意:
input
元素中的require
属性是不需要填写属性值的,只要加入这个属性就起效了。
input
元素加入required
属性,把输入框变成一个必填项,用户如果没有填写内容将无法提交表单input
元素应该有一个required
属性这关卡主要教会我们:
input
元素中的required
属性关卡名:
Create a Set of Radio Buttons
input
元素中其中一种类型。input
元素包裹在一个label
元素中。这时label
元素就会与input
元素绑定上。意思就是label
中的任何文字,在点击的时候都可以选中这个选项。name
属性值才能把这些单选项组成一组选项。单选按钮的例子:
<label>
<input type="radio" name="indoor-outdoor">内门
label>
label
元素上设置一个for
属性,其值与输入元素的id
属性值相匹配。这允许辅助技术在标签和子input
元素之间创建链接关系。例如:<label for="indoor">
<input id="indoor" type="radio" name="indoor-outdoor">Indoor
label>
radio
单选按钮到我们的表单中,每个需要有自己的label
元素包裹着。indoor
和另外一个选项显示outdoor
。name
属性值都必须是indoor-outdoor
,从而把它们组成一组。radio
元素的单选按钮radio
元素的单选按钮都需要有name
属性值为indoor-outdoor
radio
元素的单选按钮都需要有自己的label
元素包裹着radio
元素都有结束标签indoor
outdoor
radio
元素都必须在form
元素之内这关卡主要教会我们:
label
元素input
元素中的radio
类型关卡名:
Create a Set of Checkboxes
checkbox
来建立复选框的表单问题。checkbox
是input
元素的其中一种类型。input
元素包裹在一个label
元素中。这时label
元素就会与input
元素绑定上。意思就是label
中的任何文字,在点击的时候都可以选中这个选项。name
属性值才能把这些选项组成一组选项。label
元素上设置一个for
属性,其值与输入元素的id
属性值相匹配。这允许辅助技术在标签和子input
元素之间创建链接关系复选框例子:
<label for="loving">
<input id="loving" type="checkbox" name="personality"> Loving
label>
form
元素内添加一组3个checkbox
类型的复选框。input
都要有自己的label
包裹着。name
属性值为personality
。label
元素内。label
元素都需要有结束标签。name
属性值为personality
。form
元素之中。这关卡主要教会我们:
input
元素中的checkbox
类型关卡名:
Delete HTML Elements
checkbox
复选框和radio
单选框的选中数据也是会一起提交到服务端,那后端怎么判定我们选中了那些呢?value
属性的值。checkbox
或者radio
类型的输入框一个value
属性。代码例子:
<label for="indoor">
<input id="indoor" value="indoor" type="radio" name="indoor-outdoor">Indoor
label>
<label for="outdoor">
<input id="outdoor" value="outdoor" type="radio" name="indoor-outdoor">Outdoor
label>
以上例子中,我们有两个radio
单选框类型的输入框。假设用户选中了"Outdoor"并且提交了表单,表单数据中会含有indoor-outdoor=outdoor
这样的参数。indoor-outdoor
这部分来源于这个输入框的name
属性,然后outdoor
就是用户选中的选项的value
属性值。
如果我们没有填写value
属性值,用户选中了任何一个选项然后提交表单。后端接收到的数据就是indoor-outdoor=on
。这个数据里面只能告诉我们indoor-outdoor
这个选项,用户有选中一个值,但是是什么,我们不知道。这样这个表单的数据就没有任何意义了。所以我们一定要给每一个选项input
元素加入一个value
属性值。
radio
和checkbox
输入框类型的元素一个value
属性值。value
属性值常规来说我们都是用英文的,在这个例子中因为我们的选项本身就是英文,所以我们直接用选项名作为value
的值即可。radio
的value
属性值需要是”indoor“radio
的value
属性值需要是”outdoor“checkbox
的value
属性值需要是”loving“checkbox
的value
属性值需要是”lazy“checkbox
的value
属性值需要是”energetic“这关卡主要教会我们:
value
属性radio
或者checkbox
加上value
属性值关卡名:
Check Radio Buttons and Checkboxes by Default
radio
或者checkbox
的input
元素中添加checked
属性即可(这个也是一个不需要属性值的属性)代码例子:
<input type="radio" name="test-name" checked>
radio
单选框组合的第一个单选项设置为默认选中。checkbox
复选框组合的第一个复选项设置为默认选中。这关卡主要教会我们:
radio
单选项或者checkbox
复选项添加默认选中属性checked
关卡名:
Nest Many Elements within a Single div Element
div
元素,也称为分割元素,是其他元素的通用容器。div
元素也是最常用的HTML元素之一。div
元素来开始,然后在另一行使用
div
元素之中提示:把
结束标签在
开始标签放在"Things cats love"的p
元素上方,然后的下方。最后整个
div
元素把所有内容包裹起来。
p
元素内容被包裹在div
元素之中ul
元素内容被包裹在div
元素之中ol
元素内容被包裹在div
元素之中div
元素必须有结束标签这关卡主要教会我们:
div
元素分割内容div
元素嵌套多个元素关卡名:
Declare the Doctype of an HTML Document
到目前为止,我们闯过的关卡当中包括了特定的HTML元素以及使用。但是那些都是一个完成HTML页面的其中一部分。其实还有一些元素是每一个HTML页面都需要存在的。
在文章的顶部我们需要告诉浏览器,我们需要使用哪一个版本的HTML。HTML这个语言一直在持续更新升级。各大浏览器基本都兼容最新的配置与版本(那就是HTML5)。但是还有一些浏览器只兼容一些历史版本的HTML(例如旧版本的IE浏览器)。
,这里的...
可以写入HTML的某个版本。如果是HTML5的话,那就是
即可。!
和DOCTYPE
都是非常重要的,而DOCTYPE
也是必须大写的。然后html
这个就无大小写限制了。html
元素。所有我们网页的代码和元素都必须在html
元素内编写。HTML代码例子:
<html>
html>
DOCTYPE
声明,并且选择使用HTML5版本。html
元素,并且在html
元素内嵌套一个h1
标题元素。h1
标题元素内必须含有一个标题文案,文案可以随意填写。
标签。html
元素。html
元素必须包裹着一个h1
元素。这关卡主要教会我们:
html
标签关卡名:
Define the Head and Body of an HTML Document
html
元素中我们会分出head
头部元素和body
主体元素。head
元素之内。body
元素之内。小贴士:
我们用一个一个更好的理解方式,让我们更容易记住这个规则的原理。
- 如果我们想一下,所有的知识,思想,印象等等就等同于HTML当中的"CSS引用,字体引用,网页标题",那东西是不是都应该在我们的脑袋里面呢?所以呀“CSS引用,字体引用,网页标题”都应该放在
head
头部元素中!- 我们的骨头和骨架是不是在我们身体内呢?所以剩下所有的页面布局代码就要放在
body
主体元素中!
HTML结构代码例子:
<html>
<head>
head>
<body>
body>
html>
title
页面标题元素,h1
文章标题元素和p
文章段落元素。title
元素嵌套到一个head
元素中。h1
和p
的内容都嵌套到一个body
元素中。head
元素body
元素head
元素需要被html
元素包裹着body
元素需要被html
元素包裹着title
元素需要被head
元素包裹着h1
和p
元素都需要被body
元素包裹着这关卡主要教会我们:
恭喜大家一起闯过28关。我们学习到了HTML与HTML5的基础知识。虽然说这些都是很基础的知识,可以说闯过这28关,前端入门级别都还没有到。但是庞大与伟大的事业和建筑物都是从稳固的基础建立起来的。无论是多么简单还是无比困难的任务,我们都需要耐心和细心对待,把每一件小事都做到极致,才能逐步壮大,成功才会在远方等着我们。
下一期,我们开始第二课,深入浅出CSS基础。一起继续闯关打怪,打开前端技术大门。敬请期待哦!
我是三钻,一个在技术银河中等和你们一起来终身漂泊学习。
点赞是力量,关注是认可,评论是关爱!下期再见 !
小伙伴们可以查看或者订阅相关的专栏,从而集中阅读相关知识的文章哦。
《数据结构与算法》 — 到了如今,如果想成为一个高级开发工程师或者进入大厂,不论岗位是前端、后端还是AI,算法都是重中之重。也无论我们需要进入的公司的岗位是否最后是做算法工程师,前提面试就需要考算法。
《FCC前端集训营》 — 根据FreeCodeCamp的学习课程,一起深入浅出学习前端。稳固前端知识,一起在FreeCodeCamp获得证书
《前端星球》 — 以实战为线索,深入浅出前端多维度的知识点。内含有多方面的前端知识文章,带领不懂前端的童鞋一起学习前端,在前端开发路上童鞋一起燃起心中那团火