HTML+CSS布局技巧及兼容问题【阅读季】
-  
在IE6和IE7中,行高值必須大于字體的2px以上才能保證字體的完整顯示或當(dāng)作為鏈接時(shí)能顯示下劃線。
 -  
IE6?下去掉 input等元素 的邊框 border: 0 none; 所有瀏覽器都可以了
 -  
邊框1px {td不重疊狀態(tài)}:border-collapse: collapse;(table、td需同時(shí)設(shè)置)
 -  
IE6、7邊框斷續(xù):{min-height:1px; _height:1px;}或{zoom:1;overflow:hidden;}均可解決
 -  
IE6、7、8 FF 兼容透明:filter:alpha(opacity=70);-moz-opacity:0.7;opacity: 0.7
 -  
IE6、7、8 FF 瀏覽器兼容虛線框:a{outline:none; blr:expression(this.onFocus=this.blur());}/*ie輸入框input輸入法不能切換*/
 -  
文字中間橫線:text-decoration:line-through;
 -  
css3投影效果:文字{text-shadow:1px -1px 1px #970505;} 盒子{box-shadow:2px 2px 2px #fff;}
 -  
文字省略號(hào)css樣式:text-overflow:ellipsis ;{ overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:315px; }必備條件
 -  
textarea輸入框設(shè)置:resize:none;overflow-y: auto;豎條顯示無(wú)
 -  
圖片垂直居中代碼css:display: table-cell; overflow: hidden;text-align: center;vertical-align: middle;
/*兼容ie6-7*/{+display:block;+font-size:300px;+font-family:"Times New Roman", Times, serif;} -  
中文字間距:letter-spacing: 50px;{可取正負(fù)值}
 -  
Div最小高度兼容IE6:height:100px;overflow:visible;{min-height:100px;height:auto !important;}IE7、8 FF兼容
 - div的垂直居中問(wèn)題 vertical-align:middle; 將行距增加到和整個(gè)DIV一樣高 ?; 然后插入文字,就垂直居中了。缺點(diǎn)是要控制內(nèi)容不要換行
 -  
Position:relative定位問(wèn)題針對(duì)IE6:(1)給父層設(shè)置zoom:1;觸發(fā)layout;? (2)給父層設(shè)置width或height
 -  
position:fixed不兼容ie6設(shè)置:正常設(shè)置:position:fixed;width:100%;left:0;bottom:0px;
Ie6設(shè)置下:<!--[if IE 6]>? <style type="text/css">? html{overflow:hidden;}? body{height:100%;overflow:auto;}? 類名{position:absolute;right:17px;} </style>??
<![endif]-->?
內(nèi)頁(yè)里:*html{background-image:url(about:blank);background-attachment:fixed;}/*解決IE6下滾動(dòng)抖動(dòng)的問(wèn)題*/
.類名{_position:absolute;_bottom:auto;_top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)));_margin-bottom:0px;} -  
使用IE特有的條件判斷語(yǔ)句:
<!--[if !IE]><!--> 除IE外都可識(shí)別 <!--<![endif]-->
<!--[if IE]> 所有的IE可識(shí)別 <![endif]-->
<!--[if IE 6]> 僅IE6可識(shí)別 <![endif]-->
<!--[if lt IE 6]> IE6以下版本可識(shí)別 <![endif]-->
<!--[if gte IE 6]> IE6以及IE6以上版本可識(shí)別 <![endif]-->
<!--[if IE 7]> 僅IE7可識(shí)別 <![endif]-->
<!--[if lt IE 7]> IE7以下版本可識(shí)別 <![endif]-->
<!--[if gte IE 7]> IE7以及IE7以上版本可識(shí)別 <![endif]-->
<!--[if IE 8]> 僅IE8可識(shí)別 <![endif]-->
<!--[if IE 9]> 僅IE9可識(shí)別 <![endif]--> -  
div的垂直居中問(wèn)題?vertical-align:middle; 將行距增加到和整個(gè)DIV一樣高 line-height:200px;然后插入文字,就垂直居中了。缺點(diǎn)是要控制內(nèi)容不要換行。
 -  
margin加倍的問(wèn)題
設(shè)置為float的div在ie下設(shè)置的margin會(huì)加倍。這是一個(gè)ie6都存在的bug。
解決方案是在這個(gè)div里面加上display:inline;
例如:
<#div id=”imfloat”>
相應(yīng)的css為
#IamFloat
{
float:left; margin:5px;/*IE下理解為10px*/
display:inline;/*IE下再理解為5px*/
}
 -  
