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