注释一行是:ctrl + /
在当前位置注释:ctrl + shift + /
Emmet 语法 速查表
有一个盒子模型和margin和overflow属性,还挺有用的,如果以后用得上,在这里(“.\就业班\07 HTML和CSS\08-margin和overflow属性”)(好像overflow可以把ul列表搞成一行)
通过css来做动画效果,也挺有意义的(“.\就业班\首页布局案例和CSS3动画及移动端布局\02-CSS3动画”)
这个网址是免费图标的各种类型下载。
这个网址是前端各种在线环境,vue等各种三方库,在线环境。(这个网址还能调用PCL的库在浏览器中运行)
W3C中规定:所有属性值用双引号括起来(虽然单引号和不要引号都行,但是更加统一规范)
<!DOCTYPE html>  <!-- ! 表声明的意思,这一行的代码意思:下面的文档标签以html5规范去解析-->
<!--以成对的html作为开头-->
<html>
	<!--1、头部:以成对的head内的内容作为网页标题-->
	<head>
    	<title>我的第一个网页</title>  <!--这是标题-->
    	<!--meta:元,主要用来完成对应设置-->
    	<meta charset="utf-8">         <!--不设置编码格式就会乱码-->
    	<meta name="keywords" content="123">   <!--设置一个网站的搜索关键字,都是为了调高被搜索到-->
    	<meta name="description" content="456">   <!--网站的描述内容,填到content中,提高被搜索概率-->
    	<!--设置网页小图标:快捷写法就是输入 link:favicon 然后tab就行了,然后再把图片的链接放进去-->
    	<link rel="shortcut icon" href="//img.alicdn.com/tps/i3/T1OjaVFl4dXXa.JOZB-114-114.png" type="image/png">
    	<!--type的值,就是后面/png改成图片对应的后缀,原本可能是/x-icon,不改也不影响-->
    	<!--设置样式,看到style就明显知道这是设置样式的-->
    	<style>
        	/*书写样式的地方;;或者下面添加外部css文件*/
    	</style>
    	<link rel="stylesheet" href="style.css">  <!--这是使用外部css文件-->
    	<!--一样先输入 link:css 再tab,然后把css路径放到href里就行了-->
	</head>
	<!--2、主体部分-->
	<body>
    	<p>这是一个段落</p>    <!--里面放p这种大量的标签来丰富页面里的内容-->
	</body>
	<!-- 看到script就明显知道这是弄脚本文件的 -->
	<script language="JavaScript" type="text/javascript">  <!-- 这里还可以改成其它的属性 -->
    // 放脚本代码的地方,可以没有
	</script>
</html>
webstorm中快速打出固定的东西(在一个空白的html文件中):
!再按Tab就行;
    html:5再按Tab就行。一般在body中使用各种标签,head中的内容都是安装上面的方法生成的:
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <!--移动端开发设置-->
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">   <!--代表ie打开就是edge打开-->
    <title>Document</title>
</head>
    
<body>
    <!--1、div:用来布局的,没有具体含义,可以看做层-->
    <div>
        abc_hello_world
        <div>这里面是可以嵌套的</div>
    </div>
    <!--2、hx:用于控制标题级别的,x只能是1~6,1级标题最大,6最小,会自动加粗,有默认字号-->
    <h1>一、前端的学习</h1>
    <h2>1.1、html入门</h2>
    <h6>最后一级标题</h6>
    <!--3、p:表示一个段落,相当于一个回车,里面一般放一段文字-->
    <p>这里面放一大段文字,然后最后结尾p标签就相当于来了一个回车,进行分段</p>
    <!--4、br:换行,一段文字想在某些地方换行就加这-->
    <p>这里面放一大段文字,<br />然后最后结尾p标签就相当于来了一个回车</p>
    <!--由于是单个的br,为了统一,建议写成<br /> 代表br开始及结束,虽然也可以是<br> -->
    <!--标签属性:
        1.通常由属性名="属性值"组成 (引号可以不要,但一般都是加上)
        2.起附加信息的作用
        3.不是所有标签都有属性,比如br标签-->
    <p title="段落" class="content" id=可以是一样的>这是标签属性的测试</p>
    <!--5、hr:生成一条水平线,主要起装饰作用,也是单标签-->
    <hr />  <!--这就是一条单纯的线,可以在下面加属性-->
    <hr width="20%" color="red" align="center" height="2px" />
    <!--6、a:实现超链接跳转-->
    <p>请点击<a href="https://baidu.com/" title="这里放提示文字,这会新开一页" target="_blank">百度</a>这里</p>     <!--放www.baidu.com不行;一般是这样用,包裹在其它标签,就可以加文字的-->
    <!--下面这就是把超链接的文字"白底"变成了一张图,中间是可以嵌套的-->
	<a href="https://baidu.com/" title="百度,这不会新开一页"><img src="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"></a>   
    <!--下面是文件的跳转,注意绝对路径和相对路径-->  <!--target中还有_parent和_top暂时用不到-->
    <a href="01HTML文档结构.html" target="_blank">01文档001</a>  <!--这是新开一个网页-->
    <a href="01HTML文档结构.html" target="_self">01文档002</a>   <!--这是在自身网页上打开-->
    <!--不给target,默认就是用的_self,本身打开-->
    <!--7、img:加载外部图片,参数:src:所需加载图像的路径;alt:图像加载不成功或是图像不存在时就是显示这个内容,否则不显示;title:鼠标放在图标上时的提示内容-->
    <img src="https://img.alicdn.com/imgextra/i2/113880495/O1CN01qcg7wt1FWkiH6KxKj_!!0-saturn_solar.jpg_468x468q75.jpg_.webp" alt="图片" title="提示内容" />
    <!--img也是单标签,记得用<img /> 这样来补全-->
    <!--8、span:作用与div一样,都是用来布局,不同的是div会单独占一行,而span不会,span用于行内布局-->
    <div>div1</div>
    <div>div2</div>     <!--这俩就会有两行-->
    <span>span1</span>
    <span>span2</span>  <!--这俩就只有一行-->
    <!--9、ul/ol:列表,前者是无序列表,后者是有序列表,他们的内容都用的是li标签
       快捷写法是:先输入 ul>li{这里是内容$}*3  然后Tab,$会自动生成1、2、3,3代表3条内容
	   如果是$$$,就会自动生成 001、002、003
    -->
    <ul>
        <li>这是内容1</li>
        <li>这是内容2</li>
        <li>这是内容3</li>
    </ul>
    <ol>
        <li>这是有序列表1</li>
        <li>这是有序列表2</li>
    </ol>
    
    <!--10、q: 会自动把文本加上引号-->
    <q>这会自动加引号</q>
    <!--11、address: 专门用来写地址联系人这些,会有一些自己的格式-->
  	<address>
    	<p>电话:123456789</p>
    	<p>住址:XXXXXXXXXX</p>
 	 </address>
    
</body>
    
</html>
补充一个单标签(都还是加上/闭合):
文本格式化标签:
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文本格式化标签</title>
</head>
<body>
    <b>第一种加粗方式</b>
    <strong>第二种加粗方式,并强调</strong>
    <i>文字倾斜</i>
    <em>文字倾斜,并强调</em>
    <pre>这里的文本   会保留空格
    以及换行,  保持现状的样子</pre>
    <p>这是正常字体</p>
    <small>这是小一号的字体</small>
    <big>这是大一号的字体</big>
    <p>X1 + X1 = Y</p>
    <p>下标:X<sub>1</sub>+Y<sub>1</sub> = Y</p>
    <p>上标: X<sup>2</sup> + Y<sup>2</sup> = Y<sup>2</sup></p>
    <!-- 以上两行在空格上都是一样的,p标签里不识别空格   -->
    上标: X<sup>1</sup> + Y<sup>1</sup> = Y  <!-- 好像不让p标签包裹起来也行 -->
</body>
</html>
 现象:在HTML中,内容编辑时,如果通过空格键编辑的多个空格,==网页会显示仅且只显示一个空格==,而小于(<)和大于号(>),网站则会认为是标签而无法直接显示在页面中,这都可以通过实体字符来解决。
| 实体字符 | 代表的字符 | 
|---|---|
< | 
      < | 
> | 
      > | 
& | 
      & | 
  | 
      一个空格 | 
© | 
      版权(©) | 
× | 
      乘号(×) | 
÷ | 
      除号(÷) | 
' | 
      英文单引号 | 
" | 
      英文双引号 | 
