本文被 系统学习JavaWeb 收录,点击订阅

写在前面

 大家好,我是黄小黄!经过上一篇 从Html入门JavaWeb 的学习,想必大家对标签都有了一定的认识。本文将通过案例,讲解CSS与JavaScript的基础知识,文章内容比较长,耐心看完哦~ 点击目录,可以跳转对应的知识点。


文章目录

  • 写在前面
  • 1 CSS技术
    • 1.1 CSS概述及语法规则
    • 1.2 CSS与HTML的组合使用
    • 1.3 CSS选择器
      • 1.3.1 标签名选择器
      • 1.3.2 id选择器
      • 1.3.3 class类选择器
      • 1.3.4 组合选择器
    • 1.4 CSS常用样式
  • 2 JavaScript技术
    • 2.1 JavaScript简介
    • 2.2 Javascript与html结合使用
    • 2.3 变量及数据类型
    • 2.4 关系与逻辑运算
    • 2.5 数组
    • 2.6 函数与隐形参数
    • 2.7 Javascript的自定义对象
    • 2.8 JS中的事件
      • 2.8.1 事件注册
      • 2.8.2 onload事件
      • 2.8.3 onclick事件
      • 2.8.4 onblur事件
      • 2.8.5 onchange事件
      • 2.8.6 onsubmit事件
    • 2.9 DOM模型与Document对象
      • 2.9.1 简介与说明
      • 2.9.2 Document对象中常用方法
      • 2.9.3 案例:验证用户名
    • 2.10 正则表达式对象
  • 写在最后

1 CSS技术

1.1 CSS概述及语法规则

CSS是层叠样式表单,用于增强控制网页样式并允许将样式信息与网页内容分离的一种标记语言。

CSS的语法规则如下:

  • 选择器: 浏览器根据“选择器”决定受CSS样式影响的HTML元素(标签);
  • 属性: property,指你需要改变的样式名,并且每个属性都有一个值。属性和值被冒号分开,并由花括号包围,这样就组成了一个完整的样式声明(declaration);
  • 多个声明: 如果定义的不止一个声明,则需要使用分号将每个声明分开。

1.2 CSS与HTML的组合使用

1️⃣ 在标签的style属性上设置"key:value value;",修改标签样式。

分别定义两个div、span标签,并修改每个 div 标签的样式为:边框1个像素,实线,蓝色。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div style="border: 1px solid blue;">div标签1</div>
<div style="border: 1px solid blue;">div标签2</div>
<span>span标签1</span>
<span>span标签2</span>
</body>
</html>


看代码可知,第一种方式有如下缺点:

  1. 如果标签多,样式也多,则代码量就会更多;
  2. 可读性非常差;
  3. css代码没有体现出复用性。

2️⃣ 在head标签中,使用style标签来定义自己需要的css样式
格式如下:

xxx {Key : value value;
}

分别定义两个div、span标签,并修改每个 div 标签的样式为:边框1个像素,实线,蓝色。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><!-- style标签专门用来定义css样式代码 --><style type="text/css">div {border: 1px solid blue;}</style>
</head>
<body>
<div>div标签1</div>
<div>div标签2</div>
<span>span标签1</span>
<span>span标签2</span>
</body>
</html>

上述的代码实现了第一个案例的需求,且style部分的代码对所有div标签都有效果。但是,仍然存在局限性:

  1. 只能在一个页面内复用代码,不能在多个页面中复用css代码;
  2. 维护起来不方便,实际项目中会有成千上万的页面,工作量太大。

3️⃣ 把css样式写成一个单独的css文件,再通过link标签引用即可实现复用
格式如下:

<link rel="stylesheet" type="text/css" href="css文件路径"/>

实现上述需求的代码如下:
test.css

div {border: 1px solid blue;
}

1-css.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" type="text/css" href="test.css"/>
</head>
<body>
<div>div标签1</div>
<div>div标签2</div>
<span>span标签1</span>
<span>span标签2</span>
</body>
</html>

