慕課網(wǎng)筆記7 css 居中設(shè)置

  • 水平居中設(shè)置-行內(nèi)元素

我們?cè)趯?shí)際工作中常會(huì)遇到需要設(shè)置水平居中的場(chǎng)景,比如為了美觀,文章的標(biāo)題一般都是水平居中顯示的传藏。
這里我們又得分兩種情況:行內(nèi)元素 還是 塊狀元素 ,塊狀元素里面又分為定寬塊狀元素彤守,以及不定寬塊狀元素毯侦。今天我們先來(lái)了解一下行內(nèi)元素怎么進(jìn)行水平居中?
如果被設(shè)置元素為文本具垫、圖片等行內(nèi)元素時(shí)侈离,水平居中是通過(guò)給父元素設(shè)置 text-align:center
來(lái)實(shí)現(xiàn)的。(父元素和子元素:如下面的html代碼中筝蚕,div是“我想要在父容器中水平居中顯示”這個(gè)文本的父元素卦碾。反之這個(gè)文本是div的子元素 )如下代碼:
html代碼:

<body> 
     <div class="txtCenter">我想要在父容器中水平居中顯示。
     <div class="imgCenter">![](http://upload-images.jianshu.io/upload_images/1523426-302aac27f584264a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</div>
</div>
</body>

css代碼:

<style>
         .txtCenter { text-align:center; }
         .imgCenter { text-align:center;}
}
</style>
  • 水平居中設(shè)置-定寬塊狀元素

當(dāng)被設(shè)置元素為 塊狀元素 時(shí)用 text-align:center就不起作用了注1起宽,這時(shí)也分兩種情況:定寬塊狀元素和不定寬塊狀元素洲胖。

我自己測(cè)試當(dāng)設(shè)置<a>標(biāo)簽設(shè)置display:block后如果不設(shè)置width時(shí) text-aling:center有效, 當(dāng)設(shè)置width時(shí)center將顯示為<a>標(biāo)簽內(nèi)容在寬度內(nèi)居中. 整個(gè)塊將不會(huì)在居中

這一小節(jié)我們先來(lái)講一講定寬塊狀元素。(定寬塊狀元素:塊狀元素的寬度width為固定值坯沪。)
滿足定寬和塊狀兩個(gè)條件的元素是可以通過(guò)設(shè)置“左右margin”值為“auto”來(lái)實(shí)現(xiàn)居中的绿映。我們來(lái)看個(gè)例子就是設(shè)置 div 這個(gè)塊狀元素水平居中:
html代碼:

<body> <div>我是定寬塊狀元素,哈哈腐晾,我要水平居中顯示叉弦。</div></body>

css代碼:

<style>
div{
    border:1px solid red;/*為了顯示居中效果明顯為 div 設(shè)置了邊框*/  
    width:200px;/*定寬*/
    margin:20px auto;/* margin-left 與 margin-right 設(shè)置為 auto */
}
</style>

也可以寫成:

margin-left:auto;
margin-right:auto;

注意:元素的“上下 margin” 是可以隨意設(shè)置的丐一。

  • 水平居中總結(jié)-不定寬塊狀元素方法(一)

在實(shí)際工作中我們會(huì)遇到需要為“不定寬度的塊狀元素”設(shè)置居中,比如網(wǎng)頁(yè)上的分頁(yè)導(dǎo)航卸奉,因?yàn)榉猪?yè)的數(shù)量是不確定的钝诚,所以我們不能通過(guò)設(shè)置寬度來(lái)限制它的彈性。(不定寬塊狀元素:塊狀元素的寬度width不固定榄棵。)

不定寬度的塊狀元素有三種方法居中(這三種方法目前使用的都很多):

  • 加入 table 標(biāo)簽
  • 設(shè)置 display: inline 方法:與第一種類似,顯示類型設(shè)為 行內(nèi)元素潘拱,進(jìn)行不定寬元素的屬性設(shè)置
  • 設(shè)置 position:relative 和 left:50%:利用 相對(duì)定位 的方式疹鳄,將元素向左偏移 50% ,即達(dá)到居中的目的

