聖杯佈局和雙飛翼佈局的實現過程

来源:https://www.cnblogs.com/honghebin/archive/2018/01/11/8270855.html
-Advertisement-
Play Games

相信很多人都搜過聖杯佈局和雙飛翼佈局,也知道他們的由來,在這裡我就不一一贅述了,今天主要講的是當我遇到兩個佈局時,我是怎樣一步一步從開始到實現的過程,例如:剛開始我也不懂為什麼聖杯佈局和雙飛翼佈局的區別,不懂聖杯佈局為什麼會有相對定位等一些問題,在這裡給大家講下我的理解,如有錯誤,歡迎批評指正。 好 ...


相信很多人都搜過聖杯佈局和雙飛翼佈局,也知道他們的由來,在這裡我就不一一贅述了,今天主要講的是當我遇到兩個佈局時,我是怎樣一步一步從開始到實現的過程,例如:剛開始我也不懂為什麼聖杯佈局和雙飛翼佈局的區別,不懂聖杯佈局為什麼會有相對定位等一些問題,在這裡給大家講下我的理解,如有錯誤,歡迎批評指正。 好了,接下來開始今天的寫文章之旅!   聖杯佈局和雙飛翼佈局實現的問題都是三列佈局,兩邊定寬,中間自適應佈局,要註意的是中間欄(重要的東西)要在放在文檔流前面以優先渲染。   聖杯佈局 1、首先定義三列,為它們設置簡單的css樣式,代碼如下: [html] view plain copy  
  1. <!-- 聖杯佈局 -->  
  2. <!DOCTYPE html>  
  3. <html>  
  4. <head>  
  5. <style>        
  6.        .left{  
  7.             background: #E79F6D;  
  8.             width:150px;  
  9.             float:left;  
  10.         }  
  11.         .main{  
  12.             background: #D6D6D6;  
  13.             width:100%;  
  14.             float:left;   
  15.         }  
  16.         .right{  
  17.             background: #77BBDD;  
  18.             width:190px;  
  19.             float:left;  
  20.         }  
  21. </style>  
  22. </head>  
  23.     <body>  
  24.     <div class="con">  
  25.             <div class="main">Main</div>  
  26.         <div class="left">Left</div>  
  27.             <div class="right">Right</div>  
  28.     </div>  
  29.     </body>  
  30. </html>  
  實現效果圖: 這就是普通的讓三個div左浮動顯示出來的效果;   2、我們讓Left和Right與main在同一排,這裡需要用到margin-left的負值,這裡如果margin-left是負值,我理解的是在此基礎上往左邊移,設置Left的margin-left:-100%,也就是往左移main的整個寬度,這時Left的左邊緣跟main的左邊緣重疊,即Left的150px寬覆蓋住了main的150px寬; 這時Right跑到左邊了,再對Right設置margin-left:-190px;即right也跑到上面去了,Right的右邊緣和main的右邊緣對齊,Right的寬度覆蓋了main的右邊的寬度;現在Left和Right都跑上面去了,但是需要註意的是main的值不見了,因為它被覆蓋了,設置left和right的margin值只是改變Left和Right的位置,對於main來說還是在以前的位置上,接下來要考慮的問題就是如何定位main的位置?   3、需要給con容器加padding值,padding值的作用是給這整個容器均移動padding值,如在剛開始Left和Right沒上移的時候,給con加padding值的效果如下:     現在在Left和Right以及main都在同一排的情況下,加padding的值,就把main的定位到合適的位置了,但是這時的問題是:Left和Right也跟著一起縮了,所以要把Left和Right定位帶之前的位置,該怎麼定位呢?   4、這時Left和Right需要用到css 的left屬性了,left 屬性規定元素的左邊緣,該屬性定義了定位元素左外邊距邊界與其包含塊左邊界之間的偏移。註意使用屬性left的時候要給這個元素定位,絕對定位和相對定位都可以,如果不使用定位的話沒有效果,具體為什麼我也不知道,大家可以自行百度。 Left的css樣式加上:position:relative;left:-150px;  同理css的right屬性也是如此,position:relative;right:-190px;  Left和Right回到它們各自的位置上,OK,完成聖杯的佈局,效果圖貼上:     完整代碼: [html] view plain copy  
  1. <!-- 聖杯佈局 -->  
  2. <!DOCTYPE html>  
  3. <html>  
  4. <head>  
  5. <style>        
  6.         .con {  
  7.             padding-left: 150px;  
  8.         padding-right: 190px;  
  9.         }  
  10.         .left{  
  11.             background: #E79F6D;  
  12.             width:150px;  
  13.             float:left;  
  14.             margin-left: -100%;  
  15.             position: relative;  
  16.             left:-150px;  
  17.         }  
  18.         .main{  
  19.             background: #D6D6D6;  
  20.             width:100%;  
  21.             float:left;   
  22.         }  
  23.         .right{  
  24.             background: #77BBDD;  
  25.             width:190px;  
  26.             float:left;  
  27.             margin-right: -190px;  
  28.             position: relative;  
  29.             right: -190px;  
  30.         }  
  31.   
  32. </style>  
  33.   
  34. </head>  
  35.     <body>  
  36.     <div class="con">  
  37.             <div class="main">Main</div>  
  38.         <div class="left">Left</div>  
  39.             <div class="right">Right</div>  
  40.     </div>  
  41.     </body>  
  42. </html>  
    雙飛翼佈局 雙飛翼佈局可以看成是對聖杯佈局的改進,因為聖杯佈局用到的標簽屬性較多,用著也較麻煩,所以淘寶玉伯大大就提出來雙飛翼的佈局,雙飛翼是把三列佈局比作鳥,中間欄是鳥身,兩邊寬是鳥的兩翼,重要的是鳥的身體擺好,再安兩翼。思路和聖杯佈局一樣,這裡我還是以上一個作例子,用到main,left,right(其實用main  sub  extra更形象)。前兩步都是一樣的,重要的是第三步,在前兩步的完成後已經形成同行排列,只不過main值被覆蓋了,聖杯佈局的第三步是給con容器添加padding屬性,而雙飛翼佈局是為main裡面的內容再加一個div,讓main的內容包含在內層div里, [html] view plain copy  
  1. <body>  
  2.     <div class="con">  
  3.              <div class="main">  
  4.                 <div class="mc">Main</div>  
  5.               </div>  
  6.             <div class="left">Left</div>  
  7.             <div class="right">Right</div>  
  8.     </div>  
  9.     </body>  