Tips:
一定是以&开头,以;结束;
一个 只代表一个空格,想要多个空格就多次输入
<p> aa    bb</p>   <!-- 这里显示还是只有一个空格 -->
<p> aa    bb</p>  <!-- 空格就增加了 -->
<p>aa ÷ bb</p>  <!-- aa ÷ bb -->
然后一般点击左右那个箭头,就是通过大于小于符号做的,然后给它设置样式:
.sym { color: hotpink; font-weight: bolder; font-size: larger; } <div class="sym"><</div>
W3C中的嵌套规范:
 ==块级元素==(相当执行了 display:block; 的操作):块级元素会独占一行,其宽度自动填满其父级元素宽度,一般情况下,块级元素可以设置 width,height属性,一般用来搭建网站架构、布局、承载内容…,它包括以下这些标签:(若设置 display:none 样式就会不可见)
address、dir、div、dl、dt、dd、fieldset、from、h1~h6、hr、menu、noframes、ol、p、pre、table、ul等。
独占一行;
宽度和高度是可控的,如果没有设置其宽度,将默认铺满整行;
<div style="width:300px;height:50px;background:orange">this is div</div>
其内可以包含块级和行内元素。
 ==行内元素==(相当于执行了 display:inline; 的操作):行内元素不会独占一行,相邻的行内元素会排列在同一行内,直到一行排不下才会换行,其宽度随元素的内容而变化,行内元素设置width和height无效,一般用在网站内容之中的某些细节或部位,用以“强调、区分样式、上标、下标、锚点”等等。下面这些标签都属于行内元素:
a、b、bdo、big、small、br、cite、em、font、i、img、input、kbd、label、select、span、strong、sub、sup、textarea等。
不会独占一行,与相邻的行级元素占同一行,直到行占满,才会自动掉到下一行;
宽度和高度是不可控的;
<b>这里放点文字</b>
<span style="width:300px;height:50px;background:#2ecaff">this is span</span>
这里放点文字 this is span
其内只有包含行内元素。
注:以上两个例子都设置了宽高,也看到效果,只有块级元素可以,行内元素设置宽高是不起作用的。
块级元素和行内元素之间的转换:
块转行:在属性中加入==display:inline;==
行转块:在属性中加入==display:block;==
<div style="width:300px;height:50px;background:orange;display:inline;">块级元素转行内元素</div>
<b>这里再放点文字</b>
<span style="width:300px;height:50px;background:#2ecaff;display:block;">行内元素转块级元素</span>
可以把这一小节的这6行代码放一起,就能在浏览器看出很明显的效果了。
标签名是由标签名、标签属性和文本内容三部分组成(注意:单标签没有文本内容);
标签属性分为通用属性、自有属性和自定义属性:
通用属性有:
<body>
    <p id="p1">这是id1</p>   <!-- 注意id必须唯一-->
    <p id="p2">这是id2</p>
      
    <!-- class= 给一组标签取一个类名 -->
    <div class="test">a_div</div>
    <p class="test">a_PP</p>
      
    <!-- title= 给当前标签一个提示名-->
    <p title="这是一个提示">鼠标放上来有提示</p>
      
    <!-- style: 设置样式,注意style中的键值对是用的冒号:   -->
    <p style="color:red; width:200px; border:2px solid #0000ff">这是一个行内样式</p>
</body>
自定义标签属性:通常用来传值或是图片懒加载(滑到某区域时,某区域才加载图片)等方面
格式:data-*       // data-是固定的,后面的*是自己起
如:<img data-src=”图片名” alt=”提示文本” /> // 多个属性之间空格隔开就是,不要加逗号
<p data-goods_name=”goods_name”>….</p> 上面的src以及goods_name都是自己起的,尽量跟后面的值相关,然后后面代码会把具体值传过来
form表单是用来实现前后端交互的一个重要标签,常用属性:
<body>
    <form name="stuInfo" action="abc.py" method="post">   <!-- 这行里的属性都不要也行-->
        <input type="text" name="userName" placeholder="请输入您的姓名">
        <input type="submit">
    </form>
    <!-- 这个点击后就会跳转到百度网页,一定注意这里的网址都是要https开头 -->
    <form name="whatever_is_ok" action="https://baidu.com">   <!--这里没给post,默认都是get方法-->
        <input type="text" name="phone" placeholder="请输入电话号码">
        <input type="submit">
    </form>
</body>
表单元素分为四类:(==以下的每一个大类或是大类里又细分的,其实就是一个标签,可单独使用==)
==input类==:主要用来输入,根据其不同的type属性,可以变化为多种状态输入方式
==<input type=”text” />== // 定义提供文本输入的单行输入字段(这是默认值,什么都不给就是这)
placeholder //文本框内提示
name // 命名
minlength // 最少输入的字符个数
maxlength // 最多输入的字符个数,超过了就输入不进去了
disabled // 失效(disabled或disabled=”“或disanled=”disabled”都会让这个框变灰而无方法选中)
readonly // 只读(这也不能修改,与disabled写法一样,区别是它跟正常框一样,不会变灰)
value // 可以给一个默认值(有这个就不会再显示placeholder的提示了)
pattern // 正则匹配,(比如注册邮箱时,不合法,直接前端就验证了)
<form action="">
    <input type="text" name="phone" placeholder="输入电话" value="135" disabled />
    <input type="text" name="phone" value="4199" readonly="readonly" />
    <input type="text" name="phone" placeholder="输入电话" maxlength="5" /> <br/>
</form>
==<input type=”password” />== // 定义密码字段
它的属性跟text是一样的,主要就是不是明文显示
==<input type=”radio” />== // 定义==单选==按钮
name // 这个很重要,做抉择的选项的name值必须一样,这样保证只有一个能被选中,不给的话,两个都能被选中,所以这name跟上面的name不一样
checked // 给这个值,代表默认选择(一般单选都会给一个默认值,多给也是最后一个起作用)
这个还有value、disabled、readonly属性,但是不常用
<form action="">
    <!--  radio:单选钮(多个选一个)  -->
  <input type="radio" name="sex" checked="checked"/>男
    <input type="radio" name="sex" />女  <!-- 这组的name-->
	<!-- 下面的又是另外一组选择了,有相同name值的视为一组  -->
    <input type="radio" name="num" />1    
    <input type="radio" name="num" checked />2
    <input type="radio" name="num" />3
</form>
==<input type=”checkbox” />== // 定义复选框(也叫检查框),可选择0项、1项或多项
name // 这个属性必须要有
其它属性基本同上面的radio
这个选择的==默认值可以不给==,也可以给多个(注意html直接渲染的结果)
<form action="">
      <input type="checkbox" name="hobby" />music    <!-- 后面这些值就是选项的值 -->
    <input type="checkbox" name="hobby" />sport
      <input type="checkbox" name="hobby" />travel
</form>
==<input type=”file” />== // 主要是文件的上传,点击就会在本地选择文件
==<input type=”button” />== // 定义普通按钮
value // 这个属性它的值主要是在button上显示
disabled // 跟上面用法一样,设置了这个按钮就变灰了,就不能点了
  <form action="">
	<!-- file 文件上传-->
  	<input type="file">    <br />
       
  	<!-- button  普通按钮,通常用它去调用脚本代码      -->
	<input type="button" value="登录" disabled>
</form>
==<input type=”image” />== // 定义图片提交按钮(就是把一个按钮图片化了,弹幕说就是带皮肤的button),用法同button一样
src // 属性 用来放图片的路径
title // 属性 用来鼠标在图片上悬停时的友好提示
注意:这个点击提交会跳转到demo.app处,跟”submit一样”,而button却不会提交
<form action="">
	<input type="image" src="img/1.png" title="刷新">
</form>   
==<input type=”submit” />== // 定义提交表单数据至表单处理程序的按钮
value // 属性,提交按钮上显示的字,默认是submit
注意:这个点击提交会跳转到demo.app处
<form action="demo.app">
	<input type="submit" value="提交">
</form>  
==<input type=”reset” />== // 前面改了一些值,这个将其全部还原为初始状态
value // 属性 按钮上显示的字 默认是Reset
<form action="">
	<input type="reset" value="取消">
</form>  
==<input type=”email” />== // 用于输入邮箱时吧,好像用text也一样啊
==textarea类==: // 这个主要用于输入大批量的内容
常用属性:name/id/cols/rows/placeholder/minlength/maxlength/required(有这个值表示必须输入)/value
列数固定死了,行数给定了,显示区域就那么大,要是文字超过给的行数,右侧就会出现滑动拉条
<form action="">
	<textarea name="a_demo" id="a_random" cols="30" rows="10" placeholder="这里放提示内容"></textarea>