1.3 CSS选择器

1.3.1 标签名选择器

标签名选择器的格式如下:

标签名 {属性: 值;
}

标签名选择器,可以决定哪些标签被动的使用哪些样式。

在所有的div标签上修改字体颜色为红色,字体大小为20像素,边框为1像素蓝色实线;
修改所有span标签的字体颜色为绿色,边框为1像素黑色虚线。

css

div {border: 1px solid blue;color: red;font-size: 20px;
}
span {border: 1px dashed black;color: green;
}

html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" type="text/css" href="test.css"/>
</head>
<body>
<div>div标签1</div>
<div>div标签2</div>
<span>span标签1</span>
<span>span标签2</span>
</body>
</html>

1.3.2 id选择器

id选择器的格式如下:

#id 属性值 {属性: 值;
}

id选择器,可以让我们通过id属性选择性的去使用样式。

分别定义两个div标签,第一个div标签定义id为id001,然后根据id属性定义css样式,修改字体为红色;
第二个div标签定义id为id002,然后根据id属性定义css样式,修改字体颜色为紫色,并且字体大小为50像素。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>#id001 {color: red;}#id002 {color: purple;font-size: 50px;}</style>
</head>
<body>
<div id="id001">id001的div标签</div>
<div id="id002">id002的div标签</div>
</body>
</html>

1.3.3 class类选择器

class类型选择器的格式如下:

.class 属性值 {属性: 值;
}

class类型选择器,可以通过class属性,有效的选择性的去使用样式。

(1)修改class属性值为class01的span或div标签,字体颜色为蓝色,字体大小为25像素。边框为黄色1像素实线;
(2)修改class属性值为class02的div标签,字体颜色为黄色。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>.class01 {color: blue;font-size: 25px;border: 1px solid yellow;}.class02 {color: yellow;}</style>
</head>
<body>
<div class="class01">class01 div</div>
<div class="class02">class02 div</div>
<span class="class01">class01 span</span>
</body>
</html>

1.3.4 组合选择器

组合选择器的格式如下:

选择器1, 选择器2, 选择器n{属性: 值;
}

组合选择器可以让多个选择器共用css代码。

1.4 CSS常用样式

  • 字体颜色
    color: red;
    可以写颜色名:red、blue等,也可以使用rgb值和十六进制数表示,如rgb(255,0,0),#00F6DE。

  • 背景颜色
    background-color: #0F2D4C;

  • 字体样式
    color:#FF0000; 字体颜色
    font-size: 20px; 字体大小

  • 像素实线边框,红色
    border: 1px solid red;

  • DIV居中
    margin-left: auto;
    margin-right: auto;

  • 文本居中
    text-align:center;

  • 超链接去下划线
    text-decoration:none;

  • 表格细线

table {border: 1px solid black; /*设置边框*/border-collapse: collapse; /*将边框合并*/
}
td,th {border: 1px solid black; /*设置边框*/
}
  • 列表去除修饰
ul {list-style: none;
}

2 JavaScript技术

2.1 JavaScript简介

Javascript语言的诞生主要是为了完成页面的数据验证。因此它运行在客户端,需要运行浏览器来解释执行Javascript的代码。
JS是弱类型,Java是强类型。

弱类型即类型可变,类型转换规则不明显;
强类型就是在定义变量的时候,类型已经确定,不可变。

Javascript的特点:

  1. 交互性(信息的动态交互)
  2. 安全性(不允许直接访问本地硬盘)
  3. 跨平台性(只要是可以解释JS的浏览器都可以执行,与平台无关)

2.2 Javascript与html结合使用

1️⃣ 只需要在 head 标签中,或者在 body 标签中,使用 script 标签来书写 JavaScript 代码。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript">// alert是Javascript语言的一种警告框函数// 可以接收任意类型的参数, 作为警告框中的信息alert("Hello, JavaScript!!!");</script>
</head>
<body></body>
</html>

