css+js+html基础知识总结
css+js+html基础知识总结
一、CSS相关
1、css的盒子模型:IE盒子模型、标准W3C盒子模型;
2、CSS优先级机制:
选择器的优先权:!important>style(内联样式)>[id>class>tag](选择器)
样式的优先级:(外部样式)External style sheet <(内部样式)Internal style sheet <(内联样式)Inline style
3、继承是CSS的一个主要特征,它是依赖于祖先-后代的关系的。继承是一种机制,它允许样式不仅可以应用于某个特定的元素,还可以应用于它的后代。
4、盒模型包括内容(content)、填充(padding)、边界(margin)和边框(border)四个方面的内容;
5、CSS hack:由于不同的浏览器和浏览器各版本对CSS的支持及解析结果不一样,以及CSS优先级对浏览器展现效果的影响,我们可以据此针对不同的浏览器情景来应用不同的CSS。CSS Hack大致有3种表现形式,CSS属性前缀法、选择器前缀法以及IE条件注释法(即HTML头部引用if IE)Hack。
二、JavaScript相关
1、作用域
变量的作用域:全局变量和局部变量;
变量没有在函数内声明或者声明的时候没有带var
就是全局变量,拥有全局作用域,window
对象的所有属性拥有全局作用域;在代码任何地方都可以访问,函数内部声明并且以var
修饰的变量就是局部变量,只能在函数体内使用,函数的参数虽然没有使用var
但仍然是局部变量。
2、js闭包
闭包就是能够读取其他函数局部变量的函数,并让这些变量的值始终保持在内存中存在。
3、数据类型
js的基本数据类型:number、string、Boolean、object、undefined;
(1)值类型:数值、布尔值、null、undefined。
(2)引用类型:对象、数组、函数。
4、继承
js是通过原型和构造器实现继承的。
- // 构造函数
- function Person(name, sex) {
- this.name = name;
- this.sex = sex;
- }
- // 定义Person的原型,原型中的属性可以被自定义对象引用
- Person.prototype = {
- getName: function() {
- return this.name;
- },
- getSex: function() {
- return this.sex;
- }
- }
这里我们把函数Person称为构造函数,也就是创建自定义对象的函数。可以看出,JavaScript通过构造函数和原型的方式模拟实现了类的功能。
为了证明prototype模版并不是被拷贝到实例化的对象中,而是一种链接的方式,请看如下代码:
- function Person(name, sex) {
- this.name = name;
- this.sex = sex;
- }
- Person.prototype.age = 20;
- var zhang = new Person("ZhangSan", "man");
- console.log(zhang.age); //
- // 覆盖prototype中的age属性
- zhang.age = 19;
- console.log(zhang.age); //
- delete zhang.age;
- // 在删除实例属性age后,此属性值又从prototype中获取
- console.log(zhang.age); //
这种在JavaScript内部实现的隐藏的prototype链接,是JavaScript赖以生存的温润土壤, 也是模拟实现继承的基础。
5、原型
每个函数在创建的时候都自动添加了一个prototype属性,这就是函数的原型,原型本身就是一个Object对象,原型本身就是一个Object对象,其实质是对一个对象的引用;
- function A() {
- this.width = 10;
- this.data = [1,2,3];
- this.key = "this is A";
- }
- A._objectNum = 0;//定义A的属性
- A.prototype.say = function(){//给A的原型对象添加属性
- alert("hello world")
- }
6、cookie的属性
在JavaScript里,一个cookie就是一个字符串属性,cookie有六个属性,分别是name,value,expires(过期时间),path(路径),domain(域)和secure(安全);
Cookie对象的属性:
1、Name:获取或设置Cookie的名称。
2、Value:获取或设置Cookie的Value。
3、Expires:获取或设置Cookie的过期的日期和事件。
4、Version:获取或设置Cookie的符合HTTP维护状态的版本。
Cookie对象的方法:
1、Add:增加Cookie变量。
2、Clear:清除Cookie集合内的变量。
3、Get:通过变量名称或索引得到Cookie的变量值。
4、Remove:通过Cookie变量名称或索引删除Cookie对象。
cookie的获取方式:
- <script language="JavaScript" type="text/javascript">
- <!--
- //设置两个cookie
- document.cookie="userId=828";
- document.cookie="userName=hulk";
- //获取cookie字符串
- var strCookie=document.cookie;
- //将多cookie切割为多个名/值对
- var arrCookie=strCookie.split("; ");
- var userId;
- //遍历cookie数组,处理每个cookie对
- for(var i=0;i<arrCookie.length;i++){
- var arr=arrCookie[i].split("=");
- //找到名称为userId的cookie,并返回它的值
- if("userId"==arr[0]){
- userId=arr[1];
- break;
- }
- }
- alert(userId);
- //-->
- </script>
7、node.js适应的场景
高并发,聊天,实时消息推送;
8、事件侦听器
写一个通用的事件侦听器函数。
- // event(事件)工具集,来源:github.com/markyun
- markyun.Event = {
- // 页面加载完成后
- readyEvent : function(fn) {
- if (fn==null) {
- fn=document;
- }
- var oldonload = window.onload;
- if (typeof window.onload != 'function') {
- window.onload = fn;
- } else {
- window.onload = function() {
- oldonload();
- fn();
- };
- }
- },
- // 视能力分别使用dom0||dom2||IE方式 来绑定事件
- // 参数: 操作的元素,事件名称 ,事件处理程序
- addEvent : function(element, type, handler) {
- if (element.addEventListener) {
- //事件类型、需要执行的函数、是否捕捉
- element.addEventListener(type, handler, false);
- } else if (element.attachEvent) {
- element.attachEvent('on' + type, function() {
- handler.call(element);
- });
- } else {
- element['on' + type] = handler;
- }
- },
- // 移除事件
- removeEvent : function(element, type, handler) {
- if (element.removeEventListener) {
- element.removeEventListener(type, handler, false);
- } else if (element.datachEvent) {
- element.detachEvent('on' + type, handler);
- } else {
- element['on' + type] = null;
- }
- },
- // 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)
- stopPropagation : function(ev) {
- if (ev.stopPropagation) {
- ev.stopPropagation();
- } else {
- ev.cancelBubble = true;
- }
- },
- // 取消事件的默认行为
- preventDefault : function(event) {
- if (event.preventDefault) {
- event.preventDefault();
- } else {
- event.returnValue = false;
- }
- },
- // 获取事件目标
- getTarget : function(event) {
- return event.target || event.srcElement;
- },
- // 获取event对象的引用,取到事件的所有信息,确保随时能使用event;
- getEvent : function(e) {
- var ev = e || window.event;
- if (!ev) {
- var c = this.getEvent.caller;
- while (c) {
- ev = c.arguments[0];
- if (ev && Event == ev.constructor) {
- break;
- }
- c = c.caller;
- }
- }
- return ev;
- }
- };
9、内存泄露
javascript
具有自动垃圾回收机制,一旦数据不再使用,可以将其设为"null"来释放引用
堆内存存放引用值,栈内存存放固定类型值。“引用”是一个指向对象实际位置的指针。
在这里需注意的是,引用指向的是具体的对象,而不是另一个引用。
循环引用
一个很简单的例子:一个DOM对象被一个Javascript
对象引用,与此同时又引用同一个或其它的Javascript
对象,这个DOM
对象可能会引发内存泄露。这个DOM
对象的引用将不会在脚本停止的时候被垃圾回收器回收。要想破坏循环引用,引用DOM
元素的对象或DOM
对象的引用需要被赋值为null
。
闭包
在闭包中引入闭包外部的变量时,当闭包结束时此对象无法被垃圾回收(GC)。
- var a = function() {
- var largeStr = new Array(1000000).join('x');
- return function() {
- return largeStr;
- }
- }();
DOM泄露
当原有的COM被移除时,子结点引用没有被移除则无法回收。
- var select = document.querySelector;
- var treeRef = select('#tree');
- //在COM树中leafRef是treeFre的一个子结点
- var leafRef = select('#leaf');
- var body = select('body');
- body.removeChild(treeRef);
- //#tree不能被回收入,因为treeRef还在
- //解决方法:
- treeRef = null;
- //tree还不能被回收,因为叶子结果leafRef还在
- leafRef = null;
- //现在#tree可以被释放了。
Timers计(定)时器泄露
定时器也是常见产生内存泄露的地方:
- for (var i = 0; i < 90000; i++) {
- var buggyObject = {
- callAgain: function() {
- var ref = this;
- var val = setTimeout(function() {
- ref.callAgain();
- }, 90000);
- }
- }
- buggyObject.callAgain();
- //虽然你想回收但是timer还在
- buggyObject = null;
- }
调试内存
Chrome
自带的内存调试工具可以很方便地查看内存使用情况和内存泄露:
在 Timeline -> Memory 点击record即可。
三、HTML
Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?
(1)、<!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签之前。告知浏览器的解析器,
用什么文档类型 规范来解析这个文档。
(2)、严格模式的排版和 JS 运作模式是 以该浏览器支持的最高标准运行。
(3)、在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。
(4)、DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。
行内元素有哪些?块级元素有哪些? 空(void)元素有那些?
(1)CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,
比如div默认display属性值为“block”,成为“块级”元素;
span默认display属性值为“inline”,是“行内”元素。
(2)行内元素有:a b span img input select strong(强调的语气)
块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p
(3)知名的空元素:
<br> <hr> <img> <input> <link> <meta>
鲜为人知的是:
<area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>
link 和@import 的区别是?
(1)link属于XHTML标签,而@import是CSS提供的;
(2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
(3)import只在IE5以上才能识别,而link是XHTML标签,无兼容问题;
(4)link方式的样式的权重 高于@import的权重.
浏览器的内核分别是什么?
* IE浏览器的内核Trident、Mozilla的Gecko、Chrome的Blink(WebKit的分支)、Opera内核原为Presto,现为Blink;
常见兼容性问题?
* png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.
* 浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一。
* IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。
浮动ie产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;}
这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)
渐进识别的方式,从总体中逐渐排除局部。
首先,巧妙的使用“\9”这一标记,将IE游览器从所有情况中分离出来。
接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。
css
.bb{
background-color:#f1ee18;/*所有识别*/
.background-color:#00deff\9; /*IE6、7、8识别*/
+background-color:#a200ff;/*IE6、7识别*/
_background-color:#1e0bd1;/*IE6识别*/
}
* IE下,可以使用获取常规属性的方法来获取自定义属性,
也可以使用getAttribute()获取自定义属性;
Firefox下,只能使用getAttribute()获取自定义属性.
解决方法:统一通过getAttribute()获取自定义属性.
* IE下,even对象有x,y属性,但是没有pageX,pageY属性;
Firefox下,event对象有pageX,pageY属性,但是没有x,y属性.
* 解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。
* Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,
可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决.
超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hover和active了解决方法是改变CSS属性的排列顺序:
L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?
* HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
* 绘画 canvas
用于媒介回放的 video 和 audio 元素
本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
sessionStorage 的数据在浏览器关闭后自动删除
语意化更好的内容元素,比如 article、footer、header、nav、section
表单控件,calendar、date、time、email、url、search
新的技术webworker, websockt, Geolocation
* 移除的元素
纯表现的元素:basefont,big,center,font, s,strike,tt,u;
对可用性产生负面影响的元素:frame,frameset,noframes;
支持HTML5新标签:
* IE8/IE7/IE6支持通过document.createElement方法产生的标签,
可以利用这一特性让这些浏览器支持HTML5新标签,
浏览器支持新标签后,还需要添加标签默认的样式:
* 当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
<!--[if lt IE 9]>
<script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
<![endif]-->
如何区分: DOCTYPE声明\新增的结构元素\功能元素
语义化的理解?
用正确的标签做正确的事情!
html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;
在没有样式CCS情况下也以一种文档格式显示,并且是容易阅读的。
搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利于 SEO。
使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
HTML5的离线储存?
localStorage 长期存储数据,浏览器关闭后数据不丢失;
sessionStorage 数据在浏览器关闭后自动删除。
(写)描述一段语义的html代码吧。
(HTML5中新增加的很多标签(如:<article>、<nav>、<header>和<footer>等)
就是基于语义化设计原则)
< div id="header">
< h1>标题< /h1>
< h2>专注Web前端技术< /h2>
< /div>
iframe有那些缺点?
*iframe会阻塞主页面的Onload事件;
*iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。
使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript
动态给iframe添加src属性值,这样可以可以绕开以上两个问题。
HTML5的form如何关闭自动完成功能?
给不想要提示的 form 或下某个input 设置为 autocomplete=off。
请描述一下 cookies,sessionStorage 和 localStorage 的区别?
cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage不会
sessionStorage和localStorage的存储空间更大;
sessionStorage和localStorage有更多丰富易用的接口;
sessionStorage和localStorage各自独立的存储空间;
如何实现浏览器内多个标签页之间的通信? (阿里)
调用localstorge、cookies等本地存储方式
webSocket如何兼容低浏览器?(阿里)
Adobe Flash Socket 、 ActiveX HTMLFile (IE) 、 基于 multipart 编码发送 XHR 、 基于长轮询的 XHR
css+js+html基础知识总结的更多相关文章
- 001/Node.js(Mooc)--基础知识
一.Node.js基础知识 node.js用C++语言编写. 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时 ...
- CSS的一些基础知识
<!DOCTYPE html><html><head><meta charset="utf-8"><title>标题&l ...
- 【JS】基础知识
引言 在互联网的演化过程中,网页制作是Web1.0时代的产物,那时网站的主要内容都是静态的,用户使用网站的行为也以浏览为主. 2005年以后,互联网进入了Web2.0时代,各类似桌面软件的Web应用大 ...
- node.js的基础知识
第一部分知识: .命令行窗口(小黑屏).CMD窗口.终端.shell - 开始菜单 --> 运行 --> CMD --> 回车 - 常用的指令: dir 列出当前目录下的所有文件 c ...
- HTML,js的基础知识
HTML 元素语法 HTML 元素以开始标签起始 HTML 元素以结束标签终止 元素的内容是开始标签与结束标签之间的内容 某些 HTML 元素具有空内容(empty content) 空元素在开始标签 ...
- js 的基础知识
一.弱类型意识 js变量是没有类型的 var a = 1; //a 就是一个变量 不要提什么类型 变量可以赋任何类型的值 类型仅仅是值的性质 与变量无关 Js的基本类型 变量未赋值时,其值为und ...
- js的基础知识笔记
目录 一.基本数据类型 二.函数 三.面向对象 一.基本数据类型 1.使用var声明变量.使用;结尾.使用{}表示代码块.使用驼峰式命名 2.变量是弱类型的,即并不严格要求声明变量的类型,一个变量可以 ...
- 二、js中基础知识
该篇文章主要是强化一下自己javaScript的基础,让写代码变得更轻松些.基础好的请忽略. JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解 ...
- JS的基础知识
前言:写前端代码时的各种取值纠结,让我决定我必须要好好学一下js............加油~ $("#tr"+id).remove() 删除某一行,而不用刷新页面 HightCh ...
随机推荐
- Redis介绍及实践分享
1.Redis是什么 1)Redis是REmote DIctionary Server的缩写,是一个key-value存储系统 2)Redis提供了一些丰富的数据结构,包括Strings,Lists, ...
- Saltstack系列2:Saltstack远程执行命令
命令 命令格式: salt '<操作目标>' <方法>[参数] 例: salt 'wx' cmd.run 'free -m' #查看被控主机内存使用情况 常用参数 针对< ...
- IE11登陆交行网银崩溃
1.打开IE11兼容性视图 2.交通银行就填入95559.com.cn 3.重新打开IE11登录网银
- Android和WCF通信 - 大数据压缩后传输
Android和WCF通信 - 大数据压缩后传输 本帖来源:http://www.cnblogs.com/lykbk/archive/2013/08/15/3259045.html 最近一直在优化项目 ...
- 【linux】之安装mysql常用配置
下载mysql地址 http://dev.mysql.com/downloads/mysql/ 选择下面这个 查看是否存在mysql安装包 rpm -qa|grep -i mysql 删除mysql安 ...
- eclipse下编译hadoop源代码(转)
hadoop是一个分布式存储和分布式计算的框架.在日常使用hadoop时,我们会发现hadoop不能完全满足我们的需要,我们可能需要修改hadoop的源代码并重新编译.打包. 下面将详细描述如何从sv ...
- linux下的g++编译器安装
再debian下直接apt-get install gcc g++就可以了.按照类似的逻辑,再Fedora下yum install gcc g++ 报告无法找到g++包. 查了一下,原来这个包的名字叫 ...
- JAVA NIO中selectedKeys返回的键集,对其中的SelectionKey执行操作之后,是否需要在selectedKeys()中对其执行remove 操作
今天一个东西需要用到java nio的东西.在网上查了一下资料,发现有Apache的Mina,Netty等,感觉JDK中带的NIO有点鸡肋啊.之前看过这部分的内容,但好长一段时间没有用,也就忘得七七八 ...
- apache重写规则自动追加查询参数QSA
看好多大网站上的搜索都是以.html?keyword=手机&page=abc这个样子表现, 如: search_goods.html?q=%BF%D5%C6%F8%BE%BB%BB%AF%C6 ...
- 每个程序员都需要学习 JavaScript 的7个理由
最近在和招聘经理交流现在找一个好的程序员有多难的时候,我渐渐意识到了现在编程语言越来越倾重于JavaScript.Web开发人员尤其如此.所以,如果你是一个程序员,那么你应该去学习JavaScript ...