浮動(dòng)ie產(chǎn)生的雙倍距離
#box{
float:left; width:100px; margin:0 0 0 100px; //這種情況之下IE會(huì)產(chǎn)生200px的距離 display:inline; //使浮動(dòng)忽略
}
這里細(xì)說(shuō)一下block與inline兩個(gè)元素:
block元素的特點(diǎn)是,總是在新行上開(kāi)始,高度,寬度,行高,邊距都可以控制(塊元素);
Inline元素的特點(diǎn)是,和其他元素在同一行上,不可控制(內(nèi)嵌元素);
#box
{
display:block; //可以為內(nèi)嵌元素模擬為塊元素
display:inline; //實(shí)現(xiàn)同一行排列的效果
diplay:table;
}
 -  
IE與寬度和高度的問(wèn)題
IE 不認(rèn)得min-這個(gè)定義,但實(shí)際上它把正常的width和height當(dāng)作有min的情況來(lái)使。這樣問(wèn)題就大了,如果只用寬度和高度,正常的瀏覽器里這兩個(gè)值就不會(huì)變,如果只用min-width和min-height的話,IE下面根本等于沒(méi)有設(shè)置寬度和高度。
比如要設(shè)置背景圖片,這個(gè)寬度是比較重要的。
要解決這個(gè)問(wèn)題,可以這樣:
#box{ width: 80px; height: 35px;}
html>body #box
{
width: auto; height: auto; min-width: 80px; min-height: 35px;
} -  
頁(yè)面的最小寬度
min -width是個(gè)非常方便的CSS命令,它可以指定元素最小也不能小于某個(gè)寬度,這樣就能保證排版一直正確。但I(xiàn)E不認(rèn)得這個(gè),而它實(shí)際上把width當(dāng)做最小寬度來(lái)使。為了讓這一命令在IE上也能用,可以把一個(gè)<div> 放到 <body> 標(biāo)簽下,然后為div指定一個(gè)類, 然后CSS這樣設(shè)計(jì):
#container{ min-width: 600px; width:e-xpression(document.body.clientWidth < 600? "600px": "auto" );}
第一個(gè)min-width是正常的;但第2行的width使用了Javascript,這只有IE才認(rèn)得,這也會(huì)讓你的HTML文檔不太正規(guī)。它實(shí)際上通過(guò)Javascript的判斷來(lái)實(shí)現(xiàn)最小寬度。 -  
DIV浮動(dòng)IE文本產(chǎn)生3象素的bug
左邊對(duì)象浮動(dòng),右邊采用外補(bǔ)丁的左邊距來(lái)定位,右邊對(duì)象內(nèi)的文本會(huì)離左邊有3px的間距.
#box{ float:left; width:800px;}
#left{ float:left; width:50%;}
#right{ width:50%;}
*html #left{ margin-right:-3px; //這句是關(guān)鍵}
<div id="box">
<div id="left"></div>
<div id="right"></div>
</div> -  
IE捉迷藏的問(wèn)題
當(dāng)div應(yīng)用復(fù)雜的時(shí)候每個(gè)欄中又有一些鏈接,DIV等這個(gè)時(shí)候容易發(fā)生捉迷藏的問(wèn)題。有些內(nèi)容顯示不出來(lái),當(dāng)鼠標(biāo)選擇這個(gè)區(qū)域是發(fā)現(xiàn)內(nèi)容確實(shí)在頁(yè)面。
解決辦法:
對(duì)#layout使用line-height屬性 或者給#layout使用固定高和寬。頁(yè)面結(jié)構(gòu)盡量簡(jiǎn)單。 -  
float的div閉合;清除浮動(dòng);自適應(yīng)高度;
例如:<#div id=”floatA” ><#div id=”floatB” ><#div id=” NOTfloatC” >?
這里的NOTfloatC并不希望繼續(xù)平移,而是希望往下排。(其中floatA、floatB的屬性已經(jīng)設(shè)置為 float:left;) ?
這段代碼在IE中毫無(wú)問(wèn)題,問(wèn)題出在FF。原因是NOTfloatC并非float標(biāo)簽,必須將float標(biāo)簽閉合。?
在 <#div class=”floatB”> <#div class=”NOTfloatC”>之間加上 < #div class=”clear”>這個(gè)div一定要注意位置,而且必須與兩個(gè)具有float屬性的div同級(jí),之間不能存在嵌套關(guān)系,否則會(huì)產(chǎn)生異常。 ?
并且將clear這種樣式定義為為如下即可: .clear{ clear:both;}? -  
作為外部 wrapper 的 div 不要定死高度
為了讓高度能自動(dòng)適應(yīng),要在wrapper里面加上overflow:hidden; ?
當(dāng)包含float的 box的時(shí)候,高度自動(dòng)適應(yīng)在IE下無(wú)效,這時(shí)候應(yīng)該觸發(fā)IE的layout私有屬性(萬(wàn)惡的IE啊!)用zoom:1;可以做到,這樣就達(dá)到了兼容。
例如某一個(gè)wrapper如下定義: .colwrapper{ overflow:hidden; zoom:1; margin:5px auto;}? -  
對(duì)于排版
我們用得最多的css描述可能就是float:left.有的時(shí)候我們需要在n欄的float div后面做一個(gè)統(tǒng)一的背景,
譬如: <div id=”page”> <div id=”left”></div> <div id=”center”></div> <div id=”right”></div> </div>
比如我們要將page的背景設(shè)置成藍(lán)色,以達(dá)到所有三欄的背景顏色是藍(lán)色的目的,
但是我們會(huì)發(fā)現(xiàn)隨著left center right的向下拉長(zhǎng),而 page居然保存高度不變,問(wèn)題來(lái)了,
原因在于page不是float屬性,而我們的page由于要居中,不能設(shè)置成float,
所以我們應(yīng)該這樣解決:
<div id=”page”>
<div id=”bg” style=”float:left;width:100%”>
<div id=”left”></div>
<div id=”center”></div>
<div id=”right”></div>
</div>
</div>
再嵌入一個(gè)float left而寬度是100%的DIV解決之 -  
萬(wàn)能float 閉合(非常重要!)
關(guān)于 clear float 的原理可參見(jiàn) [How To Clear Floats Without Structural Markup],將以下代碼加入Global CSS 中,給需要閉合的div加上 class="clearfix" 即可,屢試不爽.
/* Clear Fix */
.clearfix:after { content:"."; display:block; height:0; clear:both; visibility:hidden; }
.clearfix { display:inline-block; }
/* Hide from IE Mac */
.clearfix {display:block;}
/* End hide from IE Mac */
/* end of clearfix */
或者這樣設(shè)置:.hackbox{ display:table; //將對(duì)象作為塊元素級(jí)的表格顯示}?使用after偽對(duì)象清楚浮動(dòng)。
?該方法只適用于非IE瀏覽器。
使用中需注意以下幾點(diǎn)。
1.該方法中必須為需要清除浮動(dòng)元素的偽對(duì)象中設(shè)置height:0,否則該元素會(huì)比實(shí)際高出若干像素;
2.content屬性是必須的,但其值可以為空,藍(lán)色理想討論該方法的時(shí)候content屬性的值設(shè)為".",但我發(fā)現(xiàn)為空亦是可以的。
 -  
高度不適應(yīng)
高度不適應(yīng)是當(dāng)內(nèi)層對(duì)象的高度發(fā)生變化時(shí)外層高度不能自動(dòng)進(jìn)行調(diào)節(jié),特別是當(dāng)內(nèi)層對(duì)象使用margin 或paddign 時(shí)。
例:
#box {background-color:#eee; }
#box p {margin-top: 20px;margin-bottom: 20px; text-align:center; }
<div id="box">
<p>p對(duì)象中的內(nèi)容</p>
</div>
解決方法:
在P對(duì)象上下各加2個(gè)空的div對(duì)象CSS代碼:
.1{height:0px;overflow:hidden;}或者為DIV加上border屬性。 -  
IE6下為什么圖片下有空隙產(chǎn)生
解決這個(gè)BUG的方法也有很多,
可以是改變html的排版,
或者設(shè)置img 為display:block
或者設(shè)置vertical-align 屬性為 vertical-align:top | bottom |middle |text-bottom 都可以解決. -  
如何對(duì)齊文本與文本輸入框
加上 vertical-align:middle;
<style type="text/css">
<!--
input {width:200px; height:30px;border:1px solid red;vertical-align:middle; }
-->
</style>? -  
web標(biāo)準(zhǔn)中定義id與class有什么區(qū)別嗎?
一.web標(biāo)準(zhǔn)中是不容許重復(fù)ID的,比如 div id="aa" 不容許重復(fù)2次,而class 定義的是類,理論上可以無(wú)限重復(fù), 這樣需要多次引用的定義便可以使用他.
二.屬性的優(yōu)先級(jí)問(wèn)題 ID 的優(yōu)先級(jí)要高于class,看上面的例子
三.方便JS等客戶端腳本,如果在頁(yè)面中要對(duì)某個(gè)對(duì)象進(jìn)行腳本操作,那么可以給他定義一個(gè)ID,否則只能利用遍歷頁(yè)面元素加上指定特定屬性來(lái)找到它,這是相對(duì)浪費(fèi)時(shí)間資源,遠(yuǎn)遠(yuǎn)不如一個(gè)ID來(lái)得簡(jiǎn)單. -  
LI中內(nèi)容超過(guò)長(zhǎng)度后以省略號(hào)顯示的方法
此方法適用與IE與OP瀏覽器
<style type="text/css">
<!--
li {
width:200px;
white-space:nowrap;
text-overflow:ellipsis;
-o-text-overflow:ellipsis;
overflow: hidden;
}
-->
</style> -  
為什么無(wú)法定義1px左右高度的容器
IE6下這個(gè)問(wèn)題是因?yàn)槟J(rèn)的行高造成的,
解決的方法也有很多
例如:overflow:hidden | zoom:0.08 | line-height:1px?
?
 -  