2️⃣ 使用 script 标签引入单独的 Javascript 文件。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><!-- 现在需要使用 script 引入外部 js 文件并执行src 属性用来引入 js 文件路径--><script type="text/javascript" src="test.js"></script>
</head>
<body></body>
</html>

一个script标签既可以用来定义js代码,也可以用于引入js文件。但是,两个功能只能生效一个,也就是一个script标签不能同时实现两个功能。

2.3 变量及数据类型

Javascript中的数据类型有:

  • 数值类型:int、short、float、double、byte;
  • 字符串类型:String
  • 对象类型:object;
  • 布尔类型:boolean;
  • 函数类型:function;

Javascript里的特殊值:

  • undefined:未定义,所有js变量未赋予初始值的时候,默认都是undefined。
  • null:空值;
  • NAN:全称是:Not a Number,非数字、非数值。

定义变量的格式如下:

var 变量名;
var 变量名 = 值;

2.4 关系与逻辑运算

关系运算

  • 等于:== (字面值的比较)
  • 全等于:=== (除了字面值,数据类型也要相同)
  • 其它(与Java一样):>,<,>=,<=,!=

全等于与等于的区别:

var a = 10;
var b = "10";
alert(a == b);  // true
alert(a === b);  // false

逻辑运算

  • 且运算:&&
  • 或运算:||
  • 取反运算:!

在Javascript中,所有的变量,都可以做为一个boolean类型的变量去使用。
0、null、undefined、“”(空串)都认为是false。

&&且运算
(1)当表达式全为真,返回最后一个表达式的值;
(2)当表达式中,有一个为假,返回第一个为假的表达式的值。
|| 或运算
(1)当表达式全为假时,返回最后一个表达式的值;
(2)只要有一个表达式为真,就会把第一个真的表达式的值返回。

2.5 数组

JS中数组的定义方式如下:

var 数组名 = []; //空数组
var 数组名 = [1, true, 'abc']; //定义数组时赋值

案例如下:

var arr = []; //定义一个空数组
alert(arr.length); //0arr[0] = 10;
alert(arr.length); //1arr[2] = 12;
alert(arr.length); //3alert(arr[1]); //undefined

JavaScript中,通过数组下标赋值后,最大的下标值会自动给数组扩容。未赋值的部分,为undefined。

数组的遍历依然可以使用循环来实现:

for(var i = 0; i < arr.length; i++){alert(arr[i]);
}

2.6 函数与隐形参数

1️⃣ 可以使用function关键字定义函数:

function 函数名(形参列表){函数体
}

如果需要定义带有返回值的函数,只需要在函数体内直接使用return语句返回值即可。

2️⃣ 也可以将函数名提前:

var 函数名 = function(形参列表){函数体}

在Java中函数允许重载,但是,在JS中函数的重载会直接覆盖上一次的定义!

函数的arguments隐形参数(只在function函数内)
在function函数中不需要定义,却可以直接用来获取所有参数的变量。
比较像java中的可变参数:

public void fun(Object... args){}

使用方式类似数组,JS中的隐形参数与此类似:

function fun(){alert(arguments.length); //查看参数个数//取值alert(arguments[0]);alert(arguments[1]);alert(arguments[2]);
}

2.7 Javascript的自定义对象

Object形式的自定义对象
对象的定义:

var 变量名 = new Object(); //对象实例
变量名.属性名 = 值; //定义一个属性
变量名.函数名 = function(){} //定义一个函数

对象的访问:

变量名.属性名/函数名;

{ }形式的自定义对象

var 变量名 = { //空对象属性名: 值, //定义一个属性属性名: 值, //定义一个属性函数名: function(){} //定义一个函数
};

2.8 JS中的事件

事件是电脑输入设备与页面进行交互的响应。

常用的事件如下:

  • onload 加载完成事件
  • onclick 点击事件
  • onblur 失去焦点事件
  • onchange 内容发生改变事件
  • onsubmit 表单提交事件

