目錄
一、顯示(display)
1.1 盒子模型(box-model)
1.2 行內元素(inline) & 塊元素(block)
1.3 行內塊元素(inline-block IE8+ IE6-7/tools)
1.4 彈性盒子(flex IE11+ IE10/-ms-)
1.5 none
二、位置(position)
三、补充
3.1 浮动(float)
3.2 层叠(z-index)
3.3 溢出(overflow)
3.4 resize(notIE)(CSS3)
3.5 分栏(column)(IE10+ notOperaMini)(CSS3)
结语
首頁 web前端 css教學 前端總結·基礎篇·CSS佈局

前端總結·基礎篇·CSS佈局

Feb 20, 2017 am 10:58 AM
css佈局

這是《前端總結·基礎篇·CSS》系列的第一篇,主要總結一下版面的基礎知識。

一、显示(display)
    1.1 盒模型(box-model)
    1.2 行内元素(inline) & 块元素(block)
    1.3 行内块元素(inline-block IE8+ IE6-7/tools)
    1.4 flex(IE11+ IE10/-ms-)
    1.5 none
二、位置(position)
三、补充
    3.1 浮动(float)
    3.2 层叠(z-index)
    3.3 溢出(overflow)
    3.4 resize(notIE)(CSS3)
    3.5 分栏(column)(IE10+ notOperaMini)(CSS3)
登入後複製

一、顯示(display)

1.1 盒子模型(box-model)

看圖了解盒模

前端总结·基础篇·CSS布局

盒子模型包括內容(content)、填滿(padding)、邊框(border)、邊距(margin)。我們給元素設定的高度,是內容(content)的高度。再給元素添加填充(padding),元素看起來會更高。

以下是一個盒模型的示範實例,在Google瀏覽器中查看盒模型可以使用 右鍵>屬性>Computed 的方式進行檢視。

<p class="box-model">box-model</p>

.box-model {
    border: 1px solid red;
    padding: 20px;
}
登入後複製

以邊框為界的盒子模型

有些時候,我們不希望給元素添加填充(padding)時,元素的高度會改變,這樣不利於我們進行佈局。可以把元素的盒子模型,設定成以邊框(border)為界的盒子模型(box-sizing:border-box;)。在IE的怪異模式下,預設使用了這種盒模型。

下面是一個範例。

前端总结·基础篇·CSS布局

<p class="box-model">box-model</p>

.box-model {
    box-sizing: border-box;  /* 设置成以边框为界的盒模型 */
    border: 1px solid red;
    height: 80px;
    padding: 10px;
}
登入後複製

1.2 行內元素(inline) & 塊元素(block)

佈局一般都用塊元素

區塊元素可以設定寬高,預設佔據一行。行內元素不能設定寬高,寬度由其內容決定。

區塊元素預設沒高度,有內容才會有高度。行內元素預設沒高度和寬度,有內容才會有。行內元素雖然不能設定寬高,但是設定成絕對定位(absolute)後,可以設定寬高。 (定位在第二節講)

前端总结·基础篇·CSS布局

块元素:p p ul li table form html5(header section footer)。
行内元素:a font(em strong i) img span。
登入後複製

區塊元素可以變成行內元素

我們通常會將li變成行內元素製作導覽列。

<ul class="nav">
    <li>首页</li>
    <li>文章</li>
    <li>留言</li>
</ul>

.nav li {
    display: inline;
}
登入後複製

一行只有一個區塊元素

但是,行內元素可以有多個。

空的區塊元素將在佈局中消失

在偵錯頁面的時候想要顯示元素在佈局中的位置,我們通常會為元素添加一個高度。

行內元素內容為空也會在佈局中消失(不建議為空)。

1.3 行內塊元素(inline-block IE8+ IE6-7/tools)

相容性是支援>=IE8,IE6-7請參閱專注WEB前端開發。

清除兩元素間隙

兩元素間隙來自元素間的空格,拼接元素即可消除。也可以用過使用模板來消除。更多討論請見知乎。

<ul class="nav">
    <li>首页</li><li>
    文章</li><li>
    留言</li>
</ul>
登入後複製

特殊情況下的元素對齊

三個li並列,都設定成inline-block。當最左邊的元素設定display:none;時,其他兩個li會下沉到容器的底部。此時,需要對這兩個li設定頂部對齊(vertical-align:top;)。