</form>  
 注:这里还可以<textarea>备注:</textarea>,这里只是为了简单暂时,可以把提示文字放这里,这样框里初始状态就会有“备注:”这俩字,哪怕有placeholder,placeholderdr的值也会被这个覆盖,而且它是永远不会消失的。
==select类==:
下拉列表框,默认用于单项选择:
<form action="">    <!-- 下面汉字一定是要的,就是显示的内容 -->
    <label for="sex">选择性别:</label>  <!-- label标签做个选择提示,与下面select的id关联起来;如果没引用就会给warn,但是写的是 for="",不给值的话,是错的,所以实在没关联时,把for去掉不要 -->
	<select name="a_sel" id="sex">    <!-- name是随便给的 -->
		<option value="male">男</option>
		<option value="female">女</option>  <!-- 每多一个选择,就加一个option, -->
		<option value="secret" selected>保密</option>   
	</select>
</form>  
多项选择,加上关键字 multiple
如果选择很多,全部显示出来很长,那就加一个 size(代表最多显示的行数,超过的都会被收起来) option的默认选中就加个==selected==。
<form action="">
	<label for="cate">请选择科目:</label>
	<select name="mul_sle" id="cate" size="3">  <!-- 这里就只会展示3个选项 -->
		<option value="语文">语文</option>
		<option value="数学">数学</option>
		<option value="英语">英语</option>
		<option value="计算机" selected>计算机</option>   <!-- 这里的默认选中加selected -->
		<option value="其它">其它</option>
	</select>
</form>  
==button类==:
普通按钮,具有提交功能,一般是执行js代码,可以单独使用;
如果写在form中,具有提交功能:
<button id="a_signal">确认</button> <!-- 可能主要用来掉js代码 -->
<form action="demo.py">
	<input type="text" name="my_info">
	<button>提交</button>  <!--这里的button功能与input中的submit按钮功能一样-->
</form>
 补充:最后还有一个iframe框架标签,就是把几个html文件组合到一起,但是十几种几乎不用,它会破坏网页的前进后退功能,且不利于SEO看弹幕说一般是用div,放这里做个了解吧。
	在html中,table表示表格,tr表示行,td表示列,生成一个表格的快速写法:table>tr*2>td{这里放内容}*3,然后再按tab键,就会生成两行三列的表格
<body>
<!--
    table+tr*2>td{这里放内容}*3   这是错的,那里不能是+,但是注意用+会生成什么
    table>tr*2>td{这里放内容}*3   tr是行, td是列
  -->
    <table border="1" width="400" cellspacing="0" cellpadding="10" align="center">
        <tr>
            <th>这里放内容</th>    <!-- th就是表头特殊那一行(这是手动改的) -->
            <th>这里放内容</th>
            <th>这里放内容</th>
        </tr>
        <tr>
            <td>这里放内容</td>
            <td>这里放内容</td>
            <td>这里放内容</td>
        </tr>
    </table>
</body>
注意:一般把第一行的tr改成th,这样它就会是表头,与后面的不一样。
表格属性:(但是WebStorm提示这些将被Deprecated,建议用css来修改样式)
更细更多的东西,就看这里。
一个很详细的示例,如果要看css效果的一些实现,一定要来这里看看。
css语法由三个部分组成:选择器、属性、属性值。
selector { property: value}
;隔开一共有四种引用方法:
第一种:==行间样式==(又叫嵌入式样式)
 直接在html文件的body的里面写:
<div style="color: olive; width: 100px; border: 1px solid orange">行间样式演示</div>
<div>行间样式演示</div>
第二种:==内部样式表==,一般都是定义放在html文件的head中,然后在body中使用: 下面想要修改p标签的样式,那就用 style 把 p 标签包裹起来,再设置p标签的样式
<head>
    <!--2.内部样式表,,一般都是定义放在head中;这样就定义了所有p标签的样式 -->
    <style>
        p {    /*注意这里面注释方法的不同*/
            background-color: #eeeeee;
            font-size: 18px;
            font-style: italic;  /*代表字体倾斜*/
        }
    </style>
</head>
<body>
    <p>这是内部样式</p>
    <p>这是内部样式</p>  <!--p标签都会是一样的效果-->
</body>
第三种:==外部样式==,
(1)先在外面写一个css文件,(2)ling:css把这个文件引入
 假设写的css文件名“01css.css”,放在html同路径下的“my_style”文件夹下:
span {
    font-size: 15px;
    color: rgba(108, 141, 23, 0.66);
    display: block;  /*这样就把行元素转成块元素了,就会自动换行了,原来是不会的*/
}
然后html文件:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS学习</title>
    <!-- 3.引入外部样式文件 -->
    <!-- Emmet语法: link:css 然后在按tab,就会快速补充 -->
    <link rel="stylesheet" href="my_style/01css.css">
</head>
<body>
    <span>这是引入外部样式文件</span>
    <span>这是引入外部样式文件</span>
</body>
</html>
第四种:==导入外部样式==,与第三种其实差不多,就是用的@impoet
 这种先写的一个02css.css文件,跟第三种方法有点不一样:
.my_box {   /* 前面的点是固定写法,my_box可以是任意的*/
    font-weight: bold;  /*加粗*/
    font-size: 20px;
    color: darkorange;
}
然后在html中:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS学习</title>
    <!--4.导入外部样式,一定放在style中 -->
    <style>
        @import "my_style/02css.css";   /* 千万别忘了分号结尾*/
    </style>
</head>
<body>
    <!-- 快速写法: .my_box{这是导入外部样式}*3  然后再tab  -->
    <div class="my_box">这是导入外部样式</div>
    <div class="my_box">这是导入外部样式</div>
    <div class="my_box">这是导入外部样式</div>
    <em>em就倾斜的意思</em>  <!-- 这就不会有效果 -->
    <em class="my_box">em就倾斜的意思</em>  <!-- 这就会有效果 -->
</body>
</html>
Tips:
.默认就是用div布局;区别:
实际开发中,可能更多的还是用的link。
CSS选择器有几种分类:所有写在html中的css选择器,都一定要用 style 标签包裹起来!
1、==*==:匹配html中所有标签,(所以性能比较差,实际开发中,不建议使用)
注意点:
一般是把这写到html文件的head中,它会对body中的所有标签都产生作用;
在head中一定要用==style==标签包裹起来。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>   /* 一定要用style包裹 */
        * {
            color: orange;  /* 写法就是这三行 */
        }
    </style>
</head>
<body>
    <p>这是一个测试</p>
    <div>这效果会是一样的</div>
</body>
</html>
2、==标签选择器==:==设置的那种标签,那就只有对应的标签才生效==
注意:一定是已有的标签,如span、div、p这种
<head>
    <style>   /* 一定要用style包裹 */
        /* 2.标签选择器 */
        span {
            display: block;  /*前面讲了,这就当块级元素*/
            margin-right: 20px;
            border: brown;
            color: #2ecaff;
        }
    </style>
</head>
<body>
    <div>这就没效果</div>
    <span>这才会有效果</span>  <!-- 和上面span对应起来了 -->
</body>
3、==类选择器:自定义一个类名,设置样式,凡是使用 class=此类名 的标签均为这个样式==(示例很重要) (一般都是用这个)
注意:名字可以自己起,前面一定要加一个点.;
Emmet语法快速写法(假设div标签,class想要写my_sty):先输入 div#my_sty 再tab 就会自动生成(可能会生成错误,成了id=my_sty,那就建议直接 .my_sty,然后tab,默认就是div布局, 也可以 .my_sty>p 再table,就是div中嵌套着p标签了 )。
<head>
    <style>   /* 一定要用style包裹 */
        /* 3.类选择器 */
        .my_sty {   /*千万别忘了这个点 . */
             /* 一般给下面这三个参数,就相当于有了一个文本框,也叫盒子模型,就可以进行各种操作了  */
            width: 300px;
            height: 300px;   
            background-color: hotpink;  
        }
    </style>
</head>
<body>
    <div>这就没效果</div>
    <!-- Emmet语法快速写法:p.my_sty 然后再tab就会得到这个   -->
    <span class="my_sty">这才会有效果</span>   <!-- class用了才有效果 -->
    <!-- class中的值  my_sty 前面一定不能有那个点 . -->
    <div class="my_sty">这跟上面就是一样的效果</div>
