首頁 web前端 css教學 css佈局之負margin妙用及其他實現

css佈局之負margin妙用及其他實現

Feb 16, 2017 pm 01:32 PM
css margin 佈局

相信大家在專案的開發上都曾經遇過這樣的需求,一行放X(X>1)個區塊且相鄰區塊之間的間距相同。


css佈局之負margin妙用及其他實現

大概就是上面這個樣子,下面介紹幾種實現的方式。
 
1.負margin大法
 
設定好元素的寬度和留白佔滿父級的寬度,然後設定父級的margin-left為留白的負留白的寬度


Code複製內容到剪貼簿

<style type="text/css">    
*{   
 margin: 0;   
 padding: 0;   
}   
img{   
 vertical-align: middle;   
}   
  
ul>li{   
 float: left;   
}   
  
ul>li>img{   
 width: 100%;   
}   
    
.test1{   
padding: 0 2%;   
margin-left: -3.3%;   
}   
    
.test1>li{   
width: 30%;   
margin-left: 3.3%;   
}   
  
</style>   
 <p>1.关于负margin的实现,由于margin是基于父级计算的,会有一定的偏差,但是用于移动端上,误差可以忽略不计</p>   
        <ul class="test1 clearfix">   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
        </ul>
登入後複製


上面的誤差是因為ul的margin和li的margin百分比的計算基於的元素不一樣導致的,但是在移動端上因為視窗的範圍有限,這個差異很小,在pc上一般使用px,所以可以忽略。 (下面還有更多的辦法)
 
2.各大網站的實現,在元素內部進行填充,使用box-sizing,需要ie8以上才支持 


CSS CodeSS到剪貼簿

<style type="text/css">   
*{   
    margin: 0;   
    padding: 0;   
}   
img{   
    vertical-align: middle;   
}   
.test1{   
    padding: 0 2%;   
    margin-left: -3.3%;   
}   
ul>li{   
    float: left;   
}   
.test1>li{   
    width: 30%;   
    margin-left: 3.3%;   
}   
ul>li>img{   
    width: 100%;   
}   
.test2>li{   
    width: 33.3%;   
    padding: 0 2%;   
    box-sizing: border-box;   
}   
.test3{   
    display: flex;   
    justify-content: space-between;   
       
}   
.test3>li{   
    width: 31.3%;   
    padding: 0 2%;   
    float: none;   
}   
.test4{   
    width: 1200px;   
    border: 1px solid red;   
    margin-left: -3.33%;   
}   
.test4>li{   
    width: 30%;   
    margin-left: 3.33%;   
}   
</style>   
<p>2.各大网站的实现,在元素内部进行填充,使用box-sizing,需要ie8及以上才支持</p>   
        <ul class="test2 clearfix">   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
        </ul>
登入後複製

這種實現暫時還沒發現什麼缺點,程式碼也簡單易懂(建議)

 


3.彈性盒模型flex的實現,需要做相容處理(舊盒子+新盒子)


CSS Code

複製內容到剪貼板

<style type="text/css">   
*{   
    margin: 0;   
    padding: 0;   
}   
img{   
    vertical-align: middle;   
}   
.test1{   
    padding: 0 2%;   
    margin-left: -3.3%;   
}   
ul>li{   
    float: left;   
}   
.test1>li{   
    width: 30%;   
    margin-left: 3.3%;   
}   
ul>li>img{   
    width: 100%;   
}   
.test2>li{   
    width: 33.3%;   
    padding: 0 2%;   
    box-sizing: border-box;   
}   
.test3{   
    display: flex;   
    justify-content: space-between;   
       
}   
.test3>li{   
    width: 31.3%;   
    padding: 0 2%;   
    float: none;   
}   
.test4{   
    width: 1200px;   
    border: 1px solid red;   
    margin-left: -3.33%;   
}   
.test4>li{   
    width: 30%;   
    margin-left: 3.33%;   
}   
</style>   
<p>3.弹性盒模型flex的实现,需要做兼容处理(旧盒子+新盒子),仅为演示,没做兼容处理</p>   
        <ul class="test3">   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
        </ul>
登入後複製

這種情況怎麼能少了我們呢,盒模型應該是專門用來處理吧新舊盒子模型之分,各瀏覽器實現的都不太一樣。所以一般情況兩套盒子模型的屬性都需要加上。 (喜歡折騰就上吧,效果棒棒的)

 


4.classname實現
 
將需要特殊處理的元素加上單獨的class,再做相應的處理。可以後台處理也可以前端處理(建議後台處理) 


CSS Code

複製內容到剪貼簿

<style type="text/css">   
*{   
    margin: 0;   
    padding: 0;   
}   
img{   
    vertical-align: middle;   
}   
.test1{   
    padding: 0 2%;   
    margin-left: -3.3%;   
}   
ul>li{   
    float: left;   
}   
.test1>li{   
    width: 30%;   
    margin-left: 3.3%;   
}   
ul>li>img{   
    width: 100%;   
}   
.test2>li{   
    width: 33.3%;   
    padding: 0 2%;   
    box-sizing: border-box;   
}   
.test3{   
    display: flex;   
    justify-content: space-between;   
       
}   
.test3>li{   
    width: 31.3%;   
    padding: 0 2%;   
    float: none;   
}   
.test4{   
    padding: 0 2%;   
}   
.test4>li{   
    width: 30%;   
    margin-left: 5%;   
}   
.test4>li.first{   
    margin: 0;   
}   
.test5{   
    padding: 0 2%;   
}   
.test5>li{   
    width: 30%;   
    margin-left: 5%;   
}   
.test5>li:first-child{   
    margin: 0;   
}   
</style>   
<p>4.classname实现</p>   
        <ul class="test4 clearfix">   
            <li class="first"><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
        </ul>
