HTML:Hyper Text Markup Language(超文本标记语言)
超文本包括:文字、图片、音频、视频、动画等
HTML5的优势
①世界知名浏览器厂商对HTML5的支持
1、微软
2、Google
3、苹果
4、Opera
5、Mozilla
②市场的需求
③跨平台
W3C标准
①W3C
1、World Wide Web Consortium(万维网联盟)
2、成立于1994年,Web技术领域最权威和具影响力的国际中立性技术准机构。
3、http://www.w3.org/
4、http://www.chinaw3c.org/
②W3C标准包括
1、结构化标准语言(HTML、XML)
2、表现标准语言(CSS)
3、行为标准(DOM、ECMAScript)
常见IDE
①记事本
②Dreamweaver
③IDEA
④WebStorm
…
<!-- DOCTYPE:告诉浏览器,我么们要使用什么规范-->
<!DOCTYPE html>
<html lang="en">
<!--head标签用来代表网页头部-->
<head>
<!--meat描述性标签,它用来描述我们网站的一些信息-->
<!-- meat一般用来做SEO-->
<meta charset="UTF-8">
<meta name="keywords" content="狂神说Java">
<meta name="description" content="来到这个地方可以学习Java">
<!--title网页标题-->
<title>我的第一个网页</title>
</head>
<!--body标签用来代表网页主体-->
<body>
Hello,World!
</body>
</html>
标题标签
<h1>一级标题</h1>
<h2>二级标题</h2>
<h3>三级标题</h3>
<h4>四级标题</h4>
<h5>五级标题</h5>
<h6>六级标题</h6>
段落标签
<p>1 2 3 4 5</p>
<p>3 4 5 6 7</p>
<p>6 7 8 9 10</p>
<p>10 J Q K A</p>
换行标签
1 2 3 4 5<br/>
3 4 5 6 7<br/>
6 7 8 9 10<br/>
10 J Q K A<br/>
水平线标签
<hr/>
字体样式标签
<h1>字体样式标签</h1>
粗体:<strong>I love You</strong>
斜体:<em>I love You</em>
注释和特殊符号(&…;)
<!--注释:快捷键Ctrl+/-->
空格:
大于:>
小于:<
版权:©
src:图片地址(必填)
alt:图片名字(必填)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--img学习
src:图片地址(必填)
相对地址(推荐使用) 绝对地址
../ --上一级目录
alt:图片名字(必填)
-->
<img src="../resources/image/1.jpg" alt="头像" title="悬停文字" width="300" height="300">
</body>
</html>
href:必填,表示要跳转到那个界面
target:表示窗口在哪里打开
超链接:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>链接标签</title>
</head>
<body>
<!--使用name作为标记-->
<a name="top">顶部</a>//锚标记
<!--a标签
href:必填,表示要跳转到那个界面
target:表示窗口在哪里打开
_blank 在新标签打开
_self 在当前网页打开(默认)
-->
<a href="3.图像标签.html" target="_blank">点击跳转1</a>
<a href="3.图像标签.html" target="_self">点击跳转2</a>
<a href="https://www.baidu.com">点击跳转到百度</a>
<br/>
<a href="1.我的第一个网页.html">
<img src="../resources/image/1.jpg" alt="头像" title="悬停文字" width="300" height="300">
</a>
<!--锚链接
1.需要一个锚标记
2.跳转到标记
#
-->
<a href="#top">回到顶部</a>//锚链接
<a name="down">down</a>//锚标记
<!--功能性链接
1、邮件链接: mailto
2、QQ链接
-->
<a href="mailto:3157043973@qq.com">点击联系我</a>
<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=&site=qq&menu=yes">
<img border="0" src="http://wpa.qq.com/pa?p=2:3157043973:53"
alt="你好,加我免费领取小电影" title="你好,加我免费领取小电影"/></a>
</body>
</html>
块元素
无论内存多少,该元素独占一行(p、h1-h6…)
行内元素
内容撑开宽度,左右都是行内元素的可以排在一行(a、strong、em…)
什么是列表
列表就是信息资源的一种展示形式。它可以使信息结构化和条理化,并以列表的样式显示出来,以便浏览者可以更快捷的获得相应的信息
列表的分类
有序列表
<!--
应用范围:试卷、问答...
-->
<ol>
<li>Java</li>
<li>Python</li>
<li>JavaScript</li>
<li>C/C++</li>
</ol>
无序列表
<!--
应用范围:导航、侧边栏...
-->
<ul>
<li>Java</li>
<li>Python</li>
<li>JavaScript</li>
<li>C/C++</li>
</ul>
自定义列表
<!--
dl:标签
dt:列表名称
dd:列表内容
应用范围:网站底部...
-->
<dl>
<dt>学科</dt>
<dd>Java</dd>
<dd>Python</dd>
<dd>Linux</dd>
<dd>C</dd>
<dt>位置</dt>
<dd>西安</dd>
<dd>湖北</dd>
<dd>浙江</dd>
</dl>
为什么使用表格
简单通用
结构稳定
基本结构
<tr></tr><td></td>rowspancolspan<table border="1dx">
<tr>
<!--colspan跨列-->
<td colspan="4">1-1</td>
</tr>
<tr>
<!--rowspan跨行-->
<td rowspan="2">2-1</td>
<td>2-2</td>
<td>2-3</td>
<td>2-4</td>
</tr>
<tr>
<td>3-1</td>
<td>3-2</td>
<td>3-3</td>
</tr>
</table>
src:资源路径 (必填)
controls : 控制条
autoplay : 自动播放
视频
<video src="../resources/video/1.mp4" controls autoplay></video>
音频
<audio src="../resources/audio/1.mp3" controls autoplay></audio>
| 元素名 | 描述 |
|---|---|
| header | 标题头部区域的内容(用于页面或页面中的一块区域) |
| footer | 标记脚部区域的内容(用于整个页面或页面中的一块区域) |
| section | Web页面中一块独立的区域 |
| article | 独立的文章内容 |
| aside | 相关内容或应用(常用于侧边栏) |
| nav | 导航类辅助内容 |
scr:地址
w-h:宽度和高度
<iframe src="" name="hello" frameborder="0" width="1000" height="800"></iframe>
<a href="3.图像标签.html" target="hello">点击跳转</a>
action:表单提交的位置
可以是网站,也可以是一个请求处理地址
method: post,get提交方式
get方式提交:可以在url中看到提交的信息 ,不安全,但是高效
post方式提交:比较安全,可以传输大文件
<h1>注册</h1>
<form action="1.我的第一个网页.html" method="get">
<p>用户名:<input type="text" name="username"></p>
<p>密码:<input type="password" name="pwd"></p>
<p>
<input type="submit">//提交按钮
<input type="reset">//重置按钮
</p>
</form>
| 属性 | 说明 |
|---|---|
| type | 指定元素的类型。text(文本框)、password(密码框)、radio、checkbox(单选框和多选框)、submit(提交按钮)、reset(重置按钮)、file、hidden、image、button,默认为text |
| name(必填) | 指定表单元素的名称 |
| value | 元素的初始值。type为radio时必须指定一个值 |
| size | 指定表单元素的初始宽度。当type为radio为text或password时,表单元素的大小以字符为单位。对于其他类型,宽度以像素为单位 |
| maxlength | type为text或password时,输出的最大字符数 |
| checked | type为radio或checkbox时,指定按钮是否被选中 |
文本框:input type="text"
value="666" 默认初始值
maxlength = "8" 最长能写几个字符
size = "30" 文本框的长度
<p>用户名:<input type="text" name="username"></p>
<p>密码:<input type="password" name="pwd"></p>
单选框:input type="radio"
value:单选框的值
name:表示组
checked:默认选中
<p>
性别:
<input type="radio" value="boy" name="sex" checked/>男
<input type="radio" value="girl" name="sex"/>女
</p>
多选框:input type="checkbox"
checked:默认选中
<p>
爱好:
<input type="checkbox" value="sleep" name="hobby">睡觉
<input type="checkbox" value="code" name="hobby" checked>代码
<input type="checkbox" value="chat" name="hobby">聊天
<input type="checkbox" value="game" name="hobby">游戏
</p>
按钮:input type="button" 普通按钮
input type="image" 图像按钮
input type="submit" 提交按钮
input type="reset" 重置按钮
<p>
按钮:
<input type="button" name="btn1" value="点击变长">
<input type="image" src="../resources/image/1.jpg">
</p>
<p>
<input type="submit">
<input type="reset" value="清空表单">
</p>
列表框
selected:默认选中
<p>国家:
<select name="列表名称">
<option value="china">中国</option>
<option value="us">美国</option>
<option value="eth" selected>瑞士</option>
<option value="yindu">印度</option>
</select>
</p>
<p>
反馈:
<textarea name="textarea" cols="50" rows="10">文本内容</textarea>
</p>
<p>
<input type="file" name="files">
<input type="button" value="上传" name="upload">
</p>
<p>邮箱:
<input type="email" name="email">
</p>
<p>url:
<input type="url" name="url">
</p>
<p>商品数量:
<input type="number" name="num" max="100" min="0" step="1">
</p>
<p>音量控制:
<input type="range" name="voice" max="100" min="0" step="2">
</p>
<p>搜索:
<input type="search" name="search">
</p>
<p>
<label for="mark">点我试试</label>
<input type="text" id="mark">
</p>
Cascading Style Sheets :层叠级联样式表
CSS:表现(美化网页:字体,颜色,边距,高度,宽度,背景图片,网页)
CSS1.0
CSS2.0 DIV(块) + CSS,HTML与CSS结构分离的思想,网页变得简单,SEO
CSS2.1 浮动,定位
CSS3.0 圆角,阴影,动画… 浏览器兼容性…
基本入门
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CSS入门</title>
<!--规范 <style> 可以编写css代码,每一个声明最好用分号结尾
语法:
选择器{
声明1;
声明2;
声明3;
}
-->
<style>
h1{
color: red;
}
</style>
</head>
<body>
<h1>我是标题</h1>
</body>
</html>
CSS的优势:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 内部样式 -->
<style>
h1{
color: green;
}
</style>
<!-- 外部样式 -->
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<!--优先级:就近原则-->
<!--行内样式: 在标签元素中,编写一个style属性,编写样式即可-->
<h1 style="color: red;">我是标题</h1>
</body>
</html>
拓展:外部样式两种写法
链接式
HTML
<!--外部样式-->
<link rel="stylesheet" href="css/style.css">
导入式
@import是CSS2.1特有的
<!--导入式-->
<style>
@import url("css/style.css");
</style>
作用:选择页面上的某一个或某一类元素
优先级:id选择器>class选择器>标签选择器
标签选择器:会选择到页面上所有的这个标签的元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*标签选择器会选择到页面上所有的这个标签的元素*/
h1 {
color: #a12d33;
background: #3fdu52;
border-radius: 10px;
}
p{
font-size: 80px;
}
</style>
</head>
<body>
<h1>JavaScript</h1>
<h1>JavaScript</h1>
<p>Java</p>
</body>
</html>
class选择器:可以多个标签归类,是同一个class,可以复用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/* 类选择器的格式:.class的名称{}
好处:可以多个标签归类,是同一个class,可以复用
*/
.xl{
color: #3628ff;
}
.xiang{
color: #a542ff;
}
</style>
</head>
<body>
<h1 class="xl">标题一</h1>
<h1 class="xiang">标题二</h1>
<h1 class="xl">标题三</h1>
<p class="xl">p标签</p>
</body>
</html>
id选择器:id必须保证全局唯一
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/* id选择器 :id必须保证全局唯一
语法: # id名称{}
优先级:
不遵循就近原则 ,是固定的
id选择器>class选择器>标签选择器
*/
#xiang{
color: #ff008a;
}
.xl{
color: #02ff00;
}
h1{
color: #2dywh6;
}
</style>
</head>
<body>
<h1 class="xl" id="xiang">标题1</h1>
<h1 class="xl">标题2</h1>
<h1 class="xl">标题3</h1>
<h1>标题4</h1>
<h1>标题5</h1>
</body>
</html>
后代选择器:在某个元素的后面
body p{
background:#3cbda5;
}
子选择器:一代
body>p{
background:#3cbda5;
}
相邻兄弟选择器:当前选中元素的下一个同辈
.active + p{
background:#3cbda5;
}
通用选择器:当前选中元素的向下的所有同辈
.active~p{
background:#3cbda5;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*选择ul中的第一个子元素*/
ul li:first-child{
background: red;
}
/*选择ul中的最后一个子元素*/
ul li:last-child{
background: blue;
}
/* 选中p1 :定位到父元素,选择当前的第一个元素
选择当前p元素的父级元素,选中父级元素的第一个,并且是当前元素才生效,顺序
*/
p:nth-child(1){
background: yellow;
}
/*选中父类元素下的p元素的第二个,类型*/
p:nth-of-type(2){
background: green;
}
/*鼠标移上去变色*/
a:hover{
background:#000b3e;
}
</style>
</head>
<body>
<!--<h1>h1</h1>-->
<p>p1</p>
<p>p2</p>
<p>p3</p>
<ul>
<li>li1</li>
<li>li2</li>
<li>li3</li>
</ul>
<a href="">12345</a>
</body>
</html>
id + class结合
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.demo a{
float:left; /*浮动*/
display:block;
height: 50px;
width: 50px;
border-radius: 20px;
background: blue;
text-align: center; /*对齐方式*/
color : #dfdedb;
text-decoration: none; /*去下划线*/
margin-right: 5px; /*边距*/
font:bold 20px/50px Arial; /*粗体 字体大小/行高 字体格式*/
}
/* 属性名 . 属性名 = 属性值(正则)
= 绝对等于
*= 包含这个元素
^= 以这个开头
$= 以这个结尾
*/
/*存在id属性的元素 a[] {}*/
/*a[id]{
background: yellow;
}*/
/* id=first的元素*/
/*a[id=first]{
background: yellow;
}*/
/*class中有links的元素 */
/*a[class*=links]{
background: yellow;
}*/
/*选中href中以http开头的元素*/
/*a[href^=http]{
background: yellow;
}*/
/*选中herf中以pdf结尾的元素*/
a[href$=pdf]{
background: yellow;
}
</style>
</head>
<body>
<p class="demo">
<a href="http://www.baidu.com" class="links item first" id="first">1</a>
<a href="http://blog.kuangshen.com" class="links item active" target="_blank" title="test">2</a>
<a href="images/123.html" class="links item">3</a>
<a href="images/123.png" class="links item">4</a>
<a href="images/123.jpg" class="links item">5</a>
<a href="abc" class="links item">6</a>
<a href="/a.pdf" class="links item">7</a>
<a href="/abc.pdf" class="links item">8</a>
<a href="abc.doc" class="links item">9</a>
<a href="abcd.doc" class="links item last" last>10</a>
</p>
</body>
</html>
= 绝对等于
*= 包含这个元素
^= 以这个开头
$= 以这个结尾
span标签:重点要突出的字,使用span
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#title1{
font-size: 50px;
}
</style>
</head>
<body>
欢迎学习<span id="title1">Java</span>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*
font-family :字体
font-size :字体大小
font-weight :字体粗细
color: 字体颜色
*/
body {
font-family: "Arial Black" , 楷体;
color:#a13d30;
}
h1 {
font-size: 50px;
}
.p1{
font-weight: bolder;
}
</style>
</head>
<body>
<h1>故事介绍</h1>
<p class="p1">
这个世界名为元泱境界,脉(本质为振动)是构成万物的基础。每隔333年,会有一个神秘而强大的异常生物重生,它就是魁拔!魁拔的每一次出现,都会给元泱境界带来巨大的灾难!即便是天界的神族,也在劫难逃。在天地两界各种力量的全力打击下,魁拔一次次被消灭,但又总是按333年的周期重新出现。魁拔纪元1664年,天神经过精确测算后,在魁拔苏醒前一刻对其进行毁灭性打击。但谁都没有想到,由于一个差错导致新一代魁拔成功地逃脱了致命一击。很快,天界魁拔司和地界神圣联盟均探测到了魁拔依然生还的迹象。因此,找到魁拔,彻底消灭魁拔,再一次成了各地热血勇士的终极目标。
</p>
<p>
在偏远的兽国窝窝乡,蛮大人和蛮吉每天为取得象征成功和光荣的妖侠纹耀而刻苦修炼,却把他们生活的村庄搅得鸡犬不宁。村民们绞尽脑汁把他们赶走。一天,消灭魁拔的征兵令突然传到窝窝乡,村长趁机怂恿蛮大人和蛮吉从军参战。然而,在这个一切都凭纹耀说话的世界,仅凭蛮大人现有的一块冒牌纹耀,不要说参军,就连住店的资格都没有。受尽歧视的蛮吉和蛮大人决定,混上那艘即将启程去消灭魁拔的巨型战舰,直接挑战魁拔,用热血换取至高的荣誉。
</p>
<p>Baby I'm Sorry - 마이네임 (MYNAME)
내가 맘에 들지 않아
我不满意
내곁을 떠나간너
从我身边离开的你
해준것도 없는데
也没什么能给你
왜 내걱정을 하는지
为什么要担心我
하지만 니 맘다 알아
但是你的心意我全都知道
그래서 그게 싫어
所以好讨厌
걱정은 버리고 떠나가
不要担心了走吧
자꾸만 짜증나게
</p>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*颜色:
单词:RGB 0~F
RGBA:A 0~1
text-align: center; 排版居中
text-indent: 2em; 段落首行缩进
height: 300px;
line-height: 300px;
行高 和块 的高度一致时,就可以上下居中
*/
h1{
/*color: #0000ff;*/
color :rgba(0,255,255,0.9);
text-align: center;
}
.p1{
text-indent: 2em;
}
.p3 {
background: #2700ff;
height: 300px;
line-height: 300px;
}
/*下划线*/
.l1{
text-decoration: underline;
}
/*中划线*/
.l2{
text-decoration: line-through;
}
/*上划线*/
.l3{
text-decoration: overline;
}
/*超链接去下划线*/
a{
text-decoration: none;
}
/*水平对齐:参照物 a b*/
img,span{
vertical-align: middle;
}
</style>
</head>
<body>
<a href="">123</a>
<p class="l1">123456</p>
<p class="l2">123456</p>
<p class="l3">123456</p>
<h1>故事介绍</h1>
<p class="p1">
这个世界名为元泱境界,脉(本质为振动)是构成万物的基础。每隔333年,会有一个神秘而强大的异常生物重生,它就是魁拔!魁拔的每一次出现,都会给元泱境界带来巨大的灾难!即便是天界的神族,也在劫难逃。在天地两界各种力量的全力打击下,魁拔一次次被消灭,但又总是按333年的周期重新出现。魁拔纪元1664年,天神经过精确测算后,在魁拔苏醒前一刻对其进行毁灭性打击。但谁都没有想到,由于一个差错导致新一代魁拔成功地逃脱了致命一击。很快,天界魁拔司和地界神圣联盟均探测到了魁拔依然生还的迹象。因此,找到魁拔,彻底消灭魁拔,再一次成了各地热血勇士的终极目标。
</p>
<p>
在偏远的兽国窝窝乡,蛮大人和蛮吉每天为取得象征成功和光荣的妖侠纹耀而刻苦修炼,却把他们生活的村庄搅得鸡犬不宁。村民们绞尽脑汁把他们赶走。一天,消灭魁拔的征兵令突然传到窝窝乡,村长趁机怂恿蛮大人和蛮吉从军参战。然而,在这个一切都凭纹耀说话的世界,仅凭蛮大人现有的一块冒牌纹耀,不要说参军,就连住店的资格都没有。受尽歧视的蛮吉和蛮大人决定,混上那艘即将启程去消灭魁拔的巨型战舰,直接挑战魁拔,用热血换取至高的荣誉。
</p>
<p class="p3">Baby I'm Sorry - 마이네임 (MYNAME)
내가 맘에 들지 않아
我不满意
내곁을 떠나간너
从我身边离开的你
해준것도 없는데
也没什么能给你
왜 내걱정을 하는지
为什么要担心我
하지만 니 맘다 알아
但是你的心意我全都知道
그래서 그게 싫어
所以好讨厌
걱정은 버리고 떠나가
不要担心了走吧
자꾸만 짜증나게
</p>
<p>
<img src="images/a.png" alt="">
<span> asjhl jldlasdhlkjklj</span>
</p>
</body>
</html>
/*text-shadow:阴影颜色 水平偏移(左正右负) 垂直偏移(下正上负) 阴影半径 */
#price{
text-shadow: #3cc7f5 10px -10px 2px;
}
正常情况下:a:hover
/*默认的颜色*/
a{
text-decoration:none;
color:#000;
}
/*鼠标悬浮的状态(只需要记住:hover)*/
a:hover{
color:orange;
font-size:50px;
}
list-style:
ul li{
height:30px;
list-style:none;
text-indent:1em;
}
<style>
div{
width: 1000px;
height: 700px;
border: 1px solid red; /* 边框的粗细 实线 颜色*/
background-image: url("images/1.png");
/* 默认是全部平铺的 repeat*/
}
.div1{
background-repeat: repeat-x;
}
.div2{
background-repeat: repeat-y;
}
.div3{
background-repeat: no-repeat;
}
</style>
<style>
/* body总有一个默认的外边距margin:0, 常用操作
h1,ul,a,body{
margin: 0;
padding: 0;
text-display: none;
}
border:粗细,样式,颜色*/
#box{
width: 300px;
border: 1px solid red;
}
h2{
font-size: 16px;
background: #3cbda6;
line-height: 30px;
color:red;
}
form{
background: #3cbda6;
}
div:nth-of-type(1) input{
border: 2px solid black;
}
div:nth-of-type(2) input{
border: 2px dashed green;
}
div:nth-of-type(3) input{
border: 3px dashed blue;
}
</style>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#box{
width: 300px;
border: 1px solid red;
margin: 0 auto;
}
h2{
font-size: 16px;
background: red;
line-height: 30px;
text-align: center;
margin:0 1px 2px 3px;
}
form{
background: blue;
}
input{
border: 1px solid black;
}
div:nth-of-type(1){
padding: 10px 2px;
}
</style>
</head>
<body>
<div id="box">
<h2>会员登录</h2>
<form action="#">
<div>
<span>用户名:</span>
<input type="text">
</div>
<div>
<span>密码:</span>
<input type="text">
</div>
<div>
<span>邮箱:</span>
<input type="text">
</div>
</form>
</div>
</body>
</html>
盒子的计算方式:元素大小=内容宽度+margin+border+padding
<style>
div{
width: 50px;
height: 50px;
background: red;
margin: 100px;
border:10px solid red;
border-radius: 50px 0px 0px 0px;
}
</style>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
width: 1000px;
margin: 0 auto;
}
img{
border-radius: 50px;
box-shadow: 10px 10px 100px yellow;
}
</style>
</head>
<body>
<div style="width:500px;text-align:center">
<img src="images/1.png" alt="">
</div>
</body>
</html>
块级元素:独占一行
h1-h6 p div 列表...
行内元素:不独占一行
span a img strong...
行内元素可以被包含在块级元素里面,反之不行
这个也是一种实现行内元素排列的方式,但是我们很多情况都是用float
<style>
/*display:
block 块元素
inline 行内元素
inline-block 是块元素,但是可以内联在一行
none
*/
div{
width: 100px;
height: 100px;
border: 1px solid red;
display: none;
}
span{
width: 100px;
height: 100px;
border: 1px solid red;
display:inline-block;
}
</style>
float:左右浮动
选择器
| 属性值 | 描述 |
|---|---|
| left | 元素向左浮动 |
| right | 元素向右浮动 |
| none | 元素不浮动(默认值) |
div{
margin: 10px;
padding: 5px;
}
#father{
border: 1px solid red;
}
.layer01{
border: 1px solid black;
display: inline-block;
float: left;
}
.layer02{
border: 1px solid #41e5e5;
display: inline-block;
float: left;
}
.layer03{
border: 1px solid yellow;
display: inline-block;
float: left;
}
.layer04{
border: 1px solid green;
font-size:12px;
display: inline-block;
float:left;
clear: both;
}
/*
clear right; 右侧不允许有浮动元素
clear left; 左侧不允许有浮动元素
clear both; 两侧不允许有浮动元素
clear none;
*/
解决方案:
1、增加父级元素的高度
.father{
border: 1px red solid;
height: 800px;
}
2、增加一个空的div标签,清除浮动
<div class="clear"></div>
.clear{
clear: both;
margin: 0;
padding: 0;
}
3、overflow
在父级元素中增加一个 overflow:hidden;
4、父类添加一个伪类:after
#father:after{
content:'';
dispaly:block;
clear:both;
}
小结:
1.浮动元素后面增加空div
简单,代码中尽量避免空div
2.设置父元素的高度
简单,元素假设有了固定的高度,就会被限制
3.overflow
简单,下拉的一些场景避免使用
4.父类添加一个伪类:after(推荐)
写法稍微复杂一些,但是没有副作用,推荐使用
display
方向不可以控制
float
浮动起来的话会脱离标椎文档流,所以要解决父级边框塌陷的问题
相对定位:position:relative;
相对于原来的位置进行指定的偏移,相对定位的话,它仍然在标椎文档流中,原来的位置会被保留
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
padding:20px;
}
div{
padding: 10px;
margin: 5px;
font-size: 12px;
line-height: 25px;
}
#father{
border: 1px solid #666;
padding:0;
}
#first{
background: red;
border: 1px dashed #25aa44;
position: relative;/*相对定位*/
top: -10px;
left: 5px;
}
#second{
background: blue;
border: 1px dashed #3561d9;
}
#third{
background: yellow;
border: 1px dashed #1c5a68;
}
</style>
</head>
<body>
<div id="father">
<div id="first"> 第一个盒子</div>
<div id="second">第二个盒子</div>
<div id="third">第三个盒子</div>
</div>
</body>
</html>
绝对定位:position: absolute; 基于xxx进行定位,上下左右
1.没有父级元素的前提下,会相对于浏览器定位
2.假设父级元素存在定位,我们通常会相对于父级元素进行偏移
3.在父级元素范围内移动
相对于父级或浏览器的位置,进行指定的偏移,绝对定位的话,它在标准文档流中,原来的位置不会被保留
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
padding: 10px;
margin: 5px;
line-height: 25px;
font-size: 12px;
}
#father{
border: 1px solid #666;
position: relative;
}
#first{
background: #35d8a2;
border: 1px dashed #36ae44;
}
#second{
background: #6372d3;
border: 1px dashed #25ae19;
position: absolute;
left: 100px;
}
#third{
background: #a261ad;
border: 1px dashed #c26678;
}
</style>
</head>
<body>
<div id="father">
<div id="first"> 第一个盒子</div>
<div id="second">第二个盒子</div>
<div id="third">第三个盒子</div>
</div>
</body>
</html>
固定定位:position: fixed;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
height: 1000px;
}
div:nth-of-type(1){/*绝对定位,相对于父级元素或浏览器*/
width: 100px;
height: 100px;
background: red;
position: absolute;
right: 0;
bottom: 0;
}
div:nth-of-type(2){/*fixed,固定定位*/
width: 50px;
height: 50px;
background: yellow;
position: fixed;
right: 0;
bottom: 0;
}
</style>
</head>
<body>
<div>div1</div>
<div>div2</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div id="content">
<ul>
<li><img src="images/bg.jpg" alt=""></li>
<li class="tipText">一枕黄粱梦</li>
<li class="tipBg"></li>
<li>时间:2022-03-11</li>
<li>地点:湖北</li>
</ul>
</div>
</body>
</html>
#content{
width: 380px;
padding: 0;
margin: 0;
overflow: hidden;
line-height: 25px;
font-size: 12px;
border: 1px solid black;
}
ul,li{
list-style: none;
padding: 0;
margin: 0;
}
/*父类元素相对定位*/
#content ul{
position: relative;
}
.tipText,.tipBg{
width: 380px;
height: 25px;
position: absolute;
top: 216px;
}
#tipText{
color: white;
/*z-index: 0;*/
}
#tipBg{
background: black;
opacity: 0.5;/*背景透明度*/
filter:Alpha(opacity=50);/*IE8及其更早版本*/
}
JavaScript 是一种基于对象和事件驱动并具有安全性能的脚本语言 。
JavaScript 官方名称是 "ECMAScript" (ECMA是欧洲电脑商制造协会)。
JavaScript 特点:
Javascript 脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。Javascript 提供了四种基本的数据类型和两种特殊数据类型用来处理数据和文字。而变量提供存放信息的地方,表达式则可以完成较复杂的信息处理。
JavaScript 与 Java 的不同点:
Java代码必须编译才能执行,而JavaScript不需编译,只需浏览器解释执行
Java和JavaScript虽然都可以在服务器与客户端执行,但Java多运行于服务器,而JavaScript多运行于客户端
JavaScript使用的是松散型的数据类型,而Java则使用的是严谨的数据类型
组成一个完整的 JavaScript 是由以下 3 个不同部分组成的:
JavaScript 的历史 (w3school.com.cn)
内部标签
<script></script>
外部引入
<script src = "abc.js"></script>
测试代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 在script标签内写JavaScript代码 -->
<!--<script>
alert('hello,world');
</script>-->
<!-- 外部引入,script标签必须要成对 -->
<script src="js/js.js"></script>
<!-- 不用显示定义type,默认就是 javascript -->
<script type="text/javascript"></script>
</head>
<body>
</body>
</html>
绝大部分语法同Java相同
<script>
//1.定义变量 变量类型(var) 变量名 = 变量值
var score = 5;
//alert(score); 弹窗
//2.条件控制
if (score<60 && score>0){
alert("不及格");
}else if (score<60 && score>0){
alert("及格");
}else {
alert("良好");
}
//console.log(score); 在浏览器的控制台打印变量 相当于sout
</script>
浏览器上的调试
变量
number
js中不区分小数和整数
123 //整数123
123.5 //小数123.5
1.2555e5 //科学计数法
-5213 //负数
NaN //not a number
Infinity //表示无限大
字符串
布尔值
逻辑运算符
&& 全真为真,全假为假
|| 一个为真结果为真
! 真即是假,假即为真
比较运算符
= 赋值
== 等于(类型不一样,值一样也会判断为true)
=== 绝对等于(类型一样,值一样,结果为true)
这是JS的一个缺陷,一定注意不要使用==来比较
注意:
1.NaN==NaN,这个和所有的数值都不相等,包括自己
2.只能通过isNaN(NaN)来判断这个数是否为NaN
null和undefined
数组
对象
对象是大括号,数组是中括号.
每一个属性之间使用逗号隔开,最后一个不需要添加.
var person = {
name : xianglin,
age : 20,
tag: ['js','web','java','....']
}
前提:IEDA需要设置支持es6语法
'use strict' :严格检查模式,预防JavaScript的随意性产生的一些问题
必须写在JavaScript的第一行
局部变量建议使用let去定义
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--
前提:IEDA需要设置支持es6语法
'use strict';严格检查模式,预防JavaScript的随意性产生的一些问题
必须写在JavaScript的第一行
局部变量建议使用let去定义
-->
<script>
'use strict';
let j = 1;
</script>
</head>
<body>
</body>
</html>
正常字符串我们使用单引号或者双引号包裹
注意转义字符
| ' | |
|---|---|
| \n | |
| \t | |
| \u4e2d | \u#### Unicode字符 |
| \x41 | Ascll字符 |
多行字符串编写
'use scrict';
let msg = `你好呀
hello
world`
console.log(msg);
模板字符串
let name = "sunwukong";
let age = 3;
let mes = `你好呀 ${name}`;
字符串长度
console.log(student.length);
字符串的可变性,不可变性
大小写转换
console.log(student.toUpperCase()) //STUDENT
console.log(student.toLowerCase()) //student
student.indexOf(‘t’) 输出t在字符串中的位置
截取字符串
student.substring(1) //从第一个字符串截取到最后一个字符串
student.substring(1,3) //[1,3) 含头不含尾
Array可以包含任意的数据类型
常用方法
长度 //假如给arr.length赋值,数组大小会发生变化,如果赋值过小,元素会丢失
indexOf通过元素获取下标索引
slice() 截取Array的一部分,返回一个新数组,类似于String里的substring
数组尾部添加或弹出:push添加 pop弹出
头部:unshift添加 shift弹出
排序:sort
arr
(3) ["b", "c", "a"]
arr.sort()
(3) ["a", "b", "c"]
元素反转:reverse
(3) ["a", "b", "c"]
arr.reverse()
(3) ["c", "b", "a"]
拼接:concat
arr.concat([1,2,3])
(6) ["c", "b", "a", 1, 2, 3]
arr
(3) ["c", "b", "a"]
注意:concat()并没有修改数据,只是会返回一个新的数组
连接符:join
(3) ["a", "b", "c"]
arr.join('-')
"c-b-a"
多维数组
var arr = [[1,2],[3,4],[5,6]]
undefined
arr[1][1]
4
arr
(3) [Array(2), Array(2), Array(2)]
0: (2) [1, 2]
1: (2) [3, 4]
2: (2) [5, 6]
length: 3
JavaScript中对象,{…}表示一个对象,键值对描述属性 xxx : xxx 多个属性之间使用逗号隔开,最后一个不加逗号
JavaScript中所有的键都是字符串,值是任意对象!
var 对象名 = {
属性名1 : 属性值1,
属性名2 : 属性值2,
属性名3 : 属性值3
}
//定义了一个person对象,它有四个属性
var person = {
name : "xiaoming",
age : 5,
email : "3157043973@qq.com",
score : 60
}
对象赋值
person.age = 76
76
person.age
76
使用一个不存在的属性时,不会报错
person.haha
undefined
动态的删减属性,通过delete删除对象的属性
delete person.score
true
person
{name: "xiaoming", age: 76, email: "3157043973@qq.com"}
动态的添加属性,直接给新的属性添加值即可
person.haha = "haha"
"haha"
person
{name: "xiaoming", age: 76, email: "3157043973@qq.com", haha: "haha"}
判断属性值是否在这个对象中! xxx in xxx
'age' in person
true
//继承
'toString' in person
true
判断一个属性是否是这个对象自身拥有的
person.hasOwnProperty('age')
true
person.hasOwnProperty('jah')
false
if判断
var score = 80;
if (score < 60){
alert("不及格");
}else if (score > 60 && score < 80 ) {
alert("及格");
}else
alert("优秀");
while循环
var age = 3;
while (age<100){
age++;
console.log(age)
}
for循环
for (let i = 0; i < 10; i++) {
console.log(i);
}
for Each循环
var arr = [15,56,1,56,56,25,2,8,47];
arr.forEach(function (value){
console.log(value); //lamdba表达式
})
for…in
var arr = [15,56,1,56,56,25,2,8,47];
for (let number in arr) {
if (arr.hasOwnProperty(number)){
console.log("存在");
console.log(arr[number]);
}
}
ES6的新特性
//ES6 Map
//学生的成绩,学生的名字
//var names = ["tom", "jack", "haha"];
//var scores = [100, 90, 80];
var map = new Map([['tom',100],['jack',90],['haha',80]]);
var name = map.get('tom');//通过key获得value
map.set('admin',123456);//增加或修改
map.delete("tom");//删除
set.add(2);//添加
set.delete(1);//删除
console.log(set.has(3));//是否包含某个元素
ES6新特性
//for of 获取元素值/ for in 获取元素下标
var arr = [3,4,5];
for(let x of arr){
console.log(x)
}
var map = new Map([["tom",100],["jack",90],["haha",80]]);
for(let x of map){
console.log(x)
}
var set = new Set([5,6,7]);
for(let x of set){
console.log(x)
}
定义方式1:
绝对值函数
function abs(x){
if(x>=0){
return x;
}else
return -x;
}
一旦执行到return代表函数结束,直接返回结果。
如果没有执行return,函数执行完也会返回结果,也就是undefined。
定义方式2:
var abs = function(x){
if(x>=0){
return x;
}else{
return -x;
}
}
function(x){…}这是一个匿名函数,但是可以把结果赋值给abs,通过abs就可以调用函数。
方式一和方式二等价!
调用函数
abs(10) //10
abs(-10) //10
参数问题:JavaScript可以传递任意个参数,也可以不传递参数。
参数进来是否存在的问题?
假设不存在参数,应该如何规避?
var abs = function(x){
//手动抛出异常来判断
if(typeof x !== "number"){
throw 'Not a Number';
}
if(x>=0){
return x;
}else{
return -x;
}
}
arguments
arguments是一个JS免费赠送的一个关键字,代表传递进来所有的参数,是一个数组!
var abs = function(x){
console.log("x=>"+x);
for(var i = 0;i < arguments.length;i++){
console.log(arguments[i]);
}
if(x>=0){
return x;
}else{
return -x;
}
}
问题:arguments包含所有的参数,我们有时候想使用多余的参数来进行附加操作,需要排除已有的参数。
rest
if(arguments.length > 2){
for(let i = 2;i<arguments.length;i++){
//。。。
}
}
ES6引入的新特性,获取除了已经定义的参数之外的所有参数
function aaa(a,b,...rest){
console.log("a=>"+a);
console.log("b=>"+b);
console.log(rest);
}
rest参数只能写在最后,必须用…标识。
在JavaScript中,var定义变量实际上是有作用域的。
假设在函数体中声明,则在函数外不可以使用(一定要实现的话可以研究一下闭包)
function xl(){
var x = 1;
x = x + 1;
}
x = x + 2;//Uncaught ReferenceError: x is not defined
如果两个函数使用了相同的变量名,只要在函数内部就不会冲突
function xl(){
var x = 1;
x = x + 1;
}
function xl2(){
var x = 'A';
x = x + 1;
}
内部函数可以访问外部函数的成员,反之不行
function xl(){
var x = 1;
function xl2(){
var y = x + 1;//2
}
var z = y + 1;//Uncaught ReferenceError: y is not defined
}
假设内部函数和外部函数的变量重名
function xl(){
var x = 1;
function xl2(){
var x = 'A';
console.log('inner'+x);//innerA
}
console.log('outer'+x);//outer1
xl2();
}
xl();
假设在JavaScript中函数查找变量从自身函数开始,由”内“向”外“查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量。
提升变量的作用域
function xl(){
var x = 'x' + y;
console.log(x);
var y = 'y';
}
xl();
结果:xundefined
说明:JavaScript执行引擎,自动提升了y的声明,但是不会提升y变量的赋值
全局函数
//全局变量
var x = 1;
function a(){
console.log(x);//1
}
a();
console.log(x);//1
全局对象
var x = 'xxx';
alert(x);
alert(window.x);//默认所有的全局变量,都会自动绑定在window对象下
alert()这个函数本身也是一个window对象
var x = 'xxx';
window.alert(x);
var old_alert = window.alert;
//old_alert(x);//使用old_alert(x)也可以成功输出
window.alert(123);
window.alert = function(){
}
window.alert(123);//alert失效了
window.alert = old_alert;//恢复
window.alert(456);
JavaScript实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,就会报错RefrenceError
规范
由于我们所有的全局变量都会绑定到window上,如果不同的js文件,使用了相同的全局变量,就会发生冲突,如何减少冲突?
var xiangApp = {};//唯一全局变量
xiangApp.name = 'xianglin';//定义全局变量
xiangApp.add = function(a,b){
return a + b;
}
将自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突的问题。
局部作用域
function aaa(){
for(var i = 0; i < 100; i++){
console.log(i);
}
console.log(i+1);//101 问题:i出了for循环的作用域还可以使用
}
ES6关键字let,去定义局部作用域的变量;
function bbb(){
for(let i = 0; i < 100; i++){
console.log(i);
}
console.log(i+1);//Uncaught ReferenceError: i is not defined
}
建议以后使用let去定义局部作用域的变量
在ES6之前,怎么定义常量:只要全部用大写字母命名的变量就是常量;
var PI = '3.14';
console.log(PI);//3.14
PI = '123';//可以随意修改这个常量
console.log(PI);//123
在ES6中引入了关键字const
const PI = '3.14';//只读常量
console.log(PI);
PI = '123';
console.log(PI);//Uncaught TypeError: Assignment to constant variable.
定义方法
就是把函数放在对象的里面,对象里只有两个东西:属性和方法
var zhangsan = {
name : '张三',
birth : 2000,
age : function () {
let now = new Date().getFullYear();
return now - this.birth;
}
}
//属性
zhangsan.name
//方法,一定要带()
zhangsan.age()
this.代表着什么?拆开上面的代码看看
function getAge() {
let now = new Date().getFullYear();
return now - this.birth;
}
var zhangsan = {
name : '张三',
birth : 2000,
age : getAge()
}
//zhangsan.age() //ok
//getAge() //NaN window对象中没有birth
this是无法指向的,是默认指向调用它的那个对象
apply
在JavaScript中可以使用apply控制this指向
function getAge() {
var now = new Date().getFullYear();
return now - this.birth;
}
var zhangsan = {
name : '张三',
birth : 2000,
age : getAge
}
zhangsan.age();//主动调用
getAge.apply(zhangsan,[]); //被动调用,this指向了zhangsan,参数为空
var data = new Date();
data.getFullYear();//年份
data.getMonth();//月份 0~11
data.getDate();//天
data.getDay();//星期几
data.getHours();//小时
data.getMinutes();//分钟
data.getSeconds();//秒
data.getTime();//时间戳
console.log(data = new Date(1616589902676));//转为标准时间
data = new Date(1616589902676)
Wed Mar 24 2021 20:45:02 GMT+0800 (中国标准时间)
data.toLocaleDateString(); //"2021/3/24"
data.toGMTString(); //调用方法
//"Wed, 24 Mar 2021 12:45:02 GMT
什么是JSON
早期所有数据传输习惯使用XML文件!
格式:
对象都用{}
数组都用[]
所有的键值对都是用 key:value
var user = {
name:'zhangsan',
age:3,
sex:'男'
}
//对象转化为json字符串 {"name":"zhangsan","age":3,"sex":"男"}
var jsonUser = JSON.stringify(user);
console.log(jsonUser);
//转换字符串为对象
var obj = JSON.parse('{"name":"zhangsan","age":3,"sex":"男"}');
//{name: "zhangsan", age: 3, sex: "男"}
JSON和对象的区别
var obj = {a:'hello',b:'hellob'};
var json = '{"a":"hello","b":"hellob"}';
JavaScript、Java、c#…面向对象编程;JavaScript有何区别
类:模板
对象:具体的实例
在JavaScript这个需要大家换一下思维方式
原型:
var Student = {
name:"xaioming",
age : 3,
run : function () {
console.log(this.name+" run....");
}
}
var xiaozhang = {
name: "xiaozhang"
}
//原型对象
xiaozhang.__proto__ = Student;
var bird = {
fly : function () {
console.log(this.name+" fly....");
}
};
//小张的原型是Student
xiaozhang.__proto__ = bird;
function Student(name) {
this.name = name;
}
//给Student新增一个方法
Student.prototype.hello = function () {
alert("hello");
};
class关键字,是在ES6引入的
1、定义一个类,属性、方法
//定义一个学生的类
class Student{
constructor(name) {
this.name = name;
}
hello (){
alert("hello");
}
}
var xaioming = new Student("xiaoming");
var xaiohong = new Student("xiaohong");
xaioming.hello();
2、继承
class Student{
constructor(name) {
this.name = name;
}
hello (){
alert("hello");
}
}
class xiaoStudent extends Student{
constructor(name,grade) {
super(name);
this.grade = grade;
}
MYGrade(){
alert("我是一名小学生")
}
}
var xiaoming = new Student("xiaoming");
var xiaohong = new xiaoStudent("xiaohong,1");
xiaoming.hello();
本质:查看对象原型
浏览器介绍
JavaScript和浏览器之间的关系?
JavaScript诞生就是为了能够让它在浏览器中运行
BOM:浏览器对象模型
三方浏览器:QQ浏览器,360浏览器,UC浏览器等
window代表浏览器窗口
window.alert("123")
undefined
window.innerHeight
760
window.innerWidth
491
window.outerHeight
864
window.outerWidth
1536
//通过window获得浏览器窗口大小
Navigator封装了浏览器的信息
navigator.appName
"Netscape"
navigator.appVersion
"5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
navigator.userAgent
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
navigator.platform
"Win32"
大多数时候,我们不会使用navigator对象,因为会被人为修改!
不建议使用这些属性来判断和编写代码
代表屏幕尺寸
screen.width
1920 px
screen.height
1080 px
location代表当前页面的URL信息
location.host "www.baidu.com" //主机
location.href "https://www.baidu.com/" //当前指向的位置
location.protocol "https:" //协议
location.reload //刷新网页
//设置新的地址
location.assign('https://www.kuangstudy.com/')
document代表当前的页面,HTML DOM文档树
document.title
"百度一下,你就知道"
document.title='666'
"666"
获取具体的文档树节点
<dl id="app">
<dt>javaSE</dt>
<dt>javaEE</dt>
<dt>javaME</dt>
</dl>
<script>
var dl = document.getElementById('app');
</script>
获取cookie
document.cookie
"_uuid=ABB41E69-8A2D-5C9E-91F8-535FE6C5368696306infoc; buvid3=1E000DC4-7833-4DFC-9F80-ACB1E118A758138376infoc; sid=6m3ndo5f; CURRENT_FNVAL=80; blackside_state=1; rpdid=|(um|RYku~um0J'uY||)Y~Rul"
劫持cookie原理
www.taobao.com
<script src="aa.js"></script>
<!--恶意人员:获取你的cookie上传到他的服务器-->
服务器可以设置cookie:httpOnly
history代表浏览器的历史纪录
history.back()//后退
history.forward()//前进
核心
浏览器网页就是一个DOM树形结构
更新:更新DOM节点
遍历DOM节点:得到DOM节点
删除:删除一个DOM节点
添加:添加一个DOM节点
要操作一个DOM节点,就必须先获得这个DOM节点
//对应CSS选择器
var h1 = document.getElementsByTagName("h1");
var p1 = document.getElementById("p1");
var p2 = document.getElementsByClassName("p2");
var father = document.getElementById("father")
var children = father.children;//获取父节点下的所有子节点
//father.lastChild;
//father.firstChild;
这是原生代码,之后我们尽量都使用jQurey
<div id="d1"></div>
<script>
var d1 = document.getElementById("d1");
</script>
操作文本:
d1.innerText = “123” 修改文本的值
d1.innerHTML = ‘<strong>123</strong>’ 可以解析HTML文本标签
操作css:
d1.style.color = 'red' //属性使用 字符串包裹
d1.style.fontSize = '20px' // - 转 驼峰命名问题
d1.style.padding = "2em"
删除节点的步骤: 先获取父节点,通过父节点删除自己
<div>
<h1>标题一</h1>
<p id='p1'>p1</p>
<p class='p2'>p2</p>
</div>
<script>
var self = document.getElementByID('p1');
var father = p1.parentElement; //找到p1的父节点
father.removechild(self) //通过父节点使用removechild删掉自己(只有标记为id选择器的节点才可以删除)
</script>
注意:删除是一个动态的过程,删除多个节点时,children是在时刻变化的,删除节点时一点要注意!
我们获得了某个Dom节点,假设这个Dom节点是空的,我们会通过innterHTML就可以增加一个元素,但是如果这个Dom节点已经存在元素了,我们就不能这样干了,会产生覆盖!
追加:
<p id="js">JavaScript</p>
<div id="list">
<p id="se">JavaSE</p>
<p id="ee">JavaEE</p>
<p id="me">JavaME</p>
</div>
<script>
var js = document.getElementById("js");
var list = document.getElementById("list")
list.append(js); //追加节点到后面
</script>
<script>
var js = document.getElementById("js");//已经存在的节点
var list = document.getElementById("list")
list.append(js);
var newP = document.createElement("p");//创建一个p标签
newP.id = 'newP';
newP.innerText = 'sunwukong';
list.appendChild(newP);
var myScript = document.createElement("script");//创建一个标签节点
myScript.setAttribute('type',"text/javascript");
var body = document.getElementsByTagName("body");
//body[0].setAttribute('style','backgroundColor = \'#32a356')
//body[0].style.backgroundColor = '#32a356';
//创建一个style标签
var myStyle = document.createElement("style");
myStyle.setAttribute('type','text/css');
myStyle.innerText = 'body{background-color:#000000}';//设置标签内容
document.getElementsByTagName('head')[0].append(myStyle);
</script>
<script>
let ee = document.getElementById('ee');
let js = document.getElementById('js');
let list = document.getElementById('list');
//要包含的节点.insertBefore(newNode,targetNode)
list.insertBefore(js,ee);
/*
JavaSE
JavaScript
JavaEE
JavaME
*/
</script>
<form action="#" method="post">
<p>
<span>用户名:</span> <input type="text" id="username">
</p>
<!--多选框的值,就是定义好的value -->
<p>
<span>性别:</span>
<input type="radio" name="sex" value="man" id="boy"> 男
<input type="radio" name="sex" value="woman" id="girl"> 女
</p>
</form>
<script>
var input_text = document.getElementById("username");
var boy_radio = document.getElementById('boy');
var girl_radio = document.getElementById('girl');
//得到输出框的值
input_text.value
//修改输入框的值
input_text.value = '123'
//对于单选框,多选框等固定的值,boy_radio.value只能取到当前的值
boy_radio.checked;//查看返回的结果是否为true,如果为true,则代表选中
boy_radio.checked = true;//赋值
</script>
<script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
<!--
表单绑定提交事件
onsubmit=绑定一个提交检测的函数,true,flase
将这个结果返回给表单,使用onsubmit接收!
onsubmit="return aaa()"
-->
<form action="https://www.baidu.com/" method="post" onsubmit="return aaa()">
<p>
<span>用户名: </span> <input type="text" id="username" name="username">
</p>
<p>
<span>密码: </span> <input type="password" id="input-password" >
</p>
<input type="hidden" id="md5-password" name="password">
<!--绑定事件 onclick 被点击-->
<button type="submit">提交</button>
</form>
<script>
function aaa() {
alert(1);
var uname = document.getElementById('username');
var pwd = document.getElementById('input-password');
var md5pwd = document.getElementById('md5-password');
md5pwd.value = md5(pwd.value);
//可以校验判断表单内容,true就是通过提交,false就是阻止提交
return true;
}
</script>
jQuery库:里面存在大量的JavaScript函数
公式:$(selector).action()
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>-->
<script src="lib/jquery-3.6.0.js"></script>
</head>
<body>
<a href="" id="test-jquery">点我</a>
<script>
//公式:$(selector).action()
//选择器就是CSS的选择器
$('#test-jquery').click(function () {
alert('666');
})
</script>
</body>
</html>
<script>
//原生js,选择器少,麻烦不好记
//标签
document.getElementsByTagName();
//id
document.getElementById();
//类
document.getElementsByClassName();
//jQuery css里的选择器它都能用!!!
$('p').click(); //标签选择器
$('#id').click();//id选择器
$('.class').click();//class选择器
</script>
文档工具站:https://jquery.cuishifeng.cn
<!DOCTYPE html>
<html lang = "en">
<head>
<title>Title</title>
<script src="lib/jquery-3.6.0.min.js"></script>
<style>
#divMove{
width: 500px;
height: 500px;
border: 1px solid red;
}
</style>
</head>
<body>
<!--要求:获取鼠标当前的一个坐标-->
mouse:<span id="mouseMove"></span>
<div id="divMove">
在这里移动鼠标试试
</div>
<script>
//当网页元素加载完毕后,响应事件
$(function (){
$('#divMove').mousemove(function (e){
$('#mouseMove').text('x:'+e.pageX + ' y'+e.pageY)
});
});
</script>
</body>
</html>
<ul id="test-ul">
<li class="js">JavaScript</li>
<li name="python">Python</li>
</ul>
$('#test-ul li[name=python]').text();// 获得值
$('#test-ul li[name=python]').text('Python');// 设置值
$('#test-ul').html();// 获得值
$('#test-ul').html('<strong>123</strong>');// 设置值
$('#test-ul li[name=python]').css('color','red');
display : none// 元素的显示
$('#test-ul li[name=python]').show();
// 元素的隐藏
$('#test-ul li[name=python]').hide();
$(window).width()
$(window).height()
$('#test-ul li[name=python]').toggle();
Vue是一套用于构建用户界面的前端框架
MVVM是Vue实现数据驱动视图和双向数据绑定的核心原理。MVVM指的是Model数据源、View视图、ViewModel就是Vue实例。
当前,vue 共有 3 个大版本
https://microsoftedge.microsoft.com/addons/detail/vuejs-devtools/olofadcdnkkjdfgjcmjaadnlehnnihnl
3.3、使用 vue-devtools 调试 vue 页面
指令(Directives)是 vue 为开发者提供的模板语法,用于辅助开发者渲染页面的基本结构。
vue 中的指令按照不同的用途可以分为 6 大类:
内容渲染指令
v-text:缺点:会覆盖元素内部原有的内容!
{{ }}(专业名称:插值表达式):在实际开发中用的最多,只是内容的占位符,不会覆盖原有的内容!
插值表达式只能用在元素的内容节点中,不能用在元素节点中!
v-html:可以把带有标签的字符串,渲染成真正的HTML内容!
属性绑定指令
v-bind:简写为:事件绑定指令
v-on:简写为@$event应用场景:如果默认的事件对象e被覆盖了,则可以手动传递一个$event
<button @click="add(3,$event)"></button>
methods: {
add(n, e) {
this.count += n;
},
},
| 事件修饰符 | 说明 |
|---|---|
| .prevent | 阻止默认行为(列如:阻止a链接的跳转,阻止表单的提交等) |
| .stop | 阻止事件冒泡 |
按键修饰符
<input @keyup.enter="xxx">
双向绑定指令
v-model:辅助开发者在不操作DOM的前提下,快速获取表单的数据
| 修饰符 | 作用 | 示例 |
|---|---|---|
| .number | 自动将用户的输入值转为数值类型 | |
| .trim | 自动过滤用户输入的首尾空白字符 | |
| .lazy | 在‘change’时而非‘input’时更新 |
条件渲染指令 :辅助开发者按需控制DOM的显示与隐藏
1、如果要频繁的切换元素的显示状态,用v-show性能会更好,反之,用v-if
2、在实际开发中,大多数情况不用考虑性能问题,直接使用v-if
v-show:原理:动态为元素添加或移除display:none样式,来实现元素的显示或隐藏
v-if:原理:每次动态创建或移除元素,实现元素的显示或隐藏
<div v-if="xxx"></div>
<div v-else="xxx"></div>
<div v-if="xxx"></div>
<div v-else-if="xxx"></div>
<div v-else-if="xxx"></div>
<div v-else></div>
列表渲染指令
v-for:辅助开发者基于一个数组来循环渲染一个列表结构。语法结构:item in items
data:{
list:[
{id:1,name:'zs'},
{id:2,name:'ls'},
]
}
//-------分割线--------
<ul>
<li v-for="(item,index) in list" :key="id">索引是{{index}},姓名是{{item.name}}</li>
</ul>
过滤器(Filters)是 vue 为开发者提供的功能,常用于文本的格式化。过滤器可以用在两个地方:插值表达式 和 v-bind 属性绑定。
过滤器应该被添加在JavaScript表达式的尾部,由“管道符”进行调用,示例代码如下:
<!--在双花括号中通过“管道符”调用 capitalize 过滤器,对message 的值进行格式化-->
<p>{{ message | capitalize }}</p>
<!--在 v-bind 中通过“管道符”调用 formatId 过滤器,对 rawId 的值进行格式化 -->
<div v-bind:id="rawId | formatId"></div>
在filters节点下定义的过滤器,称为“私有过滤器”,因为它只能在当前vm实例所控制的el区域内使用。
如果希望在多个vue 实例之间共享过滤器,则可以按照如下的格式定义全局过滤器:
<!--全局过滤器 -独立于每个vm实例之外-->
<!--Vue.filter()方法接收两个参数-->
<!--第1个参数,是全局过滤器的“名字”-->
<!--第2 个参数,是全局过滤器的"处理函数”-->
Vue.filter('capitalize', function(str){
return str.charAt(0).toUpperCase()+str.slice(1)
})
过滤器的注意点
1.要定义到filters节点下,本质是一个函数
2.在过滤器函数中,一定要有return值
3.在过滤器的形参中,就可以获取到“管道符”前面待处理的那个值
4.如果全局过滤器和私有过滤器名字一致,此时按照“就近原则”,调用的是“私有过滤器”
过滤器可以串联地进行调用,例如:
<!--把 message 的值,交给 filterA 进行处理-->
<!--把 filterA 处理的结果,再交给 filterB 进行处理-->
<!--最终把 filterB处理的结果,作为最终的值渲染到页面上-->
{{ message | filterA | filterB }}
过滤器的本质是JavaScript函数,因此可以接收参数,格式如下:
<!-- arg1 和 arg2 是传递给 filterA 的参数 -->
<p>{{ message | filterA(arg1, arg2) }}</p >
//过滤器处理函数的形参列表中:
//第一个参数:永远都是“管道符“前面待处理的值
//从第二个参数开始,才是调用过滤器时传递过来的 arg1 和 arg2 参数
Vue.filter('filterA', (msg, arg1, arg2) => (
//过滤器的代码逻辑...
})
过滤器的兼容性
过滤器仅在vue 2.x和1.x中受支持,在vue 3.x的版本中剔除了过滤器相关的功能。
在企业级项目开发中:
watch侦听器允许开发者监视数据的变化,从而针对数据的变化做特定的操作。
语法格式如下:
const vm = new Vue({
el:'#app',
data:{ username:''},
watch:{
//监听 username 值的变化
//newVal 是“变化后的新值”,oldVal 是“变化之前的旧值”
username(newWal,oldVal){
console.log(newVal,oldVal)
}
}
})
监听username值的变化,并使用axios发起Ajax请求,检测当前输入的用户名是否可用:
watch:{
//监听 username 值的变化
async username(newVal){
if (newVal === '') return
//使用 axios 发起请求,判断用户名是否可用
const { data: res } =await axios.get('https://www.escook.cn/api/finduser/'+newVal)
console.log(res)
}
}
1.方法格式的侦听器
2.对象格式的侦听器
immediate选项
watch:{
//定义对象格式的侦听器
username:{
//侦听器的处理函数,hander是固定写法,当username的值发生变化时触发
handler(newVal,oldVal){
console.log(newVal,oldVal)
},
// immediate 选项的默认值是 false
// immediate 的作用是:控制侦听器是否自动触发一次!
immediate: true
}
}
3.监听对象单个属性的变化
const vm = new Vue({
el:'#app',
data:{
info:{ username:'admin'}
},
watch:{
'info.username':{
handler(newVal){
console.log(newVal)
}
}
)
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO
我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U
这太简单了,太荒谬了,我在任何地方都找不到关于它的任何信息,包括API文档和Rails源代码:我有一个:belongs_to关联,我开始理解当您没有关联时您在Controller中调用的正常模型方法与您有关联时调用的方法略有不同。例如,我的关联在创建Controller操作时运行良好:@user=current_user@building=Building.new(params[:building])respond_todo|format|if@user.buildings.create(params[:building])#etcetera但我找不到关于更新如何工作的文档:@user
我正在使用Ruby/Mechanize编写一个“自动填写表格”应用程序。它几乎可以工作。我可以使用精彩CharlesWeb代理以查看服务器和我的Firefox浏览器之间的交换。现在我想使用Charles查看服务器和我的应用程序之间的交换。Charles在端口8888上代理。假设服务器位于https://my.host.com。.一件不起作用的事情是:@agent||=Mechanize.newdo|agent|agent.set_proxy("my.host.com",8888)end这会导致Net::HTTP::Persistent::Error:...lib/net/http/pe
升级到OSXYosemite后,我现有的pow.cx安装不起作用。升级到最新的pow.cx无效。通过事件监视器重新启动它也没有成功。 最佳答案 卸载(!)并重新安装解决了这个问题。curlget.pow.cx/uninstall.sh|shcurlget.pow.cx|sh 关于ruby-on-rails-OSXYosemite更新破坏了pow.cx,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q
我们在Ubuntu14.04和Gitlab9.3.7上运行,运行良好。我们正在尝试更新到Gitlabv9.3.8的最新安全补丁,但它给我们这个错误:Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension.currentdirectory:/home/git/gitlab/vendor/bundle/ruby/2.3.0/gems/re2-1.0.0/ext/re2/usr/local/bin/ruby-r./siteconf20170720-19622-15i0edf.rbextconf.rbcheckingformain(
我遇到了以下问题。我有一个名为user的模型,它有一个名为activated的列。我试图通过激活的方法更新该值?但它给我错误:验证失败:密码不能为空,密码太短(最少6个字符)这对我来说没有意义,因为我没有接触密码字段!我只想更新激活的列。我把我认为相关的代码放在这里,但如果你认为你需要更多,请问:)非常感谢您!型号:attr_accessor:passwordattr_accessible:name,:email,:password,:password_confirmation,:activatedhas_many:sucu_votesemail_regex=/\A[\w+\-.]+@