這一小節(jié)我們來(lái)講一下第一種方法:
為什么選擇方法一加入table標(biāo)簽? 是利用table標(biāo)簽的長(zhǎng)度自適應(yīng)性---即不定義其長(zhǎng)度也不默認(rèn)父元素body的長(zhǎng)度(table其長(zhǎng)度根據(jù)其內(nèi)文本長(zhǎng)度決定)芦岂,因此可以看做一個(gè)定寬度塊元素瘪弓,然后再利用定寬度塊狀居中的margin的方法,使其水平居中禽最。

  • 第一步:為需要設(shè)置的居中的元素外面加入一個(gè) table 標(biāo)簽 ( 包括 <tbody>腺怯、<tr>、<td> )川无。
  • 第二步:為這個(gè) table 設(shè)置“左右 margin 居中”(這個(gè)和定寬塊狀元素的方法一樣)呛占。
    舉例如下:
    html代碼:
<div>
 <table>
  <tbody>
    <tr><td>
    <ul>
        <li>我是第一行文本</li>
        <li>我是第二行文本</li>
        <li>我是第三行文本</li>
    </ul>
    </td></tr>
  </tbody>
 </table>
</div>

css代碼:

<style>
table{
    border:1px solid;
    margin:0 auto;
}
</style>
  • 水平居中總結(jié)-不定寬塊狀元素方法(二)

除了上一節(jié)講到的插入table標(biāo)簽,可以使不定寬塊狀元素水平居中之外懦趋,本節(jié)介紹第2種實(shí)現(xiàn)這種效果的方法晾虑,改變?cè)氐膁isplay類型為行內(nèi)元素,利用其屬性直接設(shè)置仅叫。
第二種方法:改變塊級(jí)元素的 display 為 inline 類型(設(shè)置為 行內(nèi)元素 顯示)帜篇,然后使用text-align:center
來(lái)實(shí)現(xiàn)居中效果。如下例子:
html代碼:

<body>
<div class="container">
    <ul>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
    </ul>
</div>
</body>

css代碼:

<style>
.container{
   text-align:center;
}
/* margin:0;padding:0(消除文本與div邊框之間的間隙)*/
.container ul{
   list-style:none;
   margin:0;
   padding:0;
   display:inline;
}
/* margin-right:8px(設(shè)置li文本之間的間隔)*/
.container li{
   margin-right:8px;
   display:inline;
}
</style>

這種方法相比第一種方法的優(yōu)勢(shì)是不用增加無(wú)語(yǔ)義標(biāo)簽诫咱,但也存在著一些問(wèn)題:它將塊狀元素的 display 類型改為 inline笙隙,變成了行內(nèi)元素,所以少了一些功能坎缭,比如設(shè)定長(zhǎng)度值竟痰。

  • 水平居中總結(jié)-不定寬塊狀元素方法(三)

除了前兩節(jié)講到的插入table標(biāo)簽,以及改變?cè)氐膁isplay類型幻锁,可以使不定寬塊狀元素水平居中之外凯亮,本節(jié)介紹第3種實(shí)現(xiàn)這種效果的方法,設(shè)置浮動(dòng)和相對(duì)定位來(lái)實(shí)現(xiàn)哄尔。

方法三:通過(guò)給父元素設(shè)置 float假消,然后給父元素設(shè)置 position:relative 和 left:50%,子元素設(shè)置 position:relative 和 left: -50% 來(lái)實(shí)現(xiàn)水平居中岭接。

我們可以這樣理解:假想ul層的父層(即下面例子中的div層)中間有條平分線將ul層的父層(div層)平均分為兩份富拗,ul層的css代碼是將ul層的最左端與ul層的父層(div層)的平分線對(duì)齊臼予;而li層的css代碼則是將li層的平分線與ul層的最左端(也是div層的平分線)對(duì)齊,從而實(shí)現(xiàn)li層的居中啃沪。

代碼如下:

<body>
<div class="container">
    <ul>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
    </ul>
</div>
</body>

css代碼:

<style>
.container{
    text-align:center;
}
/* margin:0;padding:0(消除文本與div邊框之間的間隙)*/
.container ul{
    list-style:none;
    margin:0;
    padding:0;
    display:inline;
}
/* margin-right:8px(設(shè)置li文本之間的間隔)*/
.container li{
    margin-right:8px;
    display:inline;
}
</style>

這三種方法使用得都非常廣泛粘拾,各有優(yōu)缺點(diǎn),具體選用哪種方法创千,可以視具體情況而定缰雇。

  • 垂直居中-父元素高度確定的單行文本