<ul class="nav" id="nav">
    <li class="left"><p class="hidden">首页</p></li>
    <li class="center"><p>文章</p></li>
    <li class="right"><p>留言</p></li>
</ul>

.hidden {display: none;}
.left {height: 50px;}
.center,.right {vertical-align: top;}
登入後複製

1.4 彈性盒子(flex IE11+ IE10/-ms-)

相容性是支援>=IE11,IE10需要新增瀏覽器私有前綴(-ms-)。

使用彈性佈局

使用了彈性佈局,float clear vertical將失效。更多請見阮一峰的部落格。

display:flex;  // 块元素用
display:inline-flex;  // 行内元素用
登入後複製

彈性佈局設定

這些就暫時當作參考手冊吧。

flex-direction:row/row-reverse/column/column-reverse;  // 方向
flex-wrap:nowrap/wrap/wrap-reverse;  // 换行
flex-flow:direction/wrap;  // 方向和换行的简写,默认为flex-flow:row nowrap;
justify-content:flex-start/center/flex-end/space-between/space-around;  // 主轴(默认为水平轴)
align-items:flex-start/center/flex-end/baseline/stretch;  // 交叉轴
align-contents:flex-start/center/flex-end/space-between/space-around/stretch;  // 多条轴线的对齐方式(单条无效)
order:number;  // 顺序(默认为0)
flex-grow:number;  // 宽度有余时放大比例(默认为0)
flex-shrink:number;  // 宽度有余时缩小比例(默认为1)
flex-basis:number/auto;  // 分配多余空间前,项目占据的主轴空间(默认auto)
flex:grow/shrink/basis;  // grow shrink basis三个属性的缩写
align-self:auto/flex-start/center/flex-end/baseline/stretch;;  // 单个项目的对齐方式,可覆盖align-items(默认auto)
登入後複製

主軸(justify-content)只能居中單行元素

那多行怎麼辦呢?我們可以把多行嵌套在一個p中,建構出單行元素。

下面是一個水平和垂直居中的一個實例。

<p class="parent">
    <p class="child">
        <p>两行都会</p>
        <p>居中</p>
    </p>
</p>

.parent {
    display: flex;  /* 使用flex布局 */
    align-items: center;  /* 交叉轴居中 */
    justify-content: center;  /* 主轴(默认为水平轴)居中 */
    background: red;
    height: 200px;
}
登入後複製

1.5 none

隱藏元素

以下兩種方法都可以隱藏元素,但是display:none;會清除原本佔用的佈局空間。

visibility:hidden;  // 隐藏元素
display:none;  // 隐藏元素并清除原本占用的布局空间
登入後複製

二、位置(position)

絕對(absolute)、相對(relative)和固定(fixed)定位,都可以使用top,right,left,bottom元素。但是表示的意義卻各不相同。

清除佈局空間的定位(absolute fixed)

固定定位(fixed)不會隨著滑鼠的滾動而改變位置。他真的是固定螢幕的某個位置的,比較常見的是網頁右下角的廣告。

絕對定位(absolute)的定位原點是非預設定位(static)的父節點。可以是absolute fixed relative,如果父節點沒有這些,那定位原點就是body了。使用了這兩種定位中的一種,元素原本佔用的佈局空間將會消失(脫離文檔流)。

下面是絕對定位(absolute)的一個例子。左圖是預設佈局,右圖是使用絕對定位(absolute)之後的(元素原本的佈局空間被清除)。

前端总结·基础篇·CSS布局
前端总结·基础篇·CSS布局

<p class="border">I'm in front of you.</p>
<p class="parent">Hello</p>
<p class="border">I'm next to you.</p>

.border {
    border: 1px solid blue;
}
.parent {
    position: absolute;
    left: 20px;
    top: 20px;
    background-color: red;
    padding: 5px;
}
登入後複製

保留布局空间的定位(relative)

元素原本占用的布局空间依旧保留在文档流中。

前端总结·基础篇·CSS布局

相对定位(relative)相对原有位置定位。把上例中的absolute改成relative即可看到效果。使用这种方法,元素原本占用的布局会保留。

默认定位

默认定位为static。

巧用relative+absolute定位

父级采用relative,子代采用absolute。则子代的定位原点变为父级元素的左上角。

三、补充

3.1 浮动(float)

刚开始做页面的时候,还不知道浮动用了之后得清除,只气的想要砸键盘。现在好多了,知道了点技巧。更多技巧请见Tomson。

清除浮动(.clear)