</body>
4、==ID选择器:自定义一个id名,然后 id=此id 的标签就会使用这样式==
注意:名字也是自己起,前面一定要加一个#;
一般id是唯一的,在IDE中两个相同的id会报错提醒,但是在网页上像个相同id的标签还是会显示一样的效果;
Emmet语法快速写法(假设p标签,id想要写my_id):先输入 p#my_id 再tab 就会自动生成。
<head>
    <style>   /* 一定要用style包裹 */
        /* 4.id选择器 */
        #my_id {   /*千万别忘了这个 # */
            color: olive;
        }
    </style>
</head>
<body>
    <div>这就没效果</div>
    <!-- Emmet语法快速写法:p#my_id 然后再tab就会得到这个   -->
    <p id="my_id">这是id选择器的效果</p>
</body>
5、派生选择器:一般就是父类选择了一个样式(就是一般的类选择器),后续的不选都是这个样式,常见于有/无序列表。
Emmet语法快速写法:先输入 ul>li{这是内容$$}*3 再tab就得到了三条无序列表
<head>
  
    <style>   /* 一定要用style包裹 */
        /* 5.派生选择器 */
        .my_der {
            color: coral;
        }
    </style>
</head>
<body>
    <ul class="my_der">
        <li>这是内容的说001</li>
        <li>这是内容的说002
            <ul>
                <li>注意这子内容的位置</li>
                <li>跟内容002是在一个li里面</li>
            </ul>
        </li>
        <li>这是内容的说003</li>
        <p>nihaio </p>   
    </ul>
</body>
这样的话,所有的内容的样式都是上面==my_der==的样式,但是注意它的写,上面这种写法测试没问题,它会对里面所有标签都生效,包括哪不合法的p标签;
还有一种写法:.my_der li {color: coral;} 或者 .my_der>li {color: coral;} 这样就只会有li标签生效,而p标签是不会生效的。
注意:20行,p标签放这里可有效果,但是IDE会报“Element p is not allowed here”,不让放进ul中,放其它标签也是,暂时没找到除了li以外的其它可以放的标签。
6、伪类选择器(说是后面学)
让多个选择器(元素)具有相同的样式,一般用于设置公共样式,避免重复写相同样式的代码。
<head>
    <style>   /* 一定要用style包裹 */
        /* 选择器分组 */
        p, .box, h1 {    /* 注意写法,就是上面不同的选择器,写一起,用逗号隔开 */
            color: darkorange;
        }
        p {
            background-color: #2ecaff;
            width: 200px;
            color: red;  /* 这再给样色就会把上面覆盖掉 */
        }
    </style>
</head>
<body>
    <div class="box">样式~~</div>
    <h1>一级标题</h1>
    <p>~~样式</p>
</body>
解读:
被别的标签包裹起来的就是人家的子类,子类是会继承父类的,也可以重写,有点选择器分组的味道
<head>
    <style>   /* 一定要用style包裹 */
        /* 样式继承 */
        div {
            font-size: 18px;
            color: orange;
        }
        div span {    /* span子类继承了color,覆盖了font-size */
            font-size: 12px;
        }
    </style>
</head>
<body>
    <div>这是一段测试<span>内容</span></div>   <!-- 不能是同一个标签 -->
</body>
Tips:要在标签里加新的标签的快捷写法:比如第14行
 先写好了 <div>这是一段测试内容</div>,要在“内容”用span包裹起来,那就在”内容”后打一个空格,然后输入span,再按tab,然后再把”内容”两字剪切进来
其实下面是更常见的继承写法:
<!DOCTYPE html>
<html lang="en">
<head>
    <style>
        .content {
            font-size: larger;
            color: aquamarine;
        }
        .content .border {          /* 这些名字都是自己起的  */
            color: orangered;
        }
    </style>
</head>
<body>
    <p class="content">这是一段文字</p>
    <p class="border">这是一段文字</p>   <!-- border随机继承的,这里单用没任何效果 -->
	
    <!-- 下面23行这样才有效果,被嵌套着,且尽量不能是两个相同的p标签,有时候不行,其它好像都行,<p class="content">外面的东西<p class="border">新的东西</p></p> 尽量不这样用 -->
    <div class="content">
        这是第一级别的文字
        <p class="border">这是里面的新的文字</p>
    </div>
</body>
</html>
Tips:
一般看见这种 .content .border .player {
box-shadow:3px 3px 8px 3px rgba(200,200,200,0.5)
} # 全都带点,这名字都是自己起的,继承的,然后一般也用于一层层嵌套的样式
一般看见这种 .content .border img {
box-shadow:3px 3px 8px 3px rgba(200,200,200,0.5)
} # 前面两个名字是自己起的,后面的 img 是自带的标签名
外部样式<内部样式<内联样式 // 总之就是一句话, 就近原则
优先级权值: 把特殊性分为4个等级,每个等级代表一类选择器,每个等级的值为其代表的选择器的个数乘以这一等级的权值,最后把所有等级的值相加得出选择器的特殊值。
<p style="">这里面的</p>),如:style=”“,权重值为1000;<head>
    <style>   /* 一定要用style包裹 */
        #content div.main_content h2 {
            color: red;
        }
        #content .main_content h2 {
            color: blue;
            /*color: blue!important;*/
        }
    </style>
</head>
<body>
    <div id="content">
        <div class="main_content">
            <h2>什么颜色?</h2>   <!--红色的-->
        </div>
    </div>
    <h2>这不会有颜色的</h2>  
</body>
讲解:
注意:==要是一个属性有多个值,直接写多个属性,用空格隔开就好了==。如下面的上划线和下划线
多个属性直接用空格隔开就好了Tips:以上都是针对字体的属性,每个属性都要写一行,为了简单些,有一个font的==复合属性==:
用法:font: font-style font-variant font-weight font-size/line-height font-family;
示例:(以下,除了18px、微软雅黑这两个值必须要有,其它的值可以省略不要的)
<style>
    em {
        font: italic small-caps bolder 18px/1.5 微软雅黑;
    }
</style>
<body>
    <em>Hello World 这是忙着开着快乐阿达</em>
</body>
background-color:背景色
background-image:背景图(说是有加多个背景的方式,疑惑先留在这里吧)
background-repeat:图片的铺排方式
background-position:设置背景图像所在的位置
| { x-number | top | center | bottom } { y-number | left | center } // x、y两个方向的值 | 
background-attachment:设置背景==图像滚动与否==,滚动位置(scroll/fixed)
Tips:以上都是针对background的属性,可以在一个声明中设置所有的背景属性
语法:background: color image repeat attachment position;
示例:
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        /* 这里注释了的是针对单个使用的示例 */
        /*body {*/
        /*    background-color: #eeeeee;*/
        /*    background-color: transparent;  !*使透明了*!*/
        /*    background-image: url(./img/1.png);*/
        /*    background-repeat: no-repeat;  !*默认是repeat,会铺满*!*/
        /*    !*background-position: 100px center;*!*/
        /*    !*background-position: 100px 10%;*!*/
        /*    !*background-position: right top;*!*/
        /*    background-position: center;   !* 如果只有一个参数,默认y方向为50% *!*/
        /*    background-attachment: fixed;*/
        /*    height: 2200px;*/
        /*}*/
        
        /* 这就是一起使用 */
        body {
            background: orange url("./img/1.png") repeat-y fixed 20% 0;
        }
    </style>
</head>
示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>伪类选择器</title>
    <style>
        /* 超链接伪类  */
        a:link {   /* 这里的 :link 可以省去,其它的不能省  */
            color: red;
        }
        a:hover {
            color: orange;
        }
        a:visited {
            color: black;
        }
        a:active {
            color: blue;
        }
        /* 表单 :focus */
        input:focus {
            background-color: red;
            outline: 5px solid #7e982e;   /* 输入框获得焦点时的框 */
        }
        /* 下面也是ul、li  */
        ul li:first-child {
            color: red;
        }   /* li:first-child 和 li:last-child 是固定写法 */
        ul li:last-child {
            color: #7e982e;
        }
        ul li:nth-child(2) {  /* 这里要显示第几个就给数字几 */
            color: orange;
        }
    </style>
</head>
<body>
    <a href="https://baidu.com/">这是一个超链接</a>
    <input type="text">
    <!-- 快速写法 ul>li{aaaa}*4  -->
    <ul>
        <li>aaaa</li>
        <li>aaaa</li>
        <li>aaaa</li>
        <li>aaaa</li>
    </ul>