我們?cè)趯?shí)際工作中也會(huì)遇到需要設(shè)置垂直居中的場(chǎng)景,比如好多報(bào)紙的文章標(biāo)題在左右一側(cè)時(shí)追驴,常常會(huì)設(shè)置為垂直居中械哟,為了用戶體驗(yàn)性好。
這里我們又得分兩種情況:父元素高度確定的單行文本殿雪,以及父元素高度確定的多行文本暇咆。

本節(jié)我們先來(lái)看第一種父元素高度確定的單行文本, 怎么設(shè)置它為垂直居中呢?
父元素高度確定的單行文本的豎直居中的方法是通過(guò)設(shè)置父元素的 height 和 line-height 高度一致來(lái)實(shí)現(xiàn)的丙曙。(height: 該元素的高度爸业,line-height: 顧名思義,行高(行間距)亏镰,指在文本中扯旷,行與行之間的 基線間的距離 )。
line-height 與 font-size 的計(jì)算值之差拆挥,在 CSS 中成為“行間距”薄霜。分為兩半,分別加到一個(gè)文本行內(nèi)容的頂部和底部纸兔。

這種文字行高與塊高一致帶來(lái)了一個(gè)弊端:當(dāng)文字內(nèi)容的長(zhǎng)度大于塊的寬時(shí)惰瓜,就有內(nèi)容脫離了塊。

如下代碼:

<div class="container"> 
      hi,imooc!
</div>

css代碼:

<style>
.container{
    height:100px;
    line-height:100px;
    background:#999;
}
</style>
  • 垂直居中-父元素高度確定的多行文本(方法一)

父元素高度確定的多行文本汉矿、圖片等的豎直居中的方法有兩種:

方法一:使用插入 table (包括tbody崎坊、tr、td)標(biāo)簽洲拇,同時(shí)設(shè)置 vertical-align:middle奈揍。

css 中有一個(gè)用于豎直居中的屬性 vertical-align,在父元素設(shè)置此樣式時(shí)赋续,會(huì)對(duì)inline-block類型的子元素都有用男翰。下面看一下例子:
html代碼:

<body>
      <table>
          <tbody>
               <tr>
                   <td class="wrap">
                    <div> 
                       <p>看我是否可以居中。</p>
                   </div>
                 </td>
             </tr>
         </tbody>
    </table>
</body>

css代碼:

table td{height:500px;background:#ccc}

因?yàn)?td 標(biāo)簽?zāi)J(rèn)情況下就默認(rèn)設(shè)置了 vertical-align 為 middle纽乱,所以我們不需要顯式地設(shè)置了蛾绎。

  • 垂直居中-父元素高度確定的多行文本(方法二)

除了上一節(jié)講到的插入table標(biāo)簽,可以使父元素高度確定的多行文本垂直居中之外,本節(jié)介紹另外一種實(shí)現(xiàn)這種效果的方法租冠。但這種方法兼容性比較差鹏倘,只是提供大家學(xué)習(xí)參考。

在 chrome顽爹、firefox 及 IE8 以上的瀏覽器下可以設(shè)置塊級(jí)元素的 display 為 table-cell(設(shè)置為表格單元顯示)纤泵,激活 vertical-align 屬性,但注意 IE6镜粤、7 并不支持這個(gè)樣式, 兼容性比較差捏题。

html代碼:

<div class="container">
    <div>
        <p>看我是否可以居中。</p>
        <p>看我是否可以居中繁仁。</p>
        <p>看我是否可以居中涉馅。</p>
    </div>
</div>

css代碼:

<style>
.container{
    height:300px;
    background:#ccc;
    display:table-cell;/*IE8以上及Chrome、Firefox*/
    vertical-align:middle;/*IE8以上及Chrome黄虱、Firefox*/
}
</style>

這種方法的好處是不用添加多余的無(wú)意義的標(biāo)簽,但缺點(diǎn)也很明顯庸诱,它的兼容性不是很好捻浦,不兼容 IE6、7而且這樣修改display的block變成了table-cell桥爽,破壞了原有的塊狀元素的性質(zhì)朱灿。

  • 隱性改變display類型