這時,只要設置mc的margin屬性就可以實現三列佈局了,而且main也正常顯示;這裡,不用設置con容器的padding屬性,也不用給Left和Right運用left,right屬性,因為設置padding屬性就是為了不覆蓋main的值,現在將main里的內容放在一個div里,再為它設置margin屬性,也就實現了不遮擋main裡面的內容值,因此雙飛翼佈局使用屬性個數減少,看著更簡便。代碼如下: [html] view plain copy  
  1. <!-- 雙飛翼佈局 -->  
  2. <!DOCTYPE html>  
  3. <html>  
  4. <head>  
  5. <style>        
  6.         .left{  
  7.             background: #E79F6D;  
  8.             width:150px;  
  9.             float:left;  
  10.             margin-left: -100%;  
  11.         }  
  12.         .main{  
  13.             background: #D6D6D6;  
  14.             width:100%;  
  15.             float:left;   
  16.         }  
  17.         .mc {  
  18.             margin-left: 150px;  
  19.         }  
  20.         .right{  
  21.             background: #77BBDD;  
  22.             width:190px;  
  23.             float:left;  
  24.             margin-right: -190px;  
  25.         }  
  26.   
  27. </style>  
  28.   
  29. </head>  
  30.     <body>  
  31.     <div class="con">  
  32.             <div class="main">  
  33.                 <div class="mc">Main</div>  
  34.             </div>  
  35.             <div class="left">Left</div>  
  36.             <div class="right">Right</div>  
  37.     </div>  
  38.     </body>  
  39. </html>  

OK,兩個佈局的過程講解結束,謝謝大家,歡迎大家批評指正!
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. Block 1.1 什麼是Block 之前都是對block的簡單實用,這裡重新瞭解下。 代碼塊Block是蘋果在iOS4開始引入的對C語言的擴展,實現匿名函數的特性,Block是一種特殊的數據類型,其可以正常定義變數、作為參數、作為返回值,特殊的,block還可以保存一段代碼,在需要的時候調用 ...
  • 主要涉及類:MediaPlayer(1) 當一個MediaPlayer對象被創建或者調用reset()方法之後,它處於空閑狀態,調用release()方法後處於結束狀態1,一個MediaPlayer對象調用了reset()方法後,再調用其它方法可能會觸發OnErrorListener.onError ...
  • NO是常開(NORMAL OPEN),就是通常即未通電狀態下,是斷開的,通電後在電磁線圈的作用下(吸合)處於閉合狀態。NC是常閉(NORMAL CLOSE),就是通常即未通電狀態下,是閉合的,通電後在電磁線圈的作用下(吸合)處於斷開狀態。 指接觸器、繼電器等電氣開關元件輔助觸點在常態下(未通電時)的 ...
  • 1、activity_main.xml 2、MainActivity.java 3、utils/FileUtils.java 4、utils/UriUtils.java 5、AndroidManifest.xml ...
  • 效果圖: 項目目錄截圖: 1、activity_main.xml 描述: 兩行顯示8個按鈕 2、MainActivity.java 3、dao/DeptDao.java 4、dao/EmpDao.java 5、dao/UsersDao.java 6、entity/TbDept.java 7、enti ...
  • 6、設置顏色單位 L 普通英文單詞 {color : 屬性值red;} 此方法簡單,便捷。但設置的顏色在不同瀏覽器中,可能顯示的顏色出現差異 * 三原色 - 紅、綠、藍 L 顏色的八進位方式 格式:rgb(數字,數字,數字),數字範圍是0 ~ 255 r紅色g綠色b藍色 L 顏色的十六進位方式 格式 ...
  • 項目:https://github.com/ccyinghua/vue-node-mongodb-project/blob/master/07-shoppingCart.md 實時計算屬性的computed功能,實時計算的是屬性,只不過是函數的寫法,data裡面就不用再聲明瞭。computed裡面可 ...
  • var ary = new Array("111", "22", "33", "111"); console.log(arrHasvalue(ary)); //111 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...