</body>
</html>
可以理解为,好比当有很多p标签,但是只是想对其中一部分的样式做改变,那么就可以通过这个方式:
[属性名]:包含有指定属性名的元素 # 这里可以理解属性名为字典的key
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>属性选择器</title>
    <style>
        /* 这就是把div全部设置了 */
        div {
            font-weight: bolder;
        }
        /* 注意content这里不是固定写法,因为下面有两条这个,
         这里只写div.content跟上面div就是一个效果了
         所以这里再加了一个title,以区分是第一个div  */
        div.content[title] {
            color: red;
        }
    </style>
</head>
<body>
    <div class="content" title="内容">这是第一条内容</div>
    <div class="content">this is a name!</div>
</body>
</html>
[属性名=值]:属性名的值为指定值的元素 # 这里理解为要字典的key和value都要对应 可以理解为当所有的key都相同时,就由不同的value值做出判定
<!DOCTYPE html>
<html lang="en">
<head>
    <style>
		/*  两条都有content和title,就是title的值不一样 */
        div.content[title=内容123] {
            color: red;
        }
    </style>
</head>
<body>
    <div class="content" title="内容123">这是第一条内容</div>
    <div class="content" title="内容456">this is a name!</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en"><head>
    <meta charset="UTF-8">
    <title>属性选择器</title>
    <style>
        /* 这就会把两个都设置了 */
       /*input {*/
       /*    background-color: black;*/
       /*}*/
        /* 这就只设置第一个 */
        input[name=account]{   
            background-color: red;
        }
    </style>
</head>
<body>
    <form action="">
        <input type="text" name="account">
        <input type="text" name="users">
    </form>
</body>
[属性名~=值]:属性名的值包含指定值的元素 # 这个没试验出来,总有点问题
[属性名^=值]:属性名的值以指定值为开头的元素 # 注意:属性可以好几个,以空格隔开
[属性名$=值]:属性名的值以指定值为结尾的元素 # 有点类似于正则
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>属性选择器</title>
    <style>
        /* 这就只设置以a头(属性可以是好几个) */
        input[name^=a] {
            background-color: red;
        }
        input[name$=s] {
            background-color: black;
        }
    </style>
</head>
<body>
    <form action="">
        <input type="text" name="account age123 name456bb">
        <input type="text" name="account">
        <input type="text" name="users">
    </form>
</body>
</html>
 简单来说,就是针对同一个标签,若是其所在的层级不一样(被1或2或更多次嵌套),那么可以选择设定不一样的显示:
> 这就只会选择儿子元素(第一级的),多次被嵌套的就不会被选中
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>关系选择器</title>
    <style>
        /* 一、这会全部选择h1中的strong标签,不管它嵌套了几层 */
        h1 strong {
            color: #2ecaff;
        }
        /* 二、这就只会选中 h2中的儿子标签,span中的strong就不会选中 */
        h2>strong {
            color: aquamarine;
        }
	    
        /* 三、注意这里,是下面的4行被选中了(打印出来看) */
        ul li+li+li {
            color: red;
            list-style-type: none;   /* 这就是去掉前面的小黑点(还可以给其它样式) */
        }
    </style>
</head>
<body>
    <h1>
        <strong>这是儿子中的strong</strong>
        <span>
            这几个字就赢应该无strong的效果<strong>这是span中的strong,算孙子</strong>	         </span>
    </h1>
    <h2>
        <strong>这是儿子中的strong(只有这会有效果)</strong>
        <span>
            这几个字就赢应该无strong的效果<strong>这是span中的strong,算孙子</strong>        	</span>
    </h2>
    <!-- 快捷写法 ul>li{文字内容}*6 -->
    <ul>
        <li>this is a line</li>
        <li>this is a line</li>
        <li>this is a line</li>
        <li>this is a line</li>
        <li>this is a line</li>
        <li>this is a line</li>
    </ul>  <!-- 这个的选择跟我们想的不太一样 -->
</body>
</html>
 就理论而言,有些复杂了,我就不多写了。主要用的一个是after和before,他们是能在标签之外添加内容东西,主要的伪元素有:
==:before== 在元素之前添加内容(这还不用去改标签内的内容,有点装饰器的味道)
==:after== 在元素之后添加内容
==:first-letter== 向文本的首字(母)添加特殊的样式
==:first-line== 向文本的首行添加特殊的样式
# 以上这几个(常用)前面可以是一个冒号,也可以是两个
==::selection== ==::placeholder== ==::backdrop== # 这几个(不常用)前面只能是两个冒号
示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>伪元素</title>
    <style>
        /* 一、对首字母的处理 */
        p:first-letter {
            font: 60px 黑体;   /* font这种就可以直接给多个字体的属性,以空格隔开 */
            color: #7f55aa;
        }
        /* 二、第一行加红色下划线(这是动态的,无论第一行长度因为页面变化而变化,都只会加第一行) */
        p:first-line {
            text-decoration: underline red;
        }
        /* 三、在p标签内容前加内容 */
        p:before{
            content: "★";  /* content 就是加内容的key */
            margin-right: 50px;  /* 这个 margin-right 就是加的内容距离原内容的距离 */
        }
        /* 四、在p标签之后加内容 */
        p:after {
            content: "这些加的内容是无法被选中的,可用鼠标去选中试试";
            color: aqua;
        }
    </style>
</head>
<body>
    <p>伪元素好难顶哦,多来一点内容不他铺满伪元素好难顶哦!!</p>
</body>
</html>
javasceript组成:
 以panolens.js这个==360°全景视图==的js项目来说,在其example中随便选择一个,然后F12把对应的js文件、图片、html内容这些下载下来(这样是为了保证版本可用,下载最新版本的three.js可能会报错),然后再本地启动服务就可以本地看了。
 下面代码的核心是 body 中的代码,就是使用这相关的js库。
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width, shrink-to-fit=no">
    <title>Panolens.js panorama image panorama</title>
    <style>
      html, body {
        margin: 0;
        width: 100%;
        height: 100%;
        overflow: hidden;
        background-color: #000;
      }
      a:link, a:visited{
        color: #bdc3c7;
      }
      .credit{
        position: absolute;
        text-align: center;
        width: 100%;
        padding: 20px 0;
        color: #fff;
      }
    </style>
  </head>
  <body>
    <script src="./three.min.js"></script>
    <script src="./panolens.min.js"></script>
    <script>
      const panorama = new PANOLENS.ImagePanorama( './field.jpg' );
      const viewer = new PANOLENS.Viewer( { output: 'console' } );
      viewer.add( panorama );
    </script>
  </body>
</html>
注意:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <!-- 第三种(alert的内容直接写到.js文件中去了)  -->
    <script type="text/javascript" src="my_js/my_index.js"></script>
    
    <!-- 第二种 -->
    <script type="text/javascript">
        alert("一打开页面,这就会弹窗");
    </script>
</head>
<body>
    <!-- 第一种 -->
    <input type="button" value="登录" onclick="alert('登录成功!')">
</body>
</html>
注意:这是顺序执行的,这个页面所有出现弹窗的顺序是第三种–>第二种–>第一种,且第一种要点击才会弹窗
变量的声明调用:js是弱类型,就一个关键字var
命名:第一个字符必须是字母、下划线或者美元符号($)
var iNum = 12;
var name = “hello”;
js有5种基本数据类型(如下): && 1种复合类型:object
赋值属性、获取属性:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        window.onload = function() {
            document.getElementById("div1").style.color = "red";
            document.getElementById("div1").style.fontSize="30px";
            /* 用变量来精简代码 */
            var oDiv = document.getElementById("div1");
            oDiv.style.color = "orange";
            oDiv.style.fontSize = "10px"
        }
    </script>
</head>
<body>
    <div id="div1">这是一个div</div>
</body>
</html>
解读:
-的属性,就不要这个-,然后把后面的字母,也是s大写下面这就是通过js代码直接改div2的样式为div1的css样式,解读:
innerHTML来获取标签中的内容或是修改==。<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- js代码 -->
    <script type="text/javascript">
        window.onload = function() {
           // (1)通过`className`去改成其它的css的样式
           var oDiv2 = document.getElementById("div2");
           // html中的class属性一定要写成className
           oDiv2.className = "box1";     // 这个box1前面一定不能有点啊
            
           
            // (2)可通过`[]`来取变量值
            var oDivStyle = "background";
            var oDivStyle_value = "rgb(0, 0, 0)";
            oDiv2.style[oDivStyle] = oDivStyle_value;  // 核心是这
            // 这两行的效果就是一样的
            // oDiv2.style.background = oDivStyle_value;
            
         
            // (3)通过`innerHTML`来获取标签中的内容或是修改
            var my_content = oDiv2.innerHTML;
            alert(my_content);  // 获取到的内容展示出来
            // 把整个标签里的内容改了
            oDiv2.innerHTML = '<a href="http://www.baidu.com" id="my_link">百度连接</a>';
            
        }
    </script>
    <!-- 写样式 -->
    <style type="text/css">
        .box1, .box2 {
            width: 300px;
            height: 300px;
            background: orange;
        }
        .box2 {
            height: 150px;
            background: hotpink;
        }
    </style>