2.8.1 事件注册

什么是事件注册(绑定)?

其实就是告诉浏览器,当事件响应后要执行哪些操作代码。

事件的注册分为静态注册和动态注册两种

  • 静态注册: 通过html标签的事件属性直接赋予事件响应后的代码;
  • 动态注册: 指先通过JS代码得到标签的dom对象,然后通过 dom 对象.事件名 = function(){} 这种形式赋予事件响应后的代码。

2.8.2 onload事件

onload事件是浏览器在解析完页面后就会自动触发的事件。 页面加载完成后,常用于做页面js代码的初始化操作。

静态注册onload事件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript">//onload事件方法function onloadFun(){alert('静态注册onload事件...');}</script>
</head>
<body onload="onloadFun()"></body>
</html>


动态注册onload事件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript">//动态注册onload事件是固定写法window.onload = function (){alert('静态注册onload事件...');}</script>
</head>
<body></body>
</html>

2.8.3 onclick事件

常用于按钮的点击响应操作,以按钮示例
静态注册方式:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript">function onclickFun(){alert('onclick事件');}</script>
</head>
<body>
<button onclick="onclickFun()">按钮</button></body>
</html>

动态注册方式:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript">window.onload = function (){//1.获取标签对象var elementById = document.getElementById("bt01");//2.通过标签对象.事件名 = function(){}elementById.onclick = function (){alert("onclick事件");}}</script>
</head>
<body>
<button id="bt01">按钮</button></body>
</html>

2.8.4 onblur事件

即失去焦点事件,常用于输入框失去焦点后验证其输入内容是否合法。

静态注册方式:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript">//静态注册失去焦点事件function onblurFun(){//console是控制台对象,是由JavaScript语言提供//专门用来向浏览器的控制器打印输出,用于测试使用//log()是打印的方法console.log("失去焦点事件");}</script>
</head>
<body>
用户名:<input type="text" onblur="onblurFun()"><br/>
密&emsp;码:<input type="password"><br/>
</body>
</html>

动态注册方式:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript">window.onload = function (){//1.获取标签对象var elementById = document.getElementById("username");//2.对象.事件elementById.onblur = function (){console.log("失去焦点事件");}}</script>
</head>
<body>
用户名:<input type="text" id="username"><br/>
密&emsp;码:<input type="password"><br/>
</body>
</html>

2.8.5 onchange事件

即内容发生改变事件,常用于下拉列表和输入框内容发生改变后操作。

静态注册方式:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript">function onchangeFun(){alert("选择发生变化");}</script>
</head>
<body>
请选择你最喜欢的动漫人物:
<select onchange="onchangeFun()"><option>---动漫人物---</option><option>路飞</option><option>娜美</option><option>汉库克</option>
</select></body>
</html>


动态注册方式:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript">window.onload = function (){var elementById = document.getElementById("sel01");elementById.onchange = function (){alert("选择发生变化");}}</script>
</head>
<body>
请选择你最喜欢的动漫人物:
<select id = "sel01"><option>---动漫人物---</option><option>路飞</option><option>娜美</option><option>汉库克</option>
</select></body>
</html>

2.8.6 onsubmit事件

即表单提交事件,常用于表单提交前,验证所有表单是否合法。

静态注册方式:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript">function onsubmitFun(){//验证表单所有项是否合法,如果有一个不合法就阻止表单提交//以下省略代码逻辑alert("静态注册表单");return false;}</script>
</head>
<body>
<!-- return false 可以阻止表单提交 -->
<form action="http://localhost:8080" method="get" onsubmit="return onsubmitFun()"><input type="submit" value="静态注册"/>
</form>
</body>
</html>

动态注册方式:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript">window.onload = function (){var elementById = document.getElementById("form01");elementById.onsubmit = function (){//验证表单所有项是否合法,如果有一个不合法就阻止表单提交//以下省略代码逻辑alert("静态注册表单");return false;}}</script>
</head>
<body>
<!-- return false 可以阻止表单提交 -->
<form action="http://localhost:8080" method="get" id="form01"><input type="submit" value="静态注册"/>
</form>
</body>
</html>