怎么樣才能讓層顯示在FLASH之上呢
解決的辦法是給FLASH設(shè)置透明
<param name="wmode" value="transparent" />? -  
怎樣使一個(gè)層垂直居中于瀏覽器中
這里我們使用百分比絕對(duì)定位,與外補(bǔ)丁負(fù)值的方法,負(fù)值的大小為其自身寬度高度除以2
<style type="text/css">
<!—
div
{
position:absolute;
top:50%;
lef:50%;
margin:-100px 0 0 -100px;
width:200px;
height:200px;
border:1px solid red;
}
-->
</style>? -  
Div居中問(wèn)題
div設(shè)置 margin-left, margin-right 為 auto 時(shí)已經(jīng)居中,
IE 不行,IE需要設(shè)定body居中,
首先在父級(jí)元素定義text-algin: center;
這個(gè)的意思就是在父級(jí)元素內(nèi)的內(nèi)容居中。? -  
鏈接(a標(biāo)簽)的邊框與背景
a 鏈接加邊框和背景色,需設(shè)置 display: block, 同時(shí)設(shè)置 float: left 保證不換行。
給 a 和 menubar 設(shè)置高度是為了避免底邊顯示錯(cuò)位,
若不設(shè) height, 可以在 menubar 中插入一個(gè)空格。 -  
超鏈接訪問(wèn)過(guò)后hover樣式就不出現(xiàn)的問(wèn)題
被點(diǎn)擊訪問(wèn)過(guò)的超鏈接樣式不在具有hover和active了
解決方法是
改變CSS屬性的排列順序: L-V-H-A
Code:
<style type="text/css">
<!--
a:link {}
a:visited {}
a:hover {}
a:active {}
-->
</style> -  
游標(biāo)手指cursor
cursor: pointer 可以同時(shí)在 IE FF 中顯示游標(biāo)手指狀,
hand 僅 IE 可以? -  
UL的padding與margin
ul標(biāo)簽在FF中默認(rèn)是有padding值的,
而在IE中只有margin默認(rèn)有值,
所以先定義 ul{margin:0;padding:0;}就能解決大部分問(wèn)題? -  
BOX模型解釋不一致問(wèn)題
在FF和IE 中的BOX模型解釋不一致導(dǎo)致相差2px
解決方法:
div{margin:30px!important;margin:28px;}
注意這兩個(gè) margin的順序一定不能寫(xiě)反, important這個(gè)屬性IE不能識(shí)別,
但別的瀏覽器可以識(shí)別。
所以在IE下其實(shí)解釋成這樣:
div {maring:30px;margin:28px}
重復(fù)定義的話按照最后一個(gè)來(lái)執(zhí)行,所以不可以只寫(xiě)margin:xx px!important;
#box
{
width:600px; //for ie6.0\
- w\idth:500px; //for ff+ie6.0}
#box{
width:600px!important //for ff
width:600px; //for ff+ie6.0
width /**/:500px; //for ie6.0-} -  
屬性選擇器(這個(gè)不能算是兼容,是隱藏css的一個(gè)bug)
p[id]{}
div[id]{}
這個(gè)對(duì)于IE6.0和IE6.0以下的版本都隱藏,
FF和OPera作用.屬性選擇器和子選擇器還是有區(qū)別的,
子選擇器的范圍從形式來(lái)說(shuō)縮小了,
屬性選擇器的范圍比較大,
如p[id]中,所有p標(biāo)簽中有id的都是同樣式的 -  
最狠的手段 - !important;?
如果實(shí)在沒(méi)有辦法解決一些細(xì)節(jié)問(wèn)題,
可以用這個(gè)方法.FF對(duì)于”!important”會(huì)自動(dòng)優(yōu)先解析,
然而IE則會(huì)忽略.
如下
.tabd1
{
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */?
}
值得注意的是,一定要將xxxx !important 這句放置在另一句之上,上面已經(jīng)提過(guò)? -  
為什么FF下文本無(wú)法撐開(kāi)容器的高度
標(biāo)準(zhǔn)瀏覽器中固定高度值的容器是不會(huì)象IE6里那樣被撐開(kāi)的,
那我又想固定高度,又想能被撐開(kāi)需要怎樣設(shè)置呢?
辦法就是去掉height設(shè)置min-height:200px;
這里為了照顧不認(rèn)識(shí)min-height的IE6
可以這樣定義: { height:auto!important; height:200px; min-height:200px; } -  
?
樓梯式的效果
幾乎所有的Web開(kāi)發(fā)者都會(huì)使用list來(lái)創(chuàng)建導(dǎo)航條。下面是你可能會(huì)用到的代碼:- <ul>
 - <li><ahref="#"></a></li>
 - <li><ahref="#"></a></li>
 - <li><ahref="#"></a></li>
 - </ul>
 
- ul {
 - list-style: none;
 - }
 - ul li a {
 - display: block;
 - width: 130px;
 - height: 30px;
 - text-align: center;
 - color: #fff;
 - float: left;
 - background: #95CFEF;
 - border: solid1px#36F;
 - margin: 30px5px;
 - }
 
?
?
?
?
下面是兩個(gè)解決方法
解決方法一
設(shè)置li元件的float屬性。
- ul li { float: left; }
 
解決方法二
設(shè)置?display: inline?屬性。
 
- ul li {
 - display: inline
 - }
 
float元件的兩倍空白
請(qǐng)看下面的代碼:
- #element{
 - background: #95CFEF;
 - width: 300px;
 - height: 100px;
 - float: left;
 - margin: 30px0 030px;
 - border: solid1px#36F;
 - }
 