</head>
<body>
    <div class="box1" id="div1">这是div1</div>
    <div class="box2" id="div2">这是div2</div>
</body>
    
</html>
运算符:
算术运算符:+ - * / %(模或者求余)
赋值运算符:= += -= *= /* %=
| 条件运算符:== === > >= < <= != && | ! | 
== 类型不一样,数据一样也会相等,
=== 先比类型,类型都不一样,就绝不可能再相等了。
<script type="text/javascript">
       var v1 = 2;
       var v2 = '2';
       if (v1 == v2) {
           alert("相等");    // 会执行这个
       }
       else {
           alert("不相等");
       }
     
       if (v1 === v2) {
           alert("相等");
       }
       else {
           alert("不相等");  // 会执行这个
       }
</script>
if else 还有 switch 以及 for 循环条件语句,跟c++的用法都一样
数组的各种常用方式:
    <script type="text/javascript">
        // (1)创建数组var aList01 = new Array(1, 2, 3, 4, 5);  // 有这么个方式,基本不用
        var aList01 = [1, 2, 3, 4, 5];  // 注意是不能 aList01[-1],没这种用法
        // (2)获取长度
        alert(aList01.length);  // 5
        // (3)下标操作取值, aList01[2]
        // (4)join()将数组成员统过一个指定符号合并成字符串
        alert(aList01.join("-"));  //  1-2-3-4-5
        // 如果给的空字符串, aList01.join(""); 那就是这数组中的所有值拼成一个字符串
        // (5)push()和pop()从数组最后增加或删除成员
        aList01.push("hello");   // 相当于.append("hello")
        alert(aList01);
        aList01.pop();        // 把刚刚新加的"hello"又删除了
        // (6)unshift()和shift()从数组前面增加成员或删除成员
        aList01.unshift(123);  // 那么aList01[0]的结果就是 123 了
        aList01.shift();  // 这就是把前面新增的 123 的删除
        // (7)反转数组
        aList01.reverse();
        alert(aList01);    // 5,4,3,2,1
        // (8)indexOf() 返回数组中元素第一次出现的索引值(这个思想用来数组去重特别好用)
        alert(aList01.indexOf(3));  // 结果是2,就是代表3这个数第一次出现的索引
        // (9)splice()在数组中增加或删除成员
        aList01.splice(2, 1, 7, 6, "hello");
        // 从第2个元素开始,删除1个元素,然后在此位置上新增 7、8、"hello"这三个元素
        // 所以第二个参数可以给0,这样就是 insert的功能了:aList01.splice(2, 0, "hello"); 就是单纯的在第二个位置插入一个hello
    </script>
Tips:
多维数组:var li = [[1, 2, 3], [‘a’, ‘b’, ‘c’]] 用法一模一样,li[0][1]的结果就是2
数组第(8)点用来给==数组去重==(Python可以参考哈)
    <script type="text/javascript">
        var li = [1, 3, 3, 5, 7, 4, 6, 5, 7];
        var result = [];
        for (var i = 0; i < li.length; ++i) {
            // (1)按索引取数字,当这个数组第一次出现的索引值等于i,就代表它是第一次出现,否则就不是
            if (li.indexOf(li[i]) == i) {
                result.push(li[i]);
            }
        }
        alert(result);
    </script>
js通过for循环,来给网页添加数据,一般很少这么写吧,就是通过给innerHTML属性赋值,值是一些标签,这就跟前面web后端给前端传递网页数据类似了(视频:”.\就业班\09 JavaScriptv\04-数组和循环语句\03for循环-实例.flv” 大概第10分钟左右)
    <script type="text/javascript">
        //(1)合并操作:+ 可以是int+str,int会当做str处理
        alert(12 + "hello");
        //(2)parseInt() 将数字字符串转为整数
        parseInt(12.13);  // 结果会是12
        //(3)parseFloat() 转小数
        parseFloat(12.13);  // 12.13
        //(4)split() 把一个字符串按给定的分隔符,分割成数组
        var str04 = "2012-13-14";
        alert(str04.split("-"));  // 返回值是 [2012, 13, 14]
        str04.split("");  // 分割符是空字符的话,结果就是 [2, 0, 1, 2, -, 1, 3, -, 1, 4]
        //(5)charAt() 通过索引获取字符串中的某一个字符
        var num5 = str04.charAt(2);  // 就取str04字符串索引为2的字符
        //(6)indexOf() 查找字符串是否含有某字符,找到就返回匹配开头位置的索引值,没有就返回-1
        var str06 = "abcdef micro 123as";
        var num6 = str06.indexOf("mic");  // 7
        var num6_1 = str06.indexOf("hello");  // 没找到就是返回-1
        //(7)substring()截取子字符串,和c++的用法基本一样
        var str07 = str06.substring(3, 10);  // 截取3-10,不包括10,"def mic"
        // 同样,不给第二个参数,就是从第一个位置开始截取完
        //(8)toUpperCase() 字符串转大写
        var str08 = str06.toUpperCase()
        // (9)toLowerCase() 字符串转小写
        var str09 = str08.toLowerCase()
        //(10)字符串反转
        var str = "123abc";
        var res = str.split("").reverse().join("");
        // 先转数组,再reverse(),再转成字符串
    </script>
以下是网页上让输入两个整数,然后相加:(注意下面的==+==和=====可以不用标签包裹起来):
<head>
    <title>Document</title>
    <script type="text/javascript">
        window.onload = function() {
            // (1)先获取到每个对象
            var iNum1 = document.getElementById("num1");
            var iNmu2 = document.getElementById("num2");
            var btn = document.getElementById("btn");
            btn.onclick = function() {
                // (2)注意 .value 可能不会只能提示,但它确实是存在的(页面传进来的肯定是str类型)
                var n1 = parseInt(iNum1.value);  // (3)通过parseInt将字符串转为int
                var n2 = parseInt(iNmu2.value);
                // (4)把结果弹窗显示出来,
                alert(n1 + n2);
            }
        }
    </script>
</head>
<body>
    <input type="text" name="num" placeholder="请输入一个整数" id="num1"/>
    +
    <input type="text" name="num" placeholder="请输入一个整数" id="num2"/>
    =
    <button id="btn">计算</button>
</body>
 style中默认是开启了样式的,在style中display属性默认是空,也是代表开启了的:
<head>
    <script type="text/javascript">
    window.onload = function() {
        var btn = document.getElementById("btn");
        var oBox = document.getElementById("div1");
	    // (1)此时oBox.style.display得到的是个空值(那么判断语句无论是判断=="none"还是=="block"都是false),默认也是开启了样式了,所以一定会执行else;
	    // 所以如果判断语句写成 oBox.style.display == "block" ,那么else中就会是oBox.style.display == "block",那么第一次点击就不会将效果隐藏(默认是开启样式,属性为空,又把样式属性设为block,肯定不会有下效果)
        btn.onclick = function() {
            if (oBox.style.display == "none") {  // 判断语句这么写是有深意的,用这种
                oBox.style.display = 'block';  // 开启样式
            }
            else {
                oBox.style.display = 'none';  // 关闭样式
            }
        }
    }
    </script>
    <style type="text/css">
        .box {
            width: 200px;
            height: 200px;
            background-color: orange;
        }
    </style>
</head>
<body>
    <input type="button" id="btn" value="切换">
    <div class="box" id="div1"></div>
</body>
</html>
除了上面的==document.getElementById==,常用的还有:
 document.getElementsByTagName(“li”) 获取元素对象
 可以使用内置对象document中的==getElementsByTagName==方法来获取页面上的某一种标签,获取的是一个==选择集,不是数组==,但是==可以用下标的方式操作==选择集里面的标签元素:
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        window.onload = function() {
            // (1)这里得到的就是一个选择集,不是数组,  "li"就是指的<li></li>标签
            var aLi = document.getElementsByTagName("li");  // 名字千万别写错了
            // (2)获取选择集的的元素个数
            alert(aLi.length);  // 8个,会得到所有的li标签
            // (3)给li标签一个style
            // 这是错误的,不能这么直接一次性设置,它是一个选择集,必须通过下面的循环
            // aLi.style.backgroundColor = "orange";
            for (var i = 0; i < aLi.length; ++i) {
                // (4)给偶数行上色,但更多的是用 CSS3 完成这种设置
                if (i % 2 == 0) {
                    aLi[i].style.backgroundColor = "orange";
                }
            }
            // (5)如果想选中 <ul class="list2"> 中的li,而不是全部的li,那就:
            // - 先通过id拿到这个对象
            var oUl = document.getElementById("list2");
            // - 再通过这个对象来拿到里面的所有li标签
            var aLi2 = oUl.getElementsByTagName("li");
            alert(aLi2.length);
        }
    </script>
</head>
<body>
    <ul id="list1">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>
    <!-- 快速写法 ul.list2>li*3    ul.list2>li{"123"}*3  这就会把li标签中的值快速填充  -->
    <ul id="list2">
        <li>13</li>
        <li>14</li>
        <li>15</li>
    </ul>
</body>
定义:function 函数名() {} // 可以定义参数及return返回值
 首先js会预解析,预解析会把变量的声明提前,即变量使用之前没有声明或定义,但在使用之后的代码里是有声明或是定义的,那么得到的变量的值就会是==undefined==,
 但如果是函数,只要有函数的实现,调用函数的代码在函数定义之前也是可以的,因为js的预解析会把声明提前。
<script type="text/javascript" >
    var iNum;      // (1)
    alert(iNum);   // 无论哪种弹出来的一定的undefined
    // var iNum = 123;  (2)
    iNum = 5;      // (1)
    
	alert(num2);  // 这种直接调用一个不存在的,那就会报错
	
	// 函数这中就是OK的,调用在函数定义之前
    myalert();
    function myalert() {
        alert("hello");
    }
</script>
且这个函数也可以传参,有返回值,是弱类型,各种都可以相加,形参前也不用加var
<script type="text/javascript" >
    function myAdd(a, b) {
        var out = a + b;
        return ("string和int相加了:" + out)
    }
    var result = myAdd(1, 2.1);
    alert(result);
</script>
js函数的定义。简单使用:(以下是在html中调用js代码中函数,不提倡使用)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>function</title>
    <script type="text/javascript">
        function myAlert() {
            alert("函数的弹窗");
        }
        function chText() {
            var oDiv1 = document.getElementById("div1");
            oDiv1.innerHTML = "把显示的数据改了";
            oDiv1.style.color = "red";
            oDiv1.style.fontSize = "30px";
        }
    </script>
</head>
<body>
    <!-- 注意要点击这段文字才会有效果,因为是onclik;;注意这里函数调用的话要带括号 -->
    <div id="div1" onclick="myAlert()">这是函数的学习</div>
    <!-- 下面整个按钮,来改变上面div中的内容 -->
    <input type="button" id="btn1" value="点击" onclick="chText()">
</body>
</html>
解读:
但是以上,还是把js的代码写到html中,不要这种写法,js还是要单独写,接着上面的代码,做一点改造:(==这是把js代码写出来,去修改html中的属性==)
<head>
    <title>function</title>
    <script type="text/javascript">
        /* (1)这就要用这包裹起来了,不然会直接运行到getElementById,就会报错 */
        window.onload = function() {
            /*(2) 获取到按钮,然后让其onclick属性等于 要去执行的函数名 */
            var obtn1 = document.getElementById("btn1");
            obtn1.onclick = chText;  /* (3)注意这里不能有()。不然就直接是函数的执行了 */
            function chText() {
                var oDiv1 = document.getElementById("div1");
                oDiv1.innerHTML = "把显示的数据改了";
                oDiv1.style.color = "red";
                oDiv1.style.fontSize = "30px";
            }
        }
    </script>