这种方法需要在浮动元素后面添加一个空的节点,然后写上clear属性。兼容IE6需要添加zoom:1;。

<ul class="nav">
    <li>首页</li>
    <li>文章</li>
    <li>留言</li>
</ul>
<p class="clear"></p> <!--用来清楚浮动的空元素-->
<p>我是另外一行</p>

.nav li {
    background-color: red;
    float: left;
    list-style-type: none;
}
.clear {
    clear: both;
    zoom:1;  /* IE 6 */
}
登入後複製

清除浮动(overflow:hidden;)

使用这种方法意味着,浮动元素得有一个父元素,并给父元素添加overflow:hidden;属性。

<ul class="nav">
    <li>首页</li>
    <li>文章</li>
    <li>留言</li>
</ul>
<p>我是另外一行</p>

.nav li {
    background-color: red;
    float: left;
    list-style-type: none;
}
.nav {
    overflow: hidden;
}
登入後複製

文字环绕

浮动元素的另外一个妙用是实现文字环绕。

前端总结·基础篇·CSS布局

<p class="article">
    <p class="photo"></p>
    <p>这段文字很长,是用来测试文字环绕的。图片的占位将用p块来模拟。这段文字很长,是用来测试文字环绕的。图片的占位将用p块来模拟。</p>
</p>

.article {
    width: 200px;
}
.photo {
    width: 60px;
    height: 60px;
    background-color: red;
    float: right;
}
登入後複製

3.2 层叠(z-index)

层叠可以控制元素的上下放置关系。值越大越上面。

前端总结·基础篇·CSS布局

<p class="z zOne"></p>
<p class="z zTwo"></p>

.z {
    position: absolute;
    top: 200px;
    left: 200px;
    width: 60px;
    height: 60px;
    background-color: red;
    opacity: .5;  /* 设置透明度为0.5 */
}
.zTwo {
    top: 220px;  /* 和第一个块错开以看到效果 */
    left: 220px;
    background-color: blue;
    opacity: .5;
}
登入後複製

3.3 溢出(overflow)

当页面内存在多个业内选项卡的时候,从一个没有右边滚动条的页面达到一个有滚动条的页面,将会产生页面跳动。解决办法是默认设置显示右边的滚动条。

overflow-x:visibility;
登入後複製

3.4 resize(notIE)(CSS3)

定义用户是否可调整当前元素的边框大小。

resize: horizontal(水平)/vertical(垂直)/both/none/inherit;
登入後複製

3.5 分栏(column)(IE10+ notOperaMini)(CSS3)

兼容性是IE>=10,不支持opera mini。更多请见菜鸟教程。

前端總結·基礎篇·CSS佈局

<p>这一段文字用来测试分栏。这一段文字用来测试分栏。这一段文字用来测试分栏。</p>

p {
    width: 200px;  /* 把段落的宽度设短一点,便于效果的展现 */
    column-count: 3;  /* 设定需要分几栏 */
    column-gap: 20px;  /* 设定两栏间隔 */
}
登入後複製

结语

这一节主要参考了学习CSS布局,阮一峰的博客,Tomson,专注WEB前端开发,菜鸟教程,知乎和我在看的一本书《CSS设计指南》。

第一次写前端方面的长文章。写了改,改了写,然后继续改,又继续写。如此循环往复,只为让用词用句更加恰当一些。文中有什么不恰当的地方,还望指出。

更多前端总结·基础篇·CSS布局 相关文章请关注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)

前端面試官常問的問題 前端面試官常問的問題 Mar 19, 2024 pm 02:24 PM

在前端開發面試中,常見問題涵蓋廣泛,包括HTML/CSS基礎、JavaScript基礎、框架和函式庫、專案經驗、演算法和資料結構、效能最佳化、跨域請求、前端工程化、設計模式以及新技術和趨勢。面試官的問題旨在評估候選人的技術技能、專案經驗以及對行業趨勢的理解。因此,應試者應充分準備這些方面,以展現自己的能力和專業知識。

CSS佈局單位的演變與應用:從像素到根據根元素字體大小的相對單位 CSS佈局單位的演變與應用:從像素到根據根元素字體大小的相對單位 Jan 05, 2024 pm 05:41 PM

