日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > CSS >内容正文

CSS

纯CSS无hacks的跨游览器多列布局(转)

發布時間:2024/4/14 CSS 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 纯CSS无hacks的跨游览器多列布局(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://www.cnblogs.com/rubylouvre/archive/2009/07/15/1523683.html

翻譯自Matthew James Taylor的Equal Height Columns with Cross-Browser CSS and No Hacks,有些部分根據我的理解改了,讓一些初心者更好理解。

利用純CSS創建一個等高多列的布局并不件易事,本教程將著重分析出現在多列布局的多個問題,然后為大家等來一個簡單全游覽器通吃的解決方法,不使用圖片,腳本,CSS hacks并在最嚴格的XHTML 規范中都能通過驗證。

問題的癥結所在

如上圖所示,由于各列的內容不一致導致其背景的高度也不統一。而背景實質上是內容(標準的盒子模型是由內容區,補白區,邊框區與邊界區組 成,背景存在于前三者中;IE為前兩者)的自適應的問題。再轉化一下,如何撐大那些較短的列的高度,讓所有列的高度等于最高的列的高度?這個,的確很很棘 手,因為我們不清楚各列的高度,也無從得知哪一列最高。我們也不能簡單地給所有列一個明確的高度,這可能會導致所有列都多出一大片空白,或者很不虧由于高 度不足導致某些列的內容無法全部顯示出來!現實中,內容的長度是動態的,因此每列的高度也是動態的。我們必須意識到在網絡中,不存在”固定“二字,每個人 的顯示器的分辯率都不盡一樣,游覽器的字體大小設置也不盡相同,這些都會影響到內容的顯示高度。

對內容與背景實行分離

解決等高問題的第一步就是把它拆分為兩個較小的,可以單獨解決的部分。這樣,我們原來是一列對應一個DIV,現在是一列對應一個DIV,一個用來裝 載內容,一個用來顯示背景。這種分離有利于我們對各個元素的掌控和把它們用另一種更有效的方式組合起來,這引起我很快會在下面的章節講述。

利用浮動嵌套解決最高列的高度的問題。

這是解決多列等高的關鍵。使一個DIV的高度等于最高列的高度的唯一方法就是讓這個DIV包含所有的列。換句話說,通過把所有的列放在一個容器中,容器的高度就是最高列的高度。這是個非常有用的結構。

為了使用這種結構在所有游覽器都正常工作,我們必須讓外層容器往左或右浮動,并且其子元素包含每一欄內容的DIV也跟著浮動,哪一個方向都無所謂。 浮動會使用它們往上對齊于外圍容器的上補白,并且浮動的容器會自動調整自身的高度與寬度以實現對浮動子元素的包含。但是如果容器被定義了高度與寬度,則它 不會隨子元素的大小而自動調整自身顯示區域來適應子元素的顯示。但在IE6與低版本的IE中,子浮動元素能撐開外圍元素;幸好IE7與IE8已引正了這個 不符合標準的做法。

增加用來顯示背景的容器

下一步是增加額外的容器,讓它們彼此嵌套,并讓所有外圍的容器數(新增的加上原來的那一個)等于列的總數:3。這三個容器用來顯示各列的背景。請注意,我們去掉了原來各列的背景,把它們移至這些容器上。

新的結構層代碼,讓新增的容器套在原來的外圍容器上!

<div id="container3"><div id="container2"><div id="container1"><div id="col1">Column 1</div><div id="col2">Column 2</div><div id="col3">Column 3</div></div></div> </div>

新的表現層代碼,新增的容器都是浮動元素!

所有元素左浮動,將容器寬度設為100%,使他們占滿頁面的寬度。背景色從內容 div 移除并加至容器上。注,原文是所有容器的寬都設為100%,其實根本沒有這樣的必須,因為在浮動嵌套中,外面的容器必須會被撐大能容得下內部子元素的大小!

#container3 { float:left; /*width:100%;*/ background:green;} #container2 { float:left; /*width:100%;*/ background:yellow;} #container1 { float:left; width:100%; background:red;} #col1 { float:left; width:30%;} #col2 { float:left; width:40%;} #col3 { float:left; width:30%;}

用相對定位來移動容器

現在是所有容器都完美地累在一起,只顯示一種背景顏色,我們必須讓其他背景也顯示出來。為此我們就得利用相對定位來讓這些容器像階梯一樣放置。這個 本可以使用負邊界技術,但該死的IE5.5的盒子模型與W3C的不一致,為了兼容我們就得使用到CSS hack。由于本文聲明是不使用CSS hack,因此放棄。首先讓#container2向右移到30%,由于#container2裝著#container1,而#container1上 裝著那三個列,這樣一來,最右邊的列就被移出游覽器的右邊了。而最外圍最底層的容器#container3則露出來了,露了左邊的30%。然后我們再移動 最上層的容器#container1,向右邊移動40%,于是原來蓋住的第二層容器也露出來了,露出其左邊的40%,而#container1則只剩下 100%-30%-40%=30%;上方的列也只剩下最右邊的列,卻表現為位于最左邊。這樣,背景也顯示正常了!

對應的表現層代碼

#container3 {float:left;/*width:100%;*/ /*沒有必要的代碼被注釋掉!*/background:green; } #container2 {float:left;/*width:100%;*/ /*沒有必要的代碼被注釋掉!*/background:yellow;position:relative;right:30%; } #container1 {float:left;width:100%;background:red;position:relative;right:40%; } #col1 { float:left; width:30%;} #col2 { float:left; width:40%;} #col3 { float:left; width:30%;}

把各列的內容移回原來的位置上

由于最上層的那三列都是被整體往右往到(頁面的)70%,我們再把它們都往左移回70%就是!最后,由于我們前兩個背景容器都是被向右移動,移出了游覽器,它們都與游覽器的右邊連在一起,我們可以設置最底層的背景容器的overflow來隱藏那些被移出的部分。

#container3 {float:left;/*width:100%;*/ /*沒有必要的代碼被注釋掉!*/background:green;overflow:hidden;position:relative; } #container2 {float:left;/*width:100%;*/ /*沒有必要的代碼被注釋掉!*/background:yellow;position:relative;right:30%; } #container1 {float:left;width:100%;background:red;position:relative;right:40%; } #col1 { float:left; width:30%; position:relative; left:70%;} #col2 { float:left; width:40%; position:relative; left:70%;} #col3 { float:left; width:30%; position:relative; left:70%;}

對列添加補白(內邊距)

最后,我們對列增加補白,讓每列顯得大方一些,而不是密密麻麻地塞滿一列。但是如果我們增加補白,可能有一些游覽器的有病又犯了,在IE6和更低版本的 IE中,其怪異的盒子模型,會產生一些我們不愿看到的結果。如,一個 200px 寬 20px 補白的 box 在 IE 中被視為 200px 寬,在其他瀏覽器中則為正確的 240px。補白應該加在元素的寬度上。

不過放心,我們可以用完全不依賴于 padding 的方法來解決這個問題。相反,我們把列弄窄一點(列寬減去兩側的補白),之后用相對定位把它們移至正確的位置。例如,我們用了 2% 的補白,則 30% 的列將減至 26%,40% 的列減至 36%。用相對定位移回列時需謹記,現在列變窄了,所以當它們一起像最初那樣左浮動時,每一個需要比上一個移動更遠的距離。

?

完整的CSS

為了使布局保持在小寬度我在每個內容列增加了overflow:hidden; 這將切去超出列寬的東東,并阻止其干擾其他布局。重申一下,這只是 IE 的問題,其他所有瀏覽器會保持正確的布局,不管列內是蝦米。如果你真想這樣做,可以用 IE 條件注釋只對 IE 寫規則。

#container3 { float:left; background:green; overflow:hidden; position:relative;} #container2 { float:left; background:yellow; position:relative; right:30%;} #container1 { float:left; width:100%; background:red; position:relative; right:40%;} #col1 { float:left; width:26%; position:relative; left:72%; overflow:hidden;} #col2 { float:left; width:36%; position:relative; left:76%; overflow:hidden;} #col3 { float:left; width:26%; position:relative; left:80%; overflow:hidden;}

整個案例代碼

<!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 content="text/html; charset=utf-8" http-equiv="Content-Type" /><meta http-equiv="Page-Enter" content="revealTrans(Duration=1.0,Transition=12)"/><meta http-equiv="Page-Exit" content="blendTrans(Duration=0.5)" /><title>Heroku和Morph AppSpaces:兩個Rails托管的新解決方案</title><style type="text/css">#header { background:#EBCC67; }#footer {background:#A9EA00; }#container3 { float:left; /* width:100%; */background:green; overflow:hidden; position:relative; } #container2 { float:left; /* width:100%; */background:yellow; position:relative; right:30%; } #container1 { float:left; width:100%; background:red; position:relative; right:40%; } #col1 { float:left; width:26%; position:relative; left:72%; overflow:hidden; } #col2 { float:left; width:36%; position:relative; left:76%; overflow:hidden; } #col3 { float:left; width:26%; position:relative; left:80%; overflow:hidden; }</style></head><body><div id="header">AppEngine在本周引起很大反響,它提供了一個簡單易用的方法來運行Python寫成的Web應用。但是Ruby社區并不需要看Google的臉色,它已經擁有了關于簡單部署的解決方案。我們來看兩個新的解決方案,它們均是基于Rails開發者使用的公用基礎之上構建的。</div><div id="container3"> <div id="container2"> <div id="container1"> <div id="col1">Column 1<br /><p>Heroku和Morph實驗室是Ruby on Rails的托管提供商,提供運行Ruby on Rails應用的整套環境。和傳統的托管商相比,他們并不僅僅是提供一個服務器給你,而且提供有趣的工具和接口來幫助你更加容易的工作,使你從繁重的安 裝、配置、管理和保證服務器安全中解脫出來。兩者皆是使用Amazon的EC2網格計算技術來運行應用,因此你可以毫不擔心可伸縮性與性能問題。</p></div> <div id="col2">Column 2<br /><p>另一個被Heroku和Morph實驗室所推崇的重要特性是無痛部署。部署一個新應用只需要幾分鐘而已:來看看Heroku的即時部署demo和Morph eXchange的6分鐘部署demo,部署是多么簡單。</p></div> <div id="col3">Column 3<br />兩者所帶來的是如此的相似。InfoQ采訪了這兩個項目的相關人員,有更多信息奉上。</div> </div> </div></div><div id="footer">James Lindenbaum闡述了Heroku的獨有特性:<blockquote>Heroku無疑是Rails應用最簡單的部署平臺。只是簡單的把代碼放進去,然后啟動、運行,沒人會做不到這些。Heroku會處理一切,從版本控制到 自動伸縮的協作(基于Amazon的EC2之上)。我們提供一整套工具來開發和管理應用,不管是通過Web接口還是新的擴展API。</blockquote>Heroku的一個非常有趣的特性就是基于瀏覽器的開發環境。它參考了Gyre的開發經驗,Gyre的開發者Adam Wiggins也是Heroku背后的一員。因此如果你希望快速修改和追加的話,只需要通過瀏覽器編輯正在運行的應用的源代碼,并在修改后自動部署。當然,使用瀏覽器IDE并不是唯一訪問Heroku服務的方法,還可以來看看Heroku的API和外部Git訪問。</div> </body> </html>

?

轉載于:https://www.cnblogs.com/JoannaQ/archive/2013/02/10/2909692.html

總結

以上是生活随笔為你收集整理的纯CSS无hacks的跨游览器多列布局(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91丨九色 | 国产成人自拍在线 | 欧美暧暧视频 | 嫩草影院久久 | 少妇婷婷 | 亚洲熟女综合一区二区三区 | 精品久久久蜜桃 | 欧美成人精品一区二区男人看 | 国产玖玖 | 久久精品免费播放 | 日本色呦呦 | 成人影视网址 | 中文字幕av在线免费观看 | 亚洲国产日韩欧美一区二区三区 | 亚洲一区色 | 一个综合色| 99国内揄拍国内精品人妻免费 | 日韩一区二区三区在线视频 | 国产成人综合欧美精品久久 | 国产精品久久久久久久午夜 | 夜夜嗨aⅴ一区二区三区 | 日韩精品电影一区 | 亚洲国产精品久久久久婷婷老年 | 久草视频在线免费看 | 久久久永久久久人妻精品麻豆 | 亚洲一| 天堂亚洲 | 成人三级在线看 | 美女一区二区视频 | 可以免费观看的毛片 | 国产一区二区三区在线免费观看 | 国内外成人激情视频 | 奇米色影视 | 天堂а√在线中文在线新版 | 亚洲一区二区三 | 亚洲激情中文 | 日本性生活一级片 | 日本免费网 | 伊人久久久久久久久久久 | 麻豆网站视频 | 老司机福利av | 日本黄色美女视频 | a级大片在线观看 | 日本午夜网站 | 中文字幕在线观看一区二区 | 精品久久久久久中文字幕人妻最新 | av软件在线观看 | 91文字幕巨乱亚洲香蕉 | 黄色小视频免费网站 | 国内9l自拍 | 中文字幕+乱码+中文字幕明步 | 中文字幕日产 | 国产xxx69麻豆国语对白 | 巨乳美女被爆操 | 国产精品一区二区av日韩在线 | 国产成人无码av | 91麻豆精品在线 | 欧美用舌头去添高潮 | 欧美一区二区三区在线观看 | 亚洲www久久久 | 免费插插视频 | 日本美女黄网站 | 天天影视亚洲 | 成年人www| 在线观看视频一区二区三区 | 青青草五月天 | 少妇扒开粉嫩小泬视频 | 欧美日韩人妻精品一区 | 免费福利av | 国产又色又爽又黄的 | 成人h在线观看 | 精品一区二区三区四区五区六区 | 黄色片视频免费在线观看 | 精品国产aⅴ一区二区三区四川人 | av网址导航 | 亚洲 国产 欧美 日韩 | 免费高清黄色 | 亚洲人成网址 | 日韩一级大片 | 伊人久久大香线蕉综合75 | 麻豆伊甸园 | 久久婷婷五月综合 | 色婷婷久久久 | 亚洲va久久久噜噜噜久久天堂 | 婷婷免费视频 | 久久久精品人妻一区二区三区色秀 | 亚洲综合精品视频 | 无码人妻一区二区三区av | 丝袜一区二区三区 | 久久在线播放 | 91色在线视频 | 日本在线不卡一区二区三区 | 国产精品人人爽 | 97精品国产97久久久久久免费 | 国产午夜福利在线播放 | 国产精品36p| 亚洲一区二区在线视频 | 自拍偷拍第一页 | 粉嫩av网 |