</head>
<body>
    <div id="div1">这是函数的学习</div>
    <input type="button" id="btn1" value="点击">
</body>
Tips:
上面的核心是7、8行,获取到button的变量,然后将其onclick属性赋值为定义的用来改变div标签属性的函数;
这是用 window.onload = function() {} 包裹起来了的,不然直接顺序执行到第7行是不行的,都还没那个标签;
==匿名函数==:
注意第8行,意义不大,直接就赋值的函数名,那不如就用匿名函数,那么第8行就可以写成
相当于定义里没要函数名了,直接 function () {}
// 改成匿名函数
obtn1.onclick = function () {      // 
	var oDiv1 = document.getElementById("div1");
	oDiv1.innerHTML = "把显示的数据改了";
	oDiv1.style.color = "red";
	oDiv1.style.fontSize = "30px";
}
案例,网页换肤:(==就是通过botton的onclick的点击事件,来改变css的href引入属性达到换肤==)
(1)css文件:(.box1这种前面带点.的,html中属性引入时都是用的class=”.box1”)
skin_orange.css
body {
    background-color: orange;
}
/*
box, .box1, .box2 {
    font-size: 30px;
    border-radius: 15px;
}
*/
/*  不应该上面那么写,都是 input 这个标签,直接input设置总的属性,再用里面的box1自定义增加不一样的 */
input {
    font-size: 30px;
    border-radius: 15px;
}
.box1 {
    color: orange;
}
.box2 {
    color: hotpink;
}
skin_pink.css
body {
    background-color: hotpink;
}
input {
    font-size: 30px;
    border-radius: 15px;
    border: 0;   /* 这就是不要边框那圈黑的 */
}
.box1 {
    color: orange;
}
.box2 {
    color: hotpink;
}
skin.js
window.onload = function () {
    var btn1 = document.getElementById("btn1");
    var btn2 = document.getElementById("btn2");
    var skin_link = document.getElementById("my_link");
    // 用函数来改变成导入的外部的css的href链接属性就好了
    btn1.onclick = function () {
        skin_link.href = "my_css/skin_orange.css";
    }
    btn2.onclick = function () {
        skin_link.href = "my_css/skin_pink.css";
    }
}
skin.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>skin</title>
    <!-- (1)引入css样式文件 -->
    <link rel="stylesheet" href="my_css/skin_orange.css" id="my_link">
    <!-- (2)引入js文件,来实现函数的换肤功能 -->
    <script type="text/javascript" src="my_js/skin.js"> </script>
</head>
<body>
    <input type="button" value="橘色皮肤" id="btn1" class="box1">
    <input type="button" value="粉色皮肤" id="btn2" class="box2">
</body>
</html>
使用场景: 在从别的地方导入进了js文件,里面有函数变量,自己如果不清楚,恰巧写了同名的变量、函数,就会将原来的功能覆盖掉,特别是新加功能时,很可能遇到覆盖旧功能的情况,那此时就要用封闭函数:
格式简单的来说,就是 (function (){自己的函数、变量写这里})()
;(function () {
	var num = 24;
	function myalert() {
		alert("hello");
	}
	alert(num);
	myalert();
})()
解读:
定时器在javascript中的作用:
定时器:
setTimeout(函数名,int) 只执行一次的定时器
clearTimeout 关闭只执行一次的定时器
    <script type="text/javascript">
        function myalert() {
            alert("hello");
        }
        // 不管有没有返回值,定时器都是会执行的,给个返回值就只是为了clearTimeout可以获取到它
        var st = setTimeout(myalert, 2000);  // 2s后弹窗
        clearTimeout(st)  // 加了这句,这就不会弹窗了,定时器没执行,就背着关
    </script>
setInterval(函数名,int) 反复执行的定时器
clearInterval 关 闭反复执行的定时器
    <script type="text/javascript">
        function myalert() {
            alert("hello");
        }
	    // 这就是用的匿名函数
        setInterval(function() {
            alert("world");
        }, 5000);  // 每5秒钟弹窗一次
  
		// 若想要关闭它,必须将其赋值于一个对象,即 var obj = setInterval...
		clearInterval(obj);
    </script>