2.9 DOM模型与Document对象

2.9.1 简介与说明

DOM即Document Object Model 文档对象模型。就是把文档中的标签、属性、文本转换成对象来管理。
接下来,学习的重点就是 如何实现把标签、属性、文本转换成对象来管理。

下图为 Document文档树 的内存结构图:

如何理解Document对象?

  1. Document 管理了所有的 HTML 文档内容;
  2. Document 是树结构的文档,有层级关系;
  3. 将标签都进行了对象化;
  4. 可以通过 Document对象 访问所有标签对象。

2.9.2 Document对象中常用方法

2.9.3 案例:验证用户名

当用户点击了校验按钮,要获取输入框的内容,并验证其是否合法。规则如下:
(1)必须由字母,数字,下划线组成;
(2)长度为5到12位。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript">function onclickFun(){//1.得到输入框的对象var usernameObj = document.getElementById("username");//2.获取输入框的内容var usernameText = usernameObj.value;//3.验证字符串是否满足规则,使用正则表达式var patt = /^\w{5,12}$/;/** test()方法用于测试某个字符串是否匹配规则*/if (patt.test(usernameText)){alert("合法");}else {alert("不合法");}}</script>
</head>
<body>
用户名: <input type="text" id="username"/>
<button onclick="onclickFun()"><font color="red">校验</font>
</button></body>
</html>


但是,在实际中,网站并不会以这种方式提示信息,下面展示另一提示方式:


<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript">function onclickFun(){//1.得到对象var usernameObj = document.getElementById("username");var spanObj = document.getElementById("span01");//2.获取输入框的内容var usernameText = usernameObj.value;//3.验证字符串是否满足规则,使用正则表达式var patt = /^\w{5,12}$/;/** test()方法用于测试某个字符串是否匹配规则*/if (patt.test(usernameText)){spanObj.innerText = "用户名合法!";}else {spanObj.innerText = "用户名不合法!";}}</script>
</head>
<body>
用户名: <input type="text" id="username"/>
<span id="span01" style="color: red"></span>
<button onclick="onclickFun()">校验</button></body>
</html>

2.10 正则表达式对象

正则表达式是描述字符模式的对象。
正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。

语法如下:

var patt = new RegExp(pattern, modifiers);
或者
var patt = /pattern/modifiers;
  • pattern(模式),描述了表达式的模式;
  • modifiers(修饰符)用于指定全局匹配,区分大小写的匹配和多行匹配。

以下列举部分正则表达式,其余请参考文档:




写在最后

 好了,本文内容到这里就告一段落了,下一节,将给大家带来jQuery的相关内容,欢迎大家订阅专栏,加入学习!点击订阅

 如果你有任何问题,欢迎私信,感谢您的支持!