期望的結(jié)果是:
?
?
解決方案
和上面那個(gè)BUG的解決方案一樣,設(shè)置?display: inline?屬性可以解決問(wèn)題。
- #element{
 - background: #95CFEF;
 - width: 300px;
 - height: 100px;
 - float: left;
 - margin: 30px0 030px;
 - border: solid1px#36F;
 - display: inline;
 - }
 
.clear{?clear:both;?height:0px;?margin:0;?padding:0;?width:0;?border:none;?overflow:hidden;?}
空div在IE(FF中沒(méi)有)是有默認(rèn)高度的,可以用定義:
?div?
{?
width:100%;?
background:#9c0;?
ling-height:0
}?
利用border屬性確定出錯(cuò)元素的布局特性
使用float屬性布局一不小心就會(huì)出錯(cuò)。這時(shí)為元素添加border屬性確定元素邊界,錯(cuò)誤原因即水落石出。
?border:1px?solid?#000;
float元素的父元素不能指定clear屬性
MacIE下如果對(duì)float的元素的父元素使用clear屬性,周圍的float元素布局就會(huì)混亂。這是MacIE的著名的bug,倘若不知道就會(huì)走彎路。
float元素務(wù)必指定width屬性
很多瀏覽器在顯示未指定width的float元素時(shí)會(huì)有bug。所以不管float元素的內(nèi)容如何,一定要為其指定width屬性
float元素的寬度之和要小于100% ?
如果float元素的寬度之和正好是100%,某些古老的瀏覽器將不能正常顯示。因此請(qǐng)保證寬度之和小于99%。
是否重設(shè)了默認(rèn)的樣式?
某些屬性如margin、padding等,不同瀏覽器會(huì)有不同的解釋。因此最好在開(kāi)發(fā)前首先將全體的margin、padding設(shè)置為0、列表樣式設(shè)置為none等。
【body,button,ul,li,ol,p,dl,dd,h1,h2,h3,h4,h5,h6,img,iframe,input,form,textarea{margin:0;padding:0;list-style-type:none;}】?或*{?margin:0;padding:0}
是否忘記了寫(xiě)DTD?
如果無(wú)論怎樣調(diào)整不同瀏覽器顯示結(jié)果還是不一樣,那么可以檢查一下頁(yè)面開(kāi)頭是不是忘了寫(xiě)下面這行DTD:
<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/may-374/p/3723937.html
總結(jié)
以上是生活随笔為你收集整理的HTML+CSS布局技巧及兼容问题【阅读季】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                        - 上一篇: 《相和歌辞·王昭君二首》第五句是什么
 - 下一篇: 求一个可爱的qq网名