搞清水平等距排列——九宮格

組合使用 float 和 負(fù)margin 就能完成水平等距排列效果,但在我手里貌似不那么聽話,總是跑偏不到中間位置,說明我還不那么懂它,那就分析一下問題所在。

水平等距排列效果制作過程

步驟1:創(chuàng)建并初始化測試代碼

  • 為了便于觀察,給每一個(gè)元素添加border或background-color,以此區(qū)分嵌套層級
    得到如下代碼:
-----------html部分-----------------
<body>
  <ul>
    <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li>
  </ul>
</body>
-----------CSS部分-----------------
  <style>
 * {margin: 0; padding: 0;}
ul,li {list-style: none;}
ul {border: 2px blue solid; width: 320px; padding: 10px;}
li {background-color: red; width: 100px; height: 100px;}
  </style>
有9個(gè)那么長,大概900px

步驟2:初步實(shí)現(xiàn)樣式、尋找問題

  • 標(biāo)簽 li :添加 float 、margin
  • 標(biāo)簽 ul :添加 負(fù)margin
    增加的代碼如下:
-----------CSS部分-----------------
  <style>
    ul {margin-left: -10px; overflow: hidden;}
    li {float: left; margin-left: 10px;}
  </style>
這個(gè)結(jié)果不是我想要的
  • 很顯然沒有得到想要的結(jié)果,仔細(xì)對比一下發(fā)現(xiàn)存在兩個(gè)問題:
  1. 步驟2中的 "標(biāo)簽ul" - margin: -10px; 覆蓋了步驟1中 "標(biāo)簽ul" - margin: 0 auto; 造成 "標(biāo)簽li" 無法居中,卻被 "標(biāo)簽ul" 拉偏了位置
  2. "標(biāo)簽ul" 本身寬度不足以放下 "帶有左邊框的3個(gè)標(biāo)簽li",所以也沒有按九宮格順序排列

3.解決問題

  1. 首先,CSS代碼由上至下按序排列,造成下方代碼會覆蓋上方代碼,所以margin無法調(diào)序,但可以使用 "標(biāo)簽div" 包裹 "標(biāo)簽ul" ,再去實(shí)現(xiàn)居中就容易得多
  2. 其次,需要改變 "標(biāo)簽ul" 的最小寬度,使其內(nèi)部可以在以行內(nèi)放下 "帶有左邊框的3個(gè)標(biāo)簽li"
    代碼修改部分
-----------html部分-----------------
<div class="box">
  <ul> 
    <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li>
  </ul>
</div>
-----------CSS部分-----------------
<style>
  .box {width: 320px; margin: 0 auto;} /*增加width、margin*/
  ul {width: 330px; /*width: 320px;*/ /*margin: 0 auto;*/} /*修改width,刪除margin*/
</style>
顯然問題解決了,但不夠美

4.美化:使其更像九宮格

美化一下,使其看起來更像九宮格,增加代碼如下

-----------CSS部分-----------------
  <style>
    li {margin: 5px 0 5px 10px;}
  </style>
九宮格出來了

5.幾句解釋

現(xiàn)在 "標(biāo)簽li" 在 "標(biāo)簽div" 中基本上算是居中了,但左右還是存在縫隙,這是因?yàn)樗性囟荚O(shè)有邊框,而邊框是要占位置的,"標(biāo)簽div" 在屏幕正中央,但 "標(biāo)簽ul" 會將 "標(biāo)簽li" 向右拖移2px,此時(shí)去掉 "標(biāo)簽ul" 的邊框才是想要的最終節(jié)果, "標(biāo)簽li" 水平等距排列并且居中了

- 最后的總結(jié)

  • 1.水平等距排列,是需要三層的
    最內(nèi)層負(fù)責(zé)浮動(dòng)
    中間層負(fù)責(zé)偏移
    最外層作為參照物制造錯(cuò)覺,讓最內(nèi)層看起來是水平等距排列;最后利用合適的方法,將這個(gè)整體固定在頁面上
  • 2.它們的寬度問題
    最內(nèi)層子元素寬度根據(jù)實(shí)際需求設(shè)定寬度
    中間層寬度最小寬度 = 帶邊框的最內(nèi)層子元素寬度 * N(根本不用設(shè)置寬度)
    最外層寬度 = 中間層寬度 - 一個(gè)邊框?qū)挾?/li>
本文章著作權(quán)歸饑人谷_蠻力拳貓和饑人谷所有,轉(zhuǎn)載須說明來源!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容