首页 > 代码库 > 2014-7-21

2014-7-21

今天有一些DIV+CSS细节性的笔记:

 一、vertical-align:设置行级元素的垂直定位。常用在图片与文字同在一行内的情况。需要注意,对于float定位的内容,该CSS设置无效。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <title>垂直居中对齐测试</title>    <style type="text/css">        body{ margin: 0; padding: 0; }        .wrapper{ width: 960px; position: relative; margin: 10px auto; }        .wrapper:after{ content: ""; clear: both; display: block; }        .wrapper span,.wrapper a{ vertical-align: middle; margin: 0 5px; color: #aa3c00; font-weight: bold; }        ..wrapper a{ display: inline-block; }        .wrapper .fl_ele{ float: left; color: red; }        .f18{ font-size: 18px; }        .f28{ font-size: 28px; }        .f22{ font-size: 22px; }    </style></head><body>    <div class="wrapper">        <span class="fl_ele f18">行级浮动元素</span>        <span class="fl_ele f28">行级浮动元素</span>        <span class="fl_ele f22">行级浮动元素</span>        <span class="fl_ele f28">行级浮动元素</span>    </div>    <div class="wrapper">        <span class="f18">行级非浮动元素</span>        <span class="f28">行级非浮动元素</span>        <span class="f22">行级非浮动元素</span>        <span class="f28">行级非浮动元素</span>    </div>    <div class="wrapper">        <a class="f18">inline-block非浮动元素</a>        <a class="f28">inline-block非浮动元素</a>        <a class="f22">inline-block非浮动元素</a>        <a class="f28">inline-block非浮动元素</a>    </div></body></html>

二、inline-block的兼容性问题:对于行级元素,inline-blcok的设置对所有浏览器兼容,对于块级元素,inline-block的设置对于IE6,IE7不兼容

三、双重使用decoration:none;模拟超链接鼠标移上没有下划线的样式。一般来说,一个网站的main.css文件夹中会定义a{text-decoration: none;}以及a:hover{text-decoration: underline;}的全局样式来设置超链接是否该有下划线的样式。而实际一个网站中的不同超链接样式需求不同,有些超链接样式需要鼠标移上去没有下划线。普遍做法是给特定的元素加上a:hover{text-decoration: none;}的样式。而a:hover这种写法是比较消耗内存的,为了达到更好的性能,可以直接用优先级更高的双重选择器选择目标元素,并给其再次添加a{text-decoration: none;}。这样通过两次给a标签设置a:hover{text-decoration:none;}来可达到鼠标移上没有下划线的效果。经测试,该效果兼容IE6+及其他普通浏览器。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <title>模拟超链接鼠标移上没有下划线样式的测试</title>    <style type="text/css">        .wrapper{ width: 960px; margin: 0 auto; }        a{ text-decoration: none; }        a:hover{ text-decoration: underline; }        .wrapper a{ display: block; font-size: 16px; color: red; margin: 10px; }        .wrapper .hover_none{ text-decoration: none; }        .hover_yes{ text-decoration: none;}    </style></head><body>    <div class="wrapper">        <a href="#" class="hover_none">模拟hover样式</a>        <a href="#" class="hover_yes">不能达到模拟hover样式的效果</a>    </div></body></html>

四、关于一个老生常谈的问题:清除浮动。说两点:没有清除浮动带来的问题;清除浮动的几种方法以及最佳方法。

  没有清除浮动会带来的问题:1、导致浮动元素的父容器背景不能显示;2、导致浮动元素的父容器边框不能被撑开;3、导致浮动元素的父容器margin,padding不能正常显示;4、扰乱布局。产生上述问题的具体原因,很简单,这里不详述,不知道的同学可以去看看浮动布局的原理。

  清除浮动的几种方法:1、在浮动元素后面紧跟一个空标签,并设置空标签样式为clear:both;2、给父元素设置样式overflow:hidden;3、设置父元素的height属性为固定值;4、为父元素设置parent_selector:after{ display: block; content: ""; clear: both; }上述4种方法中,最佳方法是第四种,原因不解释,自己去思考。

五、在xhtml1.0中,<botton></botton>标签如果写成<button/>会被IE浏览器错误的解析,导致样式出错。

六、一个关于浮动自动换行的BUG。一个浮动元素和一个非浮动元素同时在一行中,当浮动元素在非浮动元素之后时,浮动元素会出现自动换行的现象。解决这个BUG的方法有两个:1、将所有元素都设置成浮动;2、将浮动元素放在非浮动元素之前。当然,最好使用第一种方式解决,毕竟第二种方式涉及到修改html结构,影响内容的加载顺序。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <title>浮动元素自动换行的BUG测试</title>    <style type="text/css">        div{ width: 960px; margin: 10px auto; color: red;}        .wrapper1{ background: #aa3c00;}        .wrapper2{ background: #0033FF;}        .wrapper3{ background: #33befa;}        .wrapper1:after,.wrapper2:after,.wrapper3:after{ display: block; content: ""; clear: both; }    </style></head><body>    <div class="wrapper1">        <p>我是排在浮动元素前面的非浮动元素哦</p>        <p style="float: right; ">我是排在非浮动元素后面的浮动元素哦</p>    </div>    <div class="wrapper2">        <p style="float: right; ">我是排在非浮动元素前面的浮动元素哦</p>        <p>我是排在浮动元素后面的非浮动元素哦</p>    </div>    <div class="wrapper3">        <p style="float: left; ">我是左浮动元素哦</p>        <p style="float: right; ">我是右浮动元素哦</p>    </div></body></html>

本人水平有限,如有错误的地方,烦请大家指出。大家共同讨论,共同进步,欢迎纠错。~~