第一步:简单的让一个div盒子,从==左边的地方往右边移动==:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>定时器动画</title>
    <script type="text/javascript">
        window.onload = function() {
            var oDiv = document.getElementById("box1");
            // alert(oDiv.style.height);  // 不能这样直接来获得,得到的结果是空,必须要直接赋值
            // oDiv.style.display = "none";  // 让整个样式不起作用
		   
            // 方式一:(演示时屏蔽掉其中一个)
            var abs_pos = 0;
            function addLeft() {
                abs_pos += 2;
                oDiv.style.left = abs_pos + "px";  // 别忘了加px,不然是错的
                // 大于700时就关闭掉这个定时器
                if (abs_pos > 700) {
                    clearInterval(timer1);
                }
            }
            var timer1 = setInterval(addLeft, 10);  // 注意要这个返回值,不然不好关闭定时器
		   // 方式二:匿名函数
            var timer2 = setInterval(function () {
                abs_pos += 2;
                oDiv.style.left = abs_pos + "px";  // 别忘了加px,不然是错的
                if (abs_pos > 700) {
                    clearInterval(timer2);
                }
            }, 10)
        }
    </script>
	
    <style type="text/css">
        .box {
            width: 300px;
            height: 300px;
            background-color: hotpink;
            position: absolute;  /* 有了这个参数,设置的下面的这俩参数才有用 */
            left: 0;
            top: 100px;
        }
    </style>
</head>
<body>
    <div id="box1" class="box"></div>
</body>
</html>
第二步:让这==来回反复的运动==:(只保留js的代码,其它都一样)
    <script type="text/javascript">
        window.onload = function () {
            var oDiv = document.getElementById("box1");
            var abs_pos = 0;
            var speed = 2;  // 加一个变量把速度存起来,后面好改
            function addLeft() {
                abs_pos += speed;
                oDiv.style.left = abs_pos + "px";  // 别忘了加px,不然是错的
                // 大于700时不是关闭掉这个定时器,而是让speed称为负数,就往左运动了
                if (abs_pos > 700) {
                    speed = -2;
                }
                // 这里不能是if else,必须是两个if
                if (abs_pos <= 0) {
                    speed = 2;
                }
            }
            var timer1 = setInterval(addLeft, 10);
        }
    </script>
 如果是要做连续==滚动效果==,就看(”.\就业班\09 JavaScriptv\06-定时器和变量作用域\02无缝滚动01.flv”),里面的思想还是不错:
 其实滚动就是把一张平面图通过 innerHTML = innerHTML + innerHTML 把标签里内容复制了一份,这样滑动时就可以了,当第二份即将滑动完时,做个判断,立马又把图定位回最开始的位置。
 接着上面,一般自己动滑动时,把鼠标放上去就会暂停(就是把速度设为0),移开又动起来(把速度设回去),下面的代码只是示意:
var oDiv = document.getElementById("div1");
var iSpeed = 2;  // 原来在动
var iNowSpeed = 0;   // 一个变量
// 匿名函数
// 鼠标移入时,把此时速度存起来,再把速度设为0,就停止了
oDiv.onmouseover = function () {
	iNowSpeed = iSpeed;
	iSpeed = 0;
}
// 鼠标移出时,就把速度设回来
oDiv.onmouseout = function () {
	iSpeed = iNowSpeed;
}
解读:
实时显示的时钟:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>时钟</title>
    <script type="text/javascript">
        window.onload = function () {
            var oDiv = document.getElementById("div1");
		    // 从这里封装函数,这样时间才会更新
            function TimeGo() {
                var now = new Date();  // 这是系统的方法
                // 1、获取年份
                var year = now.getFullYear();
                // 2、获取月份(注意,月份是0-11,所以要+1)
                var month = now.getMonth() + 1;
                // 3、获取日
                var iDate = now.getDate();
                // 4、星期几也是从0-6,且0是星期天
                var week = now.getDay();
			   // 5、时
                var hour = now.getHours();
			   // 6、分
                var min = now.getMinutes();
  			   // 7、秒
                var sec = now.getSeconds();
			   //  把时间拼接起来
                var sTr = "当前时间是:" + year + "年" + month + "月" + iDate + "日" 
                + " 星期" + week + " " + hour + ":" + min + ":" + sec;
                oDiv.innerHTML = sTr;
            }
            TimeGo();  // 注意:因为定时器要等一秒钟才调用,进来是没东西的,就先调用一次
            setInterval(TimeGo, 1000);
        }
    </script>
    <style type="text/css">
        .box1 {
            font: italic small-caps bolder 18px/1.5 微软雅黑;
            color: hotpink;
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="box1" id="div1"></div>
</body>
</html>
Tips:
距离未来某一个时间的倒计时:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>倒计时</title>
    <script type="text/javascript">
        window.onload = function () {
            var oDiv = document.getElementById("div1");
            function timeLeft() {
                // 注意,这是读取的本地时间,是可以修改的,实际开发中是要读取后台服务器的时间,通过ajax读取
                var now = new Date();
                // 未来时间(离未来的51还有多久)(两个写法一样,注意月份是从0开始,要比实际小1)
                var future = new Date(2022, 3, 30, 24, 0, 0);
                // var future = new Date(2022, 4, 1, 0, 0, 0);
                // 剩下的时间,毫秒要换成秒
                var lefts = parseInt((future - now) / 1000);
			   // parseInt(3.99);  得到的结果就是 3
                var day = parseInt(lefts / 86400);
                var hour = parseInt(lefts % 86400 / 3600);
                var min = parseInt(lefts % 86400 % 3600 / 60);
                var sec = lefts % 60;
                oDiv.innerHTML = "距离2022年4月31日晚24点还剩下:" + day + "天" + hour + "时" + min + "分" + sec + "秒";
            }
            timeLeft();   // 注意:因为定时器要等一秒钟才调用,进来是没东西的,就先调用一次
            setInterval(timeLeft, 1000);
        }
    </script>
    <style type="text/css">
        .box1 {
            font: italic small-caps bolder 18px/1.5 微软雅黑;
            color: hotpink;
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="box1" id="div1"></div>
</body>
</html>
Tips:
(注意加不加括号的使用)
document:
location:
==window.location.href== // 获取或者重定url地址
示例:(不再是给button标签上加 标签来跳转,而是通过js的事件控制)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>内置对象</title>
    <script type="text/javascript">
        window.onload = function () {
            var oDiv = document.getElementById("btn1");
            // 这是通过程序的点击跳转
            // oDiv.onclick = function () {
            //     window.location.href = "http://www.baidu.com";
            // }
              
            // 这就是把鼠标移上去就会跳转
            // 可搭配前面的 document.referrer 使用,先把这存起来
            // var before_url = document.referrer;  // (1)
            oDiv.onmouseover = function () {
                window.location.href = "http://www.baidu.com";
                // 然后重定向链接时就给前面保存的地址
                // window.location.href = before_url;  // (1)
            }
        }
    </script>
</head>
<body>
    <input type="button" VALUE="跳转" id="btn1">
</body>
</html>
==window.location.search== // 获取html页面跟的参数
index.html?aa456%789 //那么window.location.search获取的就是 ?aa456%789
注意,.html后一定是要紧跟==?==才行,跟其它符号或是内容,都会是404 示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        window.onload = function () {
            var oBody = document.getElementById("body1");
    
            var data = window.location.search;  // 会得到?以及后面的所有字符串
    
            var num = data.split("=")[1];  // 这个是没有[-1]的写法的
            var color = "";
            switch (parseInt(num)) {
                case 1:
                    color = "orange";
                    break;
                case 2:
                    color = "hotpink";
                    break;
                default:
                    color = "green";
            }
            oBody.style.backgroundColor = color;
        }
    </script>
</head>
<body id="body1">
    <div>hello</div>
</body>
</html>
window.location.hash // 获取页面锚点或者叫哈希值
调试的方法,
==alert(一个变量名);== // 通过弹窗的方式将其打印出来=
==console.log(比如一个数组的名字);== // 就可以在浏览器的console里看到对应的数据=
注意:==var num = (max - min) * Math.random() + min;==这种生成随机数的写法
<script type="text/javascript">
    var pi = Math.PI;
    // 生成指定范围的随机整数数(包括最大最小)
    var min = 23;
    var max = 28;
  
    var arr = [];
    for (var i = 0; i < 10; ++i) {
        // 特别注意这种随机生成不规则范围内的数的写法
        var num = (max - min) * Math.random() + min;
        arr.push(Math.round(num));  // 四舍五入,那么 27.5及以上的数就会成为28
    }
    console.log(arr);  // 浏览器 F12 的console控制台就可以看到相关数据了
    console.log(pi);
</script>
==document.title== // 改变标题title的方式 (这就会看到页面标题一直在变)
<script type="text/javascript">
    // 生成指定范围的随机整数数(包括最大最小)
    var min = 23;
    var max = 28;
    // 通过定时器循环打印
    setInterval(function () {
        var new_num = Math.round((max - min) * Math.random() + min);
        // (1)通过console控制台的方式
        console.log(new_num);
  
        // (2)改变标题title的方式 (这就会看到页面标题一直在变)
        document.title = new_num;
    }, 500)
</script>