jQuery碎片积累

-

td:last与td:last-child的区别

$(‘td:last’)选择所有td元素中的最后一个

$(‘td:last-child’)选择tr下最后一个子元素td,有多个

-
让页面内所有的外链都是在新窗口中打开
[javascript]

$(‘a[href^="http://"]').attr("target","_blank");
[/javascript]

-
禁用表单的提交按钮
[javascript]

$("form").submit(function(){
$(":submit",this).attr("disabled","disabled");
});
[/javascript]

-
绝对定位与相对定位
W3CFUNS解释
属性为relative的元素可以用来布局页面,属性为absolute的元素用来定位某元素在父级中的位置
W3CFUNS实例
-
如果用定位来布局页面,父级元素的position属性必须为relative,而定位于父级内部某个位置的元素,最好用absolute,因为它不受父级元素的padding的属性影响,当然你也可以用 relative,计算的时候不要忘记计算padding的值。
-
-
$(“#test”).each(i,item)方法:
函数中的this关键字指向一个不同的DOM元素
返回 ‘false’ 将停止循环 (就像在普通的循环中使用 ‘break’)。返回 ‘true’ 跳至下一个循环(就像在普通的循环中使用’continue’)。
利用each给元素设置不同样式:
$(“.laispace”).each(function(i){this.style.color=[‘#f00’,’#0f0’,’#00f’][i]});
$.each(obj, fn)
通用例遍方法,可用于例遍对象和数组。
-DOM和JQ对象互转时要注意:

$(document.getElementById(‘test’)) 相当于$(“#test”);
$(“#test”)[0]或者$(“#test”).get(0)
注意:eq()返回JQ对象,get()返回DOM对象,而JQ对象只能调用JQ方法,DOM对象同理
$(“div”).eq(2).html();//调用jquery对象的方法
$(“div”).get(2).innerHTML;//调用dom的方法属性-$(“$bt1”).click(function(){
$(“#bt2”).click(); //点击按钮1时也触发按钮2
})
-
扩展自定义功能:
[javascript]

$.extend({
min: function(a, b){return a < b?a:b; },
max: function(a, b){return a > b?a:b; }
});//为在jquery的命名空间中扩展了min,max两个方法
//可以像下面这样使用
var a = 10,b=20;
var max = $.max(a,b);//20
var min = $.min(a.b);//10
[/javascript]

Javascript碎片积累

-
JS中的Image对象:

[javascript]
function getImageSize(imageEl) {
var i = new Image();
i.src = imageEl.src;
return new Array(i.width, i.height);
}
[/javascript]

image对象现在一般常用来预加载一些图片,先将其装入 DOM,等到需要的时候,直接调用,省掉等待的时间,直接显示出来。
需要注意的是:src 属性一定要写到 onload 的后面,否则程序在 IE 中会出错。
-
for 和 class 是 JavaScript 中的关键字,所以在 JavaScript 中这两个属性名称分别用 htmlFor 和 className 代替。

[javascript]
function getAttr(el, attrName){
var attr = {‘for’:’htmlFor’, ‘class’:’className’}[attrName] || attrName;
}
[/javascript]

-
交换两个变量值的巧妙方法,利用数组:
foo = [bar, bar=foo][0]; // 多巧妙啊!编程的时候不要忘记思考,否则你就只是一个完成工作的机器。
-
双感叹号的用法:!! 一般用来将后面的表达式强制转换为布尔类型的数据(boolean),也就是只能是true或者false。
-
注意一些类型转换:

[javascript]
a=parseInt(“1234″)
a=”1234″-0 //转换为数字
b=1234+”" //转换为字符串
c=someObject.toString() //将对象转换为字符串
[/javascript]

其中第1种、第4种为显式转换,2、3为隐式转换
布尔型的转换,javascript约定规则为
false、undefinded、null、0、”” 为 false
true、1、”somestring”、[Object] 为 true
-
在标准的事件绑定中绑定事件的方法函数为 addEventListener,而IE使用的是attachEvent
-
jQuery.trim()去除字符串前后的空格
-
jQuery.inArray()判断元素是否在数组中

[javascript]
var arr = ["html", "css", "js", "jquery"];
$.inArray(‘js’,arr);
[/javascript]

-
编写一个简单的 jQuery 插件(模板)

[javascript]
//You need an anonymous function to wrap around your function to avoid conflict
(function($){
//Attach this new method to jQuery
$.fn.extend({
//This is where you write your plugin’s name
pluginname: function() {
//options
var defaults = {
option1: "default_value"
}
var options = $.extend(defaults, options);
//a public method
this.methodName: function () {
//call this method via $.pluginname().methodName();
}
//Iterate over the current set of matched elements
return this.each(function() {
var o = options;
//code to be inserted here
});
}
});
//pass jQuery to the function,
//So that we will able to use any valid Javascript variable name
//to replace "$" SIGN. But, we’ll stick to $ (I like dollar sign: ) )
})(jQuery);
[/javascript]

-
小技巧:在浏览器地址栏中输入一行代码:data:text/html, <html contenteditable> ,回车即可把浏览器变临时编辑器(需要浏览器支持 HTML5 属性 contenteditable) 原文
-
所有JS对象共享的方法是toString(),返回该对象序列化格式后的字符串
-
元素的client属性(只读)指元素的内容部分再加上padding的大小,不包括border和滚动条占用的空间,故document元素的clientHeight和clientWidth属性,就代表了网页的相对大小。

[javascript]
// 获得网页的相对大小
function getViewport(){ // 页面加载完成后才能运行
    if (document.compatMode == "BackCompat"){
      return {
// IE6 quirks模式
        width: document.body.clientWidth,
        height: document.body.clientHeight
      }
    } else {
      return {
        width: document.documentElement.clientWidth,
        height: document.documentElement.clientHeight
      }
    }
  }
[/javascript]

 

[javascript]
// 获取网页的绝对大小
// 如果网页内容能够在浏览器窗口中全部显示,不同浏览器有不同的处理,这两个值未必相等,要取它们之中较大的那个值
function getPagearea(){
if (document.compatMode == "BackCompat"){
return {
width: Math.max(document.body.scrollWidth,
document.body.clientWidth),
height: Math.max(document.body.scrollHeight,
document.body.clientHeight)
}
} else {
return {
width: Math.max(document.documentElement.scrollWidth,
document.documentElement.clientWidth),

height: Math.max(document.documentElement.scrollHeight,
document.documentElement.clientHeight)
}
}
}
[/javascript]

-
每个元素都有offsetTop和offsetLeft属性,表示该元素的左上角与父容器(offsetParent对象)左上角的距离。所以,只需要将这两个值进行累加,就可以得到该元素的绝对坐标。

// 获取绝对位置的横坐标和纵坐标
// 由于在表格和iframe中,offsetParent对象未必等于父容器,所以以下函数对于表格和iframe中的元素不适用。

[javascript]
function getElementLeft(element){
    var actualLeft = element.offsetLeft;
    var current = element.offsetParent;
    while (current !== null){
      actualLeft += current.offsetLeft;
      current = current.offsetParent;
    }
    return actualLeft;
  }
  function getElementTop(element){
    var actualTop = element.offsetTop;
    var current = element.offsetParent;
    while (current !== null){
      actualTop += current.offsetTop;
      current = current.offsetParent;
    }
    return actualTop;
  }
[/javascript]

// 获取网页元素的相对位置:绝对坐标减去滚动条滚动的距离

[javascript]
function getElementViewLeft(element){
    var actualLeft = element.offsetLeft;
    var current = element.offsetParent;
    while (current !== null){
      actualLeft += current.offsetLeft;
      current = current.offsetParent;
    }
    if (document.compatMode == "BackCompat"){
      var elementScrollLeft=document.body.scrollLeft;
    } else {
      var elementScrollLeft=document.documentElement.scrollLeft;
    }
    return actualLeft-elementScrollLeft;
  }
  function getElementViewTop(element){
    var actualTop = element.offsetTop;
    var current = element.offsetParent;
    while (current !== null){
      actualTop += current. offsetTop;
      current = current.offsetParent;
    }
     if (document.compatMode == "BackCompat"){
      var elementScrollTop=document.body.scrollTop;
    } else {
      var elementScrollTop=document.documentElement.scrollTop;
    }
    return actualTop-elementScrollTop;
  }
// scrollTop和scrollLeft属性是可以赋值的
[/javascript]

-
-
object.prop和object[‘prop’]是等价的,当属性是带空格的string时就只能用方括号了:person[‘first name’];
-
for…in 循环输出的属性名顺序不可预测,使用之前先检测对象是否为null 或者 undefined
-
hasOwnProperty是js中唯一一个处理属性但是不查找原型链的函数

[javascript]
Object.prototype.prop = ‘propsss’;
var obj = {und:undefined};
obj.prop; // propsss
‘und’ in obj; // true
obj.hasOwnProperty(‘prop’); // false
obj.hasOwnProperty(‘und’); // true
//只有hasOwnProperty可以给出正确和期望的结果,尤其在遍历一个对象时
//除了hasOwnProperty外,没有其他方法可以排除原型链上的属性(不是定义在对象自身上的属性)
//如果hasOwnProperty被占用呢?来看:
var obj = {
hasOwnProperty: function(){
return false;
},
prop: ‘this is bad…’
};
obj.hasOwnProperty(‘prop’); // 总是返回false
//这样解决:
{}.hasOwnProperty.call(obj,’prop’); // 返回true
[/javascript]

-
Object的每个实例都具有下列属性方法:
1.Constructor:保存着用于创建当前对象的函数 上面例子 构造函数就是 Object()
2.hasOwnProperty(prop):检查给定的属性是否在当前对象实例中(而不是在实例的原型中)。作为参数的属性必须以string形式指定
3.isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型。
4.propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for in语句
5.toLocaleString():返回对象的字符串表示,与环境的地区对应
6.toString():同上
7.valueOf(): 返回对象的字符串、number、Boolean表示。通常与toString()相同
-
javascript中的乘法问题:
可用 10000 作为基数确保精度,如 31.12 10000 9.7 / 10000
-
function语句在解析时会被提升,对代码求值时js引擎在第一遍会声明函数并将它们放到源代码树的顶部。

[javascript]
alert(sum(10,10))
function sum(n1,n2){
return n1+n2;
}
//单独使用下面代码时,函数表达式会出错:
alert(sum(10,10));
var sum = function (n1,n2){
return n1+n2;
}
[/javascript]

命名函数表达式即被认为是函数声明也被认为是函数表达式

[javascript]
typeof g; // "function"
var f = function g(){};
//上面这个例子论证了 jScript 是如何把一个命名函数表达式处理成一个函数声明的
//在函数声明发生之前就把 g 给解析了 【在IE中检测】
[/javascript]

-
this是在函数调用时才被确定的而不是定义的时候

[javascript]
var Dog = {
toString: function() { return ‘dog’;},
fn: function() { alert(this);},
};
var Cat = {
toString: function() { return ‘cat’;}
};
Dog.fn(); // dog
Dog‘fn’ // dog
Cat.fn = Dog.fn;
Cat.fn(); // cat
var func = Dog.fn;
func(); // window
[/javascript]

-

apply和call的区别,在于apply用数组传递参数,而call用多参数逗号传递参数:

[javascript]

function myFunc(arg1,arg2,arg3){

// code …

}

myFunc.apply(null,[arg1,arg2,aeg3]);

myFunc.call(null,arg1,arg2,arg3);

// 第一个参数指定调用函数myFunc的对象

[/javascript]

-

构造函数的理解:当new修饰符修饰函数时,this就会指向新对象,该对象会自动返回,称之为构造函数:

[javascript]
function Person(name){
this.name = name;
this.sayName = function(){
alert("我的大名是:" + this.name);
}
}

var person1 = new Person("xiaolai"); // 构造函数返回一个对象,赋值给变量 xiaolai
person1.sayName(); // 『我的大名是:xiaolai』
[/javascript]

-
March 6, 2014—添加—

  • 获取元素的classList:

[javascript]
selector.classList 获取所有的class
selector.clasList.add(value); // 添加类
selector.clasList.remove(value); // 删除类
selector.clasList.toggle(value); // 切换类
selector.clasList.contains(value); // 判断是否包含类
[/javascript]

  • 获取DOM中获得了焦点的元素

[javascript]
document.activeElement
[/javascript]

  • 判断DOM是否加载完成

[javascript]
document.readyState // ‘complete’ or ‘loading’
[/javascript]

  • 判断浏览器采用了哪种渲染模式

[javascript]
document.compatMode // ‘CSS1Compat’ 为标准模式,’BackCompat’ 为混杂模式
[/javascript]

  • 判断浏览器采用的字符集

[javascript]
document.defaultCharset // 默认字符集
document.charset // 采用的字符集
[/javascript]

  • 访问所有自定义属性

[javascript]
selector.dataset.myid; // 获取div[data-myid=‘100’]中的100
[/javascript]

  • 将某个元素调入视窗内

[javascript]
selector.scrollIntoView()
[/javascript]

  • 返回元素的子元素节点(不包括其他节点)

[javascript]
selector.children // 是HTMLCollection的一个实例
[/javascript]

  • 获取视窗大小
    [javascript]
    function getViewport() {
    // 判断是否混杂模式
    if (document.compatMode == ‘BackCompat’) {
    return {
    width: document.body.clientWidth,
    height: document.body.clientHeight
    }
    } else {
    return {
    width: document.documentElement.clientWidth,
    height: document.documentElement.clientHeight
    }
    }
    }
    [/javascript]

  • 获取元素在视窗内的位置
    [javascript]
    selector.getBoundingClientRegt() // 返回对象含属性 left right top bottom
    [/javascript]

  • 获取页面的样式表
    [javascript]
    document.styleSheets;
    document.styleSheets[0].disabled = true; // 禁用第一个样式表
    [/javascript]

CSS碎片积累

  1. 1. mydiv1 {margin-top:-10px;}
  2. 2. mydiv1 {
  3. 3. show-href:hover:after {
  • / em的理解 /
    em是相对于父元素来计算大小的,浏览器默认为16px,设置body为0.75em(160.75=12px)后,若设置再body里的div为1em,则div里的文字大小实则为12px。
    PS:若设置ol为font-size:0.6em;则嵌套的ol为60%
    60%=36%的大小,列表嵌套会出问题。原则上用em定义字体时,嵌套不超过两层。
  • / 文字底部对齐 /
    设置文本在div里底部对齐用vertical-align:bottom;是不够的,还需设置display:table-cell;才会有效果。
  • / 内容居中文字不居中 /
    设置div绝对定位在网页中间position:absolute;后设置margin:0 auto;即可。设置内容居中但文字不跟着居中,另加text-align:left;即可。
  • / 行高建议用相对单位 /
    设置行高时建议使用百分比%或者em为单位。
  • / 浏览器默认行高 /
    浏览器默认行高为1.2em,建议设置为1.6~1.8em。
    -/ 上下边距的合并 /
    在CSS中,上下的margin都设置时,取大的margin值合并,而不是简单的叠加。
    -
    不能简单地用line-height来替代margin的值,因为不同浏览器的解析不一样。
  • / 图片替代文字 /
    图片代替文字时设置text-indent:-999px;要加overflow:hidden;
    最佳实践是Kellum法:
    [css]
    .hide-text {
    text-indent: 100%;
    white-space: nowrap;
    overflow: hidden;
    }
    [/css]
  • / 隐藏元素的方法 /
    visibility:hidden;元素不可见,但占据原来位置;display:none;元素不可见,不占据原来位置。
    -
    图像作为链接时默认会有蓝色边框,与 a 的默认样式一致

  • / 元素居中的方法 /
    方法一:设置width和margin;
    方法二:子元素inline-block父元素text-align设置为center;
    方法三:
    div设置为float:left;position:relative;
    div下的ul设置为float:right;position:relative;left: 50%;/整个分页向右边移动宽度的50%/
    ul下的li设置为float:left;position:relative;right:50%;
    原理分析
    方法四:绝对定位,原理类似方法三
    div设置为relative;
    ul设置为absolute,left:50%;
    li设置为relative,float,right:50%;
    方法五:CSS3的flex实现水平居中方法
    方法六CSS3的fit-content实现水平居中方法

  • / 图片宽度自适应容器的宽度 /
    1. 从固定宽度改为流式宽度,面临的一个主要问题是图片的显示尺寸。而这个问题在css中有个简单的解决方法,就是只需要设置图片的宽度是100%。
    2. 制作自适应大小的图片,即背景图片总是占满容器:给div设置固定的高度并设置背景图片为居中:
    [css]
    div.auto_image{
    height: 200px;
    margin: 0 auto;
    background: url(auto_image.jpg) no-repeat center;
    }
    [/css]

  • / 高亮用id定位的元素 /
    用#id定位页面内的元素时,稍稍高亮背景颜色提升体验:
    [css]
    div:target{
    background:#333;
    }
    [/css]

  • / outline替代border做测试 /
    之前尝试在鼠标hover一个图像时突出当前图像使用的是border,但总是会影响到周边元素,应该使用outline:不占据空间!outline的属性跟border一样:outline:1px solid #eee;

  • / 消除relative图片偏移后的空白/
    经常将一个图片使用relative定位,有了一定的位移后原位置空白,可设置负边距让文字填充进来。
  • / 关系选择器 + 的妙用 /

使用相邻选择符时常用h3 + p 来h3后的第一个p,别忘了h3 + p + p选择第二个p,以此类推

  • / inline-block /
    inline-block会激发IE的haslayout,且注意inline-block元素间若有空格,会有影响
  • / z-index的理解 /
    z-index只对定位元素起作用。如果你尝试对非定位元素设定一个z-index值,那么肯定不起作用。
  • / CSS3动画 /
    CSS3 是个独立于 JS 的线程,这个特点目前已经在 Desktop Safari / IOS Safari / Android Chrome 中被支持,所以说,移动 webapp 中的动画应用,尽可能使用 CSS3 吧
  • / 负边距的妙用 /
    当static元素的margin-top/margin-left被赋予负值时,元素将被拉进指定的方向。例如:
    / 元素向上移10px/

    mydiv1 {margin-top:-10px;}

    但如果你设置margin-bottom/right为负数,元素并不会如你所想的那样向下/右移动,而是将后续的元素拖拉进来,覆盖本来的元素。
    [css]

    mydiv1 {

    margin-bottom:-10px; / #mydiv1后续元素向上移10px, #mydiv1 本身不移动 /
    }[/css]
  • / box-sizing的使用 /
    处理盒模型时,让width包括padding和border的宽度:
    [css]
  • {/所有元素/
    box-sizing: border-box;/别忘了加浏览器前缀/
    }[/css]
  • / 简易浮动 /
    [css]

.clearfix{
overflow: auto;
zoom: 1;/兼容IE6/
}

[/css]

//lxl:最佳实践

[css]
/ 现代浏览器 /
.cf:before,
.cf:after {
content: "";
display: table;
}

.cf:after {
clear: both;
}

/ IE6/7 触发hasLayout /
.cf {
*zoom: 1;
}
[/css]

  • / 媒介查询 /

[css]

@media screen and (min-width:600px) {
nav { float: left; width: 25%;}
}
@media screen and (max-width:599px) {
nav li { display: inline;}
}


[/css]

  • / 视窗宽度的理解 /
    指定视窗宽就仿佛告诉了浏览器你的网页在这个宽度下显示是最合适的。要是做了一个专门在iPhone上浏览的网页,那么你就设置视窗宽为320px.
    但是这不易于 响应式设计,因为在平板上浏览它的时候,它会被缩小到320px的区域中。在响应式设计中最好指定视窗宽和设备的屏宽一致。
    [html]
    <meta name="viewport" content="width=320">
    [/html]

/ 视窗缩放 /
在移动端,屏幕上开合手指可以控制缩放,但当你设定视窗宽和设备宽度一致时,就没必要去放大浏览整个网页了。为了确保网页的初始显示不是放大过的,可以用initial-scale属性来设置初值。若用户在浏览过程中不需要缩放,你可以设置它为1。
[html]
<meta name="viewport" content="width=device-width">
[/html]

甚至是如果你连用户的滚屏操作都想禁止,你可以设置maximum-scale为1,这样就完全不能放大了。
[html]
<meta name="viewport" content="maximum-scale=1">
[/html]

-/ HTML4与HTML5文档头的理解 /
HTML 4.01 中的 doctype 需要引用一个 DTD,这是因为 HTML 4.01 基于 SGML。HTML 5 不基于 SGML,也不需要引用 DTD,但是需要声明文档类型让浏览器按照它们应该的方式来运行。
-/ 表单值设为disabled将不会被发送 /
如果一个元素被设置成 disabled, 那么它的值就不会被发送的server端。 正确的做法应该是使用 readonly。
禁用(disabled):value 不会在 Form 提交时发送出去。这个对于按钮来说用处比较大,一般的 type=”text” 最好是隐藏,而不是禁用,因为它不需要发送数据。
只读(readonly):value 会在 Form 提交时被发送出去。所以需要在外观上显示跟一般 input/textarea 一样,但不允许用户修改数据,可以用这个属性。
隐藏(hidden):这个比较好理解,value 会被发送,并且用户看不到。

  • / :after和:before的妙用 /
    配合 :after 或者 :before 在CSS中可以用attr()显示HTML属性值
    [css]
    @media print {
    a:after {
    content: " (link to " attr(href) ") ";
    }
    [/css]
    [html]
    <a href="http://example.com">Visit our home page</a>
    [/html]

-/ css的函数方法 /
使用counter()在列表中自动添加序号
[css]
body {
counter-reset: heading;
}
h4:before {
counter-increment: heading;
content: "Heading #" counter(heading) ".";
}
[/css]

/ 使用calc()做算术 /
[css]
.parent {
width: 100%;
border: solid black 1px;
position: relative;
}
.child {
position: absolute;
left: 100px;
width: calc(90% - 100px);
background-color: #ff8;
text-align: center;
}
[/css]

  • / 关闭自动补全 /
    关闭浏览器自动补全不是autocomplete=”false” 而是autocomplete=”off”,可防止自动补全插件与其的冲突
    -
    对em和ex的正确理解:em 是当前字体下 M 的宽度,而 ex 是当前自提下 x 的高度
  • /边距值单位的妙用/
    外边距单位的采用,margin-left和margin-right采用px而margin-top和margin-bottom采用em,能保证缩放时边距的自适应:
    [css]
    p {font-size: 1em; margin: .75em 30px;} / 缩放时边距自适应 /

[/css]

  • / 盒子模型的理解 /
    盒子模型结论1:没有设定元素的宽度即width:auto;时,content、padding、margin、border的总宽度占满父元素宽度;
    盒子模型结论2:有设定元素的宽度即width:400px;时,padding、margin、border的总宽度在原设定的宽度上增加;
    即:盒子的width设定的只是盒子content区的宽度,而非盒子要占据的水平宽度
    盒子模型结论对于布局的用法:
    假定是三列等宽布局,nav、article、adise都是浮动且宽度设定后,若为其中任何一个添加padding、margin,则会让总宽度超出,解决方法是:
    为每一个浮动的元素增加一个内部div.inner,给内部的div.inner设定padding、margin,这么以来,内部div的总宽度总是等于父元素最初设定的宽度了。
    缺点是,这么一来,得跟极度赞成标签语义化的同行们有一番争吵了。
    除此之外,可使用CSS3的box-sizing属性,设置width的计算方式:box-sizing : content-box || border-box || inherit
    content-box:Element Width/Height = border+padding+content width/height
    border-box:Element Width/Height = 0 + 0 +content width/height
    注:IE6/IE7不支持box-sizing,可使用一个polyfill(腻子脚本)borderBoxModel.js来兼容
    建议使用:* {box-sizing: border-box} // 权衡利弊?
  • / 防止元素长度撑破容器 /
    防止未来出现过大的元素(特别是在动态网站中,一些过长的url都可能撑破容器)的一种思路:
    给子元素 img {max-width: 100%};
    或父元素:
    overflow: hidden; / 截断超出的元素(而非缩放)/
    word-wrap: break-word; / 让一些长的字符串如url换行显示 /
    -/ 三栏布局的方法 /
    三栏布局-中栏流动布局的思路:中栏改变大小时右栏使用负外边距
    [html]

<div id="threecolwrap" style="width:100%; float:left;">
<div id="twocolwrap" style="margin-right:-210px;float:left;width:100%;">
<nav style="float:left;width:150px;">固定宽度</nav>
<article tyle="margin-right:210px;width:auto;">给自身margi-right:210px;并给父元素margin-right:-210px</article>
</div>
<aside id="onecolwrap" width:210px;float:left;>固定宽度为外边距210px</aside>
</div>

[/html[/html]

-
/ 一个更简单巧妙的办法实现三栏布局(推荐)/
给三个栏都设定display:table-cell让他们具有表格的属性就行了:(缺点是IE7以下的不兼容,且没有polyfill脚本,觉悟吧!)
[html]
<nav style="display:table-cell;width:150px;">固定宽度</nav>
<article style="display:table-cell;width:auto;">宽度自适应</article>
<aside style="display:table-cell;width:210px;">固定宽度</aside>
[/html]

-
清除浮动的几种方法
方法一:父元素overflow:hidden; //不能在下拉菜单中使用
方法二:父元素也浮动,父元素下的元素clear:both; // 不能对靠外边距居中的元素使用
方法三:父元素内最后放一个清楚浮动的元素div.clearFloat
方法四:父元素.clearfix添加伪类模拟方法三(推荐使用,见上文)

  • / 背景图片定位不同单位下的理解 /
    使用关键字和百分比的情况下,理解background-position:33% 33%;时,是背景图片的33%处与元素的33%处重叠!
    使用像素的绝对数值的情况下,理解background-position:33px 33px;时,图片左上角被放在(33px,33px)的地方!
  • / 添加水印的方法 /
    background-attachment: fixed;常用给body中间添加水印(默认值是scroll)
  • / font-family常见字体系列 /
    font-family字体栈中最后一个通常是字体类的名字,能保证最坏情况下文档能以正确的字体显示。常用的字体类有:
    font-family: serif; // 衬线字体
    font-family: sans-serif; // 无衬线字体
    font-family: monospace; // 等宽字体
    font-family: cursive; // 草书体或手写体
    font-family: fanstasy; // 一般是奇怪的字体
  • / font-xxx属性的理解 /
    font-weight中只有bold和normal才得到了浏览器的广泛支持,建议只使用这两个属性
    font-varient中只有normal和small-caps(小型大写字母)
    font的简写注意顺序和格式:
    font: italic small-caps bold 12px/1.5em arial,verdana;
    即顺序为:
    font : font-style || font-variant || font-weight || font-size || line-height || font-family
    默认值为:normal normal normal medium normal “Times New Roman” 。
    font-size和font-family是必写项,font-size和line-height只能通过斜杠/组成一个值,不能分开写,且应该在font-family前。
  • / text-indet缩进是继承的 /
    text-indent原来是有继承的,且是计算得出的结果父元素400px * 5% = 20px,则子元素默认缩进20px !
    -
    保持id和class最少却又能准确定位元素:正确的方法是设定一个id,以该id为hook(路标),选择它的子元素进行定位,同时提高HTML和CSS代码的易读性!// lxl:缺点是牺牲了权重
  • / 非首位子选择符 /
    ul li + li {border-top:1px solid #eee;}解决导航菜单不用给最后一个li添加类然后去掉最后一个li的下边框的问题
  • / 代码分离提高重用性 /
    在写一个功能性的代码,如下拉菜单时,建议将功能代码和视觉代码分开写,可提高重用性
  • /overflow:hidden对定位元素的影响/
    overflow:hidden 会修剪相对定位(position:relative)的元素,但并不总是会隐藏绝对定位元素。
  • / zoom触发IE的hasLayout属性 /
    zoom为ie私有css属性,一般用来触发ie的hasLayout属性,解决ie下的浮动,margin重叠等一些问题。
  • / 图片优化 /
    减少颜色数可减小PNG图片的大小
  • /禁止修改文本框大小/
    [css]
    textarea { resize: none; } / 禁用textarea的大小改变 /
    [/css]
  • / 自定义光标样式 /
    cursor: url(cursor.png), default; / 添加default才能在chrome激活cursor rule,否则不能显示/
  • / 网页点击启动QQ /
    [html]
    <a href="tencent://message/?uin=545183877&Site=JooIT.com&Menu=yes">点击启动QQ和lxl聊天!</a>
    [/html]

  • / 顶部栏和底部栏留空 /
    对footer或者header设定了position:fixed;要记得给他们腾出个地方来。对于footer就可在body中设定一个margin-bottom的值给它。
    -
    使用CSS的attr和content属性,改变title的样式:
    [html]
    <p class="tooltip" data-title="I’am data-title">Hover me!</p>
    <p class="tooltip" data-title="I’am data-title" title="I’am title">注意,使用了自定义的data-title而没有写原属性title,可防止冲突产生</p>
    [/html]

[css]
.tooltip:hover:after {
content: attr(data-title);
background: #eee;
border: 1px solid red;
position: relative;
top: -26px;
left: -40px;
}
[/css]

[css]

show-href:hover:after {

 content: attr(href);
 background: #eee;
 border: 1px solid red;

}
[/css]

  • / IE6 margin加倍的问题 /
    当box为float时,IE6中box左右的margin会加倍