有一個(gè)有趣的現(xiàn)象就是當(dāng)為元素(不論之前是什么類型元素,display:none 除外)設(shè)置以下 2 個(gè)句之一:

  1. position : absolute
  2. float : left 或 float:right
    簡(jiǎn)單來(lái)說(shuō)钠四,只要html代碼中出現(xiàn)以上兩句之一盗扒,元素的display顯示類型就會(huì)自動(dòng)變?yōu)橐?display:inline-block(塊狀元素)的方式顯示,當(dāng)然就可以設(shè)置元素的 width 和 height 了缀去,且默認(rèn)寬度不占滿父元素侣灶。

如下面的代碼,小伙伴們都知道 a 標(biāo)簽是 行內(nèi)元素 缕碎,所以設(shè)置它的 width 是 沒(méi)有效果的褥影,但是設(shè)置為 position:absolute 以后,就可以了咏雌。

<div class="container"> 
       <a href="#" title="">進(jìn)入課程請(qǐng)單擊這里</a>
</div>

css代碼

<style>
    .container a { 
       position:absolute; width:200px; background:#ccc;
}
</style>

想不起 display:inline-block 是做什么的小伙伴們凡怎,單擊“元素分類--內(nèi)聯(lián)塊狀元素”可返回到前面小節(jié)進(jìn)行復(fù)習(xí)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赊抖,一起剝皮案震驚了整個(gè)濱河市统倒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌氛雪,老刑警劉巖房匆,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡坛缕,警方通過(guò)查閱死者的電腦和手機(jī)墓猎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)赚楚,“玉大人毙沾,你說(shuō)我怎么就攤上這事〕枰常” “怎么了左胞?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)举户。 經(jīng)常有香客問(wèn)我烤宙,道長(zhǎng),這世上最難降的妖魔是什么俭嘁? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任躺枕,我火速辦了婚禮,結(jié)果婚禮上供填,老公的妹妹穿的比我還像新娘拐云。我一直安慰自己,他們只是感情好近她,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布叉瘩。 她就那樣靜靜地躺著,像睡著了一般粘捎。 火紅的嫁衣襯著肌膚如雪薇缅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天攒磨,我揣著相機(jī)與錄音泳桦,去河邊找鬼。 笑死咧纠,一個(gè)胖子當(dāng)著我的面吹牛蓬痒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漆羔,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼梧奢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了演痒?” 一聲冷哼從身側(cè)響起亲轨,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸟顺,沒(méi)想到半個(gè)月后惦蚊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體器虾,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蹦锋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兆沙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡莉掂,死狀恐怖葛圃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情憎妙,我是刑警寧澤库正,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站厘唾,受9級(jí)特大地震影響褥符,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抚垃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一喷楣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鹤树,春花似錦抡蛙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惋耙。三九已至捣炬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绽榛,已是汗流浹背湿酸。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留灭美,地道東北人推溃。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像届腐,于是被迫代替她去往敵國(guó)和親铁坎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • 問(wèn)答題47 /72 常見瀏覽器兼容性問(wèn)題與解決方案犁苏? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,754評(píng)論 1 92
  • 一 外部式css樣式 (也可稱為外聯(lián)式)就是把css代碼寫一個(gè)單獨(dú)的外部文件中硬萍,這個(gè)css樣式文件以“.css...
    KunMitnic閱讀 941評(píng)論 0 1
  • 本文主要是起筆記的作用,內(nèi)容來(lái)自慕課網(wǎng). 認(rèn)識(shí)CSS樣式 CSS全稱為“層疊樣式表 (Cascading Styl...
    0o凍僵的企鵝o0閱讀 2,646評(píng)論 0 30
  • CSS格式化排版 1围详、字體 我們可以使用css樣式為網(wǎng)頁(yè)中的文字設(shè)置字體朴乖、字號(hào)祖屏、顏色等樣式屬性。下面我們來(lái)看一個(gè)例...
    張文靖同學(xué)閱讀 1,287評(píng)論 0 3
  • 一买羞、CSS盒模型 1袁勺、元素分類:html標(biāo)簽中元素分為塊狀元素、內(nèi)聯(lián)元素(行內(nèi)元素)和內(nèi)聯(lián)塊狀元素畜普。 常用塊狀元素...
    遠(yuǎn)遠(yuǎn)暖暖閱讀 519評(píng)論 0 0