登入後複製

: 實動內容到剪貼板

<style type="text/css">   
*{   
    margin: 0;   
    padding: 0;   
}   
img{   
    vertical-align: middle;   
}   
.test1{   
    padding: 0 2%;   
    margin-left: -3.3%;   
}   
ul>li{   
    float: left;   
}   
.test1>li{   
    width: 30%;   
    margin-left: 3.3%;   
}   
ul>li>img{   
    width: 100%;   
}   
.test2>li{   
    width: 33.3%;   
    padding: 0 2%;   
    box-sizing: border-box;   
}   
.test3{   
    display: flex;   
    justify-content: space-between;   
       
}   
.test3>li{   
    width: 31.3%;   
    padding: 0 2%;   
    float: none;   
}   
.test4{   
    padding: 0 2%;   
}   
.test4>li{   
    width: 30%;   
    margin-left: 5%;   
}   
.test4>li.first{   
    margin: 0;   
}   
.test5{   
    padding: 0 2%;   
}   
.test5>li{   
    width: 30%;   
    margin-left: 5%;   
}   
.test5>li:first-child{   
    margin: 0;   
}   
</style>   
<p>5.css选择器实现(注意ie兼容性)</p>   
        <ul class="test5 clearfix">   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="css佈局之負margin妙用及其他實現" ></li>   
        </ul>
登入後複製

: 實作-type-of :nth-child() 這些實現都沒有什麼技術難點,大家可以去查閱一下css文檔,注意一下兼容性沒問題了


CSS Code

複製內容到剪貼板 rrreee

貼上全部的DEMO

 

差點忘了還有一種情況X=2時,設定好width,左邊左浮動,右邊右浮動。

 
其實X=3時,還有一種處理方式,左右元素分別左右浮動,中間元素相對於父級設定絕對定位,居中定位。
 
注意,由於不能整除的原因,不能像box-sizing那樣完美的計算,但是合理的應用在項目上完全沒問題。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持PHP中文網。

更多css佈局之負margin妙用及其他實現相關文章請關注PHP中文網!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vue中怎麼用bootstrap vue中怎麼用bootstrap Apr 07, 2025 pm 11:33 PM

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

HTML,CSS和JavaScript的角色:核心職責 HTML,CSS和JavaScript的角色:核心職責 Apr 08, 2025 pm 07:05 PM

HTML定義網頁結構,CSS負責樣式和佈局,JavaScript賦予動態交互。三者在網頁開發中各司其職,共同構建豐富多彩的網站。

了解HTML,CSS和JavaScript:初學者指南 了解HTML,CSS和JavaScript:初學者指南 Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

bootstrap怎麼寫分割線 bootstrap怎麼寫分割線 Apr 07, 2025 pm 03:12 PM

創建 Bootstrap 分割線有兩種方法:使用 標籤,可創建水平分割線。使用 CSS border 屬性,可創建自定義樣式的分割線。

bootstrap怎麼設置框架 bootstrap怎麼設置框架 Apr 07, 2025 pm 03:27 PM

要設置 Bootstrap 框架,需要按照以下步驟:1. 通過 CDN 引用 Bootstrap 文件;2. 下載文件並將其託管在自己的服務器上;3. 在 HTML 中包含 Bootstrap 文件;4. 根據需要編譯 Sass/Less;5. 導入定製文件(可選)。設置完成後,即可使用 Bootstrap 的網格系統、組件和样式創建響應式網站和應用程序。

bootstrap怎麼插入圖片 bootstrap怎麼插入圖片 Apr 07, 2025 pm 03:30 PM

在 Bootstrap 中插入圖片有以下幾種方法:直接插入圖片,使用 HTML 的 img 標籤。使用 Bootstrap 圖像組件,可以提供響應式圖片和更多樣式。設置圖片大小,使用 img-fluid 類可以使圖片自適應。設置邊框,使用 img-bordered 類。設置圓角,使用 img-rounded 類。設置陰影,使用 shadow 類。調整圖片大小和位置,使用 CSS 樣式。使用背景圖片,使用 background-image CSS 屬性。

bootstrap按鈕怎麼用 bootstrap按鈕怎麼用 Apr 07, 2025 pm 03:09 PM

如何使用 Bootstrap 按鈕?引入 Bootstrap CSS創建按鈕元素並添加 Bootstrap 按鈕類添加按鈕文本

bootstrap怎麼調整大小 bootstrap怎麼調整大小 Apr 07, 2025 pm 03:18 PM

要調整 Bootstrap 中元素大小,可以使用尺寸類,具體包括:調整寬度:.col-、.w-、.mw-調整高度:.h-、.min-h-、.max-h-

See all articles