從px到rem:CSS佈局單位的演變與應用引言:在前端開發中,我們經常需要用到CSS來實現頁面佈局。在過去的幾年間,CSS佈局單位也經歷了演變和發展。最開始我們使用的是像素(px)作為單位來設定元素的大小和位置。然而,隨著響應式設計的興起和行動裝置的普及,像素單位逐漸暴露出一些問題。為了解決這些問題,新的單位rem應運而生,並逐漸廣泛應用於CSS佈局中。一

CSS佈局技巧:實現圓形網格圖示佈局的最佳實踐 CSS佈局技巧:實現圓形網格圖示佈局的最佳實踐 Oct 20, 2023 am 10:46 AM

CSS佈局技巧:實現圓形網格圖示佈局的最佳實踐在現代網頁設計中,網格佈局是一種常見且強大的佈局技術。而圓形網格圖示佈局則是更獨特有趣的設計選擇。本文將介紹一些最佳實踐和具體程式碼範例,幫助你實現圓形網格圖示佈局。 HTML結構首先,我們需要設定一個容器元素,在這個容器裡放置圖示。我們可以使用一個無序列表(&lt;ul&gt;)作為容器,列表項目(&lt;l

CSS Positions佈局實現響應式圖片排版的方法 CSS Positions佈局實現響應式圖片排版的方法 Sep 26, 2023 pm 01:37 PM

CSSPositions佈局實現響應式圖片排版的方法在現代Web開發中,響應式設計已成為必備的技能。而在響應式設計中,圖片排版是一個重要的考量因素之一。本文將介紹如何使用CSSPositions佈局實現響應式圖片排版,並提供具體的程式碼範例。 CSSPositions是CSS的一種佈局方式,它可以讓我們根據需要在網頁中任意定位元素。在響應式圖片排版中,

如何透過純CSS實現瀑布流佈局的方法與技巧 如何透過純CSS實現瀑布流佈局的方法與技巧 Oct 20, 2023 pm 06:01 PM

如何透過純CSS實現瀑布流佈局的方法和技巧瀑布流佈局(WaterfallLayout)是一種在網頁設計中常見的佈局方式,它透過將內容以多列的方式排列,每一列的高度不一致,從而形成像瀑布般的視覺效果。這種佈局常常被應用於圖片展示、商品展示等需要展示大量內容的情境中,具有良好的使用者體驗。實作瀑布流佈局的方法有很多種,可以使用JavaScript或CSS來完成。

CSS版面技巧:實現堆疊卡片效果的最佳實踐 CSS版面技巧:實現堆疊卡片效果的最佳實踐 Oct 22, 2023 am 08:19 AM

CSS版面技巧:實現堆疊卡片效果的最佳實踐在現代網頁設計中,卡片式佈局成為了一種非常流行的設計趨勢。卡片佈局能夠有效地展示訊息,提供良好的使用者體驗,並且方便響應式設計。在這篇文章中,我們將分享一些實現堆疊卡片效果的最佳CSS佈局技巧,同時提供具體的程式碼範例。使用Flexbox佈局Flexbox是CSS3中引入的一種強大的佈局模型。它能夠輕鬆地實現堆疊卡片效果

CSS版面教學:實現聖杯佈局的最佳方法 CSS版面教學:實現聖杯佈局的最佳方法 Oct 19, 2023 am 10:19 AM

CSS佈局教學:實現聖杯佈局的最佳方法,附帶程式碼範例引言:在網頁開發中,佈局是非常重要的一部分。好的佈局能夠使網頁達到更好的可讀性和可訪問性。其中,聖杯佈局是一種非常經典的佈局方式,它能夠在實現自適應的情況下使內容居中,並保持優雅的顯示效果。本文將為大家介紹如何使用最佳的方法實現聖杯佈局,並給出具體的程式碼範例。一、什麼是聖杯佈局?聖杯佈局是一種常見的三欄佈局,

CSS佈局指南:實現網格佈局的最佳實踐 CSS佈局指南:實現網格佈局的最佳實踐 Oct 26, 2023 am 10:00 AM

CSS佈局指南:實現網格佈局的最佳實踐引言:在現代網頁設計中,網格佈局已經成為一種非常流行的佈局方式。它可以幫助我們更好地組織頁面結構,使其更有層次感和可讀性。本篇文章將介紹網格佈局的最佳實踐,以及具體的程式碼範例,幫助你更好地實現網格佈局。一、什麼是網格佈局?網格佈局是指透過網格將頁面分成多個列和行,使得頁面的元素可以方便地按照一定的規律進行排列。網格佈局

See all articles