IE 8以下版本的浏览器中的盒模型有什么不同
IE8以下浏览器的盒模型中定义的元素的宽高不包括内边距和边框
简单才是最好的
IE8以下浏览器的盒模型中定义的元素的宽高不包括内边距和边框
浮动元素脱离文档流,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留。
1.使用空标签清除浮动。
这种方法是在所有浮动标签后面添加一个空标签 定义css clear:both. 弊端就是增加了无意义标签。
2.使用overflow。
给包含浮动元素的父标签添加css属性 overflow:auto; zoom:1; zoom:1用于兼容IE6。
3.使用after伪对象清除浮动。
该方法只适用于非IE浏览器。具体写法可参照以下示例。使用中需注意以下几点。一、该方法中必须为需要清除浮动元素的伪对象中设置 height:0,否则该元素会比实际高出若干像素;
如果不使用类库或者没有自己的类库,储备一些常用函数总是有好处的。
1.$()
function $() {
var elements = [];
for (var i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (typeof element == 'string')
element = document.getElementById(element);
if (arguments.length == 1)
return element;
elements.push(element);
}
return elements;
}
2.getStyle()与setStyle()
function setStyle(el,prop,value){
if(prop == "opacity" && !+"\v1"){
//IE7 bug:filter 滤镜要求 hasLayout=true 方可执行(否则没有效果)
if (!el.currentStyle || !el.currentStyle.hasLayout) el.style.zoom = 1;
prop = "filter";
if(!!window.XDomainRequest){
value ="progid:DXImageTransform.Microsoft.Alpha(style=0,opacity="+value*100+")";
}else{
value ="alpha(opacity="+value*100+")"
}
}
el.style.cssText += ';' + (prop+":"+value);
}
function getStyle(el, style){
if(!+"\v1"){
style = style.replace(/\-(\w)/g, function(all, letter){
return letter.toUpperCase();
});
return el.currentStyle[style];
}else{
return document.defaultView.getComputedStyle(el, null).getPropertyValue(style)
}
}
3.getCookie(), setCookie(), deleteCookie()
function getCookie( name ) {
var start = document.cookie.indexOf( name + "=" );
var len = start + name.length + 1;
if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
return null;
}
if ( start == -1 ) return null;
var end = document.cookie.indexOf( ';', len );
if ( end == -1 ) end = document.cookie.length;
return unescape( document.cookie.substring( len, end ) );
}
function setCookie( name, value, expires, path, domain, secure ) {
var today = new Date();
today.setTime( today.getTime() );
if ( expires ) {
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );
document.cookie = name+'='+escape( value ) +
( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
( ( path ) ? ';path=' + path : '' ) +
( ( domain ) ? ';domain=' + domain : '' ) +
( ( secure ) ? ';secure' : '' );
}
function deleteCookie( name, path, domain ) {
if ( getCookie( name ) ) document.cookie = name + '=' +
( ( path ) ? ';path=' + path : '') +
( ( domain ) ? ';domain=' + domain : '' ) +
';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}
4.inArray()
var inArray = function (arr,value) {
for (var i=0,l = arr.length ; i <l ; i++) {
if (arr[i] === value) {
return true;
}
}
return false;
};
5.insertAfter()
function insertAfter(parent, node, referenceNode) {
parent.insertBefore(node, referenceNode.nextSibling);
}
6.toggle()
function toggle(obj) {
var el = document.getElementById(obj);
if ( el.style.display != 'none' ) {
el.style.display = 'none';
}
else {
el.style.display = '';
}
}
7.getElementsByClass()
var getElementsByClassName = function (searchClass, node,tag) {
if(document.getElementsByClassName){
return document.getElementsByClassName(searchClass)
}else{
node = node || document;
tag = tag || "*";
var classes = searchClass.split(" "),
elements = (tag === "*" && node.all)? node.all : node.getElementsByTagName(tag),
patterns = [],
returnElements = [],
current,
match;
var i = classes.length;
while(--i >= 0){
patterns.push(new RegExp("(^|\\s)" + classes[i] + "(\\s|$)"));
}
var j = elements.length;
while(--j >= 0){
current = elements[j];
match = false;
for(var k=0, kl=patterns.length; k<kl; k++){
match = patterns[k].test(current.className);
if (!match) break;
}
if (match) returnElements.push(current);
}
return returnElements;
}
}
8.addLoadEvent()
var addLoadEvent = function(fn) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = fn;
}else {
window.onload = function() {
oldonload();
fn();
}
}
}
9.addEvent()
function addEvent(elm, evType, fn, useCapture) {
if (elm.addEventListener) {
elm.addEventListener(evType, fn, useCapture);//DOM2.0
return true;
}
else if (elm.attachEvent) {
var r = elm.attachEvent('on' + evType, fn);//IE5+
return r;
}
else {
elm['on' + evType] = fn;//DOM 0
}
}
npm 默认从国外的源(https://registry.npmjs.org/)获取和下载包信息,国内访问速度很不理想。
就像其他很多开源软件都有国内镜像源,npm 也不例外。所以我们可以利用国内镜像源来加速模块安装。
国内 npm 镜像源
cnpmjs 镜像:
搜索地址:https://cnpmjs.org/
registry : https://r.cnpmjs.org/
淘宝 npm 镜像:
搜索地址:https://npm.taobao.org/
registry : https://registry.npm.taobao.org/
如何使用
临时使用
npm install express --registry https://r.cnpmjs.org/
持久使用
npm 依次通过命令行、环境变量、.npmrc 文件来获取配置
方式一:命令行修改 npm 配置
npm config set registry https://r.cnpmjs.org/
npm config get registry
方式二:修改环境变量
任何环境变量以npm_config_开头,将被解释为配置参数。
以 windows 为例,打开:系统信息 > 高级系统设置 > 环境变量。可以新建一条用户变量或者系统变量
npm_config_registry
https://r.cnpmjs.org/
方式三:添加 npm 配置文件 .npmrc
.npmrc 包含 4 级,可以按需求选择配置的地方
项目目录:/path/to/my/project/.npmrc
用户目录:~/.npmrc
全局配置:$PREFIX/etc/.npmrc
内置配置:/path/to/npm/.npmrc
registry = https://r.cnpmjs.org
命令行工具 cnpm
还可以通过定制的 cnpm 命令来直接从淘宝镜像源安装模块,参考 https://npm.taobao.org/
# 安装 cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
# 通过 cnpm 命令替代 npm 命令安装模块
cnpm install express
参考资料:
npm-registry
npm-config
淘宝 NPM 镜像
国内优秀npm镜像推荐及使用
区别:
1.所有的标记都必须要有一个相应的结束标记
2.所有标签的元素和属性的名字都必须使用小写
3.所有的XML标记都必须合理嵌套
4.所有的属性必须用引号""括起来
5.把所有<和&特殊符号用编码表示
6.给所有属性赋一个值
7.不要在注释内容中使“--”
8.图片必须有说明文字