【JavaWeb】前置知识:CSS与JavaScript知识汇总相关推荐

  1. 【思维导图】巩固你的JavaScript知识体系

    [思维导图]前端开发JavaScript-巩固你的JavaScript知识体系 版权声明:转载自CSDN博主「达达前端」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本 ...

  2. html5扩展函数的使用方法,知识分享:JavaScript基础语法

    知识分享:JavaScript基础语法 原创 mb5fd868d58f1472021-01-22 16:52:56©著作权 阅读数 41 ©著作权归作者所有:来自51CTO博客作者mb5fd868d5 ...

  3. javascript知识点_一点点JavaScript知识是第1部分很危险的事情

    javascript知识点 几乎是一个数据库的奇怪故事 (The Strange Tale of the Almost-a-Database) 这不是教程,这是一个警告性的故事. (This is n ...

  4. 经纬度绘图_【知识科普】地形图图例汇总,测绘人识图绘图必备(含dwg版下载)...

    地形图(topographic map)指的是地表起伏形态和地理位置.形状在水平面上的投影图.具体来讲,将地面上的地物和地貌按水平投影的方法(沿铅垂线方向投影到水平面上),并按一定的比例尺缩绘到图纸上 ...

  5. Javascript知识——事件

    O(∩_∩)O~~又是新的一周开始了,今天还是在继续学习Javascript知识,今天主要讲了事件的知识.现在就总结下吧. 事件 事件一般是用于浏览器和用户操作进行交互.最早是 IE 和 Netsca ...

  6. c语言程序设计基础1千克,c语言学习知识编程经典编辑题汇总整编.doc

    c语言学习知识编程经典编辑题汇总整编.doc - C语言编程基础习题汇总1.设计一个由键盘输入三个整数,求这三个数的平均数的程序.2.编写一个程序,用于水果店售货员结账.已知苹果每斤2.50元,鸭梨每 ...

  7. JavaScript知识(二)

    JavaScript知识(二) 原文:JavaScript知识(二) 你要保守你心,胜过保守一切,因为一生的果效,是由心发出的.----O(∩_∩)O... ...O(∩_∩)O...老师因有事下午没 ...

  8. 3 HTMLJS等前端知识系列之javascript的基础

    preface 作为一名运维开发,必须懂得前端知识,比如javascript,dom等等,下面就聊聊javascript. include 数据格式 条件判断,循环流程等. 函数 面向对象 what ...

  9. JavaWeb总结--HTML/CSS/JavaScript

    JavaWeb总结--HTML/CSS/JavaScript JavaWeb总结 HTML 字体标签 标题标签 超链接标签 表格标签 ifarme内联标签 form表单标签 form表单提交细节 CS ...

最新文章

  1. 计算机是如何按照时钟来顺序工作的
  2. 10分钟部署一个数据中心
  3. adsafe for linux,新闻|关于网站广告和过滤器的那些事
  4. rabbitmq怎么停止_rabbitmq 启动与停止
  5. 【LeetCode笔记】128. 最长连续序列(Java、哈希表、动态规划)
  6. redis docker安装、进入命令行后启动服务
  7. ubantu 单用户模式进入系统
  8. 素数的线性筛法java,埃氏筛 线性筛(欧拉筛) 算法解析
  9. Android DataBinding 从入门到进阶
  10. 移动端安全 - 安卓Android - 工具相关
  11. springmvc的运行原理个人见解
  12. 电路中各种地,数字地DGND、模拟地AGND、功率地PGND、电源地GND、交流地AGND、大地EGND的区别及处理
  13. 3D中的OBJ文件格式详解
  14. 大数据技术方面需要哪些支持
  15. 毕业设计--20200228--内网搭建domoticz系统 frp内网穿透实现天猫精灵控制内网设备
  16. can not be represented as java.sql.Timestamp
  17. 关系模式判断候候选关键字 与 函数依赖无损连接
  18. 【书评活动已开奖】年底总结ing?给你个机会补救一下今年的任务清单!
  19. 学生信息管理系统开发
  20. PPT学习资源和实用技巧

热门文章

  1. Java+freemarker 导出Word文档的实现(包括word for Mac 插入域的方法)-静态数据,动态表格list
  2. freertos---队列管理
  3. 长江中下游先民最早驯化野生稻 国稻种芯:全球35亿人口主食
  4. SQL的语法与分类,语法示例+图片,贼吉尔详细!!!
  5. 基于神经网络的房屋价格预测
  6. 数学与计算机科学奖视频马化腾,首届未来科学大奖揭晓 马化腾李彦宏都来颁奖了...
  7. 别把爱变成伤害,不要在朋友圈里乱晒娃,朋友圈晒娃注意四点
  8. html5 端午节 龙舟,端午节赛龙舟的作文(精选10篇)
  9. 计算机图像学基础课程设计,计算机图形学课程设计
  10. leaflet 加载腾讯地图