Html、CSS、JavaScript
學習web前端開發基礎技術需要掌握:HTML、CSS、JavaScript語言。下面我們就來了解下這三門技術都是用來實現什麼的:
1. HTML是網頁內容的載體。內容就是網頁製作者放在頁面上想要讓用戶瀏覽的信息,可以包含文字、圖片、視頻等。
2. CSS樣式是表現。就像網頁的外衣。比如,標題字體、顏色變化,或爲標題加入背景圖片、邊框等。所有這些用來改變內容外觀的東西稱之爲表現。
3. JavaScript是用來實現網頁上的特效效果。如:鼠標滑過彈出下拉菜單。或鼠標滑過表格的背景顏色改變。還有焦點新聞(新聞圖片)的輪換。可以這麼理解,有動畫的,有交互的一般都是用JavaScript來實現的。
CSS樣式
CSS全稱爲層疊樣式表(CascadingStyle Sheets)它主要是用於定義HTML內容在瀏覽器內的顯示樣式,如文本大小、顏色、字體加粗等。
Css樣式由選擇符和聲明組成,而聲明又由屬性和值組成
選擇符:又稱選擇器,指明網頁中要應用樣式規則的元素。
聲明:在英文大括號中的就是聲明,屬性和值之間用英文冒號分隔。當有多條聲明時,中間可以英文分號分隔。
內聯式CSS樣式,直接寫在現有的HTML標籤中。
CSS樣式可以分爲3種:內聯式、嵌入式、外部式。
內聯式就是把css代碼直接寫在現有html標籤中,並且css樣式代碼要寫在style=””雙引號中,如果有多條css樣式代碼設置可以寫在一起,中間用分號隔開。
<p style=”color:red; font-size:12px”>這裏是紅色文字</p>
嵌入式css樣式,寫在當前的文件中。並且一般情況下寫在<head></head>之間。
嵌入式css樣式,就是可以把css樣式代碼寫在<style type=”text/css”></style>標籤之間。如:
<style type=”text/css”>
Span{
Color:red;
}
</style>
外部式css樣式,寫在單獨的一個文件中。
外部式就是把css代碼寫一個單獨的外部文件中,這個css樣式以“.css”爲擴展名,在<head>內使用<link>標籤將css樣式文件鏈接到HTML文件內,如下面代碼:
<link href=”base.css” rel=”stylesheet”type=”text/css”/>
注意:1.css樣式文件名稱以有意義的英文字母命名,如main.css
2.rel=”stylesheet” type=”text/css” 是固定寫法不可修改。
3.<link> 標籤位置一般寫在<head>標籤之內。
三種方法的優先級
內聯式>嵌入式>外部式
但是嵌入式>外部式有一個前提:嵌入式CSS樣式的位置一定在外部式的後面。如<link href=”xxx.css” …> 代碼在 <style type=”text/css”></style>的前面,實際開發就是這個順序。
標籤選擇器
標籤選擇器其實就是html代碼中的標籤。
類選擇器
類選擇器在css樣式中是最常用到的。
語法: .類選擇器名稱{css樣式代碼;}
注意:
1. 英文圓點開頭
2. 類選擇器可以任意起名(不要起中文);
使用方法:
第一步:使用合適的標籤把要修飾的內容標記起來,如下:
<span>內容</span>
第二步:使用class=”類選擇器名稱”爲標籤設置一個類,如下:
<span class=”stress”>內容</span>
第三步:設置類選擇器css樣式。
.stress{color:red;}/*類前面要加一個圓點*/
ID選擇器
在很多方面,ID選擇器都類似於類選擇器,但也有一些重要區別。
1.爲標籤設置 id=”ID名稱” 而不是 class=”類名稱”
2.ID選擇符的前面是#號,而不是英文圓點。
類和ID選擇器的區別
相同點:可以應用於任何元素
不同點:
1. ID選擇器只能在文檔中使用一次。與類選擇器不同,在一個HTML文檔中,ID選擇器只能使用一次而且僅一次。而類選擇器可以使用多次。
正確的:
<p>三年級時,我還是一個<span class="stress">膽小如鼠</span>的小女孩,上課從來不敢回答老師提出的問題,生怕回答錯了老師會批評我。就一直沒有這個<span class="stress">勇氣</span>來回答老師提出的問題。</p>
錯誤的:
<p>三年級時,我還是一個<span id="stress">膽小如鼠</span>的小女孩,上課從來不敢回答老師提出的問題,生怕回答錯了老師會批評我。就一直沒有這個<span id="stress">勇氣</span>來回答老師提出的問題。</p>
2. 可以使用類選擇器詞列表方法爲一個元素同時設置多個樣式。我們可以爲一個元素同時設置多個樣式,但只可以用類選擇器的方法實現,ID選擇器是不可以的(不能使用ID詞列表)。
下面這種寫法是正確的:
.stress{
color:red;
}
.bigsize{
font-size:25px;
}
<p>到了<span class="stress bigsize">三年級</span>下學期時,我們班上了一節公開課...</p>
子選擇器
子選擇器,即大於符號(>),用於選擇指定標籤元素的第一代子元素。
如: .food>li{border:1px solidred;}
包含(後代)選擇器
包含選擇器,即加入空格,用於選擇指定標籤元素下的後輩元素。
.first span{color:red;}
子選擇器> 作用於元素的第一代後代,空格作用於元素的所有後代。
通用選擇器
通用選擇器是功能最強大的選擇器,它使用一個(*)號指定,它的作用是匹配html中所有標籤元素。
*{color:red;}
僞類選擇符
它允許給html不存在的標籤(標籤的某種狀態)設置樣式,比如我們給html標籤中一個標籤元素的鼠標滑過的狀態來設置字體顏色:
a:hover{color:red;}
關於僞類選擇符,到目前爲止,可以兼容所有瀏覽器的僞類選擇符就是a標籤上使用:hover了,還有很多其他的僞類選擇符,但兼容性不好。
分組選擇符
當你想爲html中多個元素設置同一個樣式時,可以使用分組選擇符(,),如下代碼爲h1 和 span 標籤同時設置字體顏色爲紅色:
H1,span{color:red;}
它相當於下面兩行代碼:
H1{color:red;}
Span{color:red;}
繼承
繼承是一種規則,它允許樣式不僅應用於某個特定html標籤元素,而且應用於其後代。比如下面代碼:如某種顏色應用於p標籤,這個顏色設置不僅應用p標籤,還應用於p標籤中的所有子元素文本,這裏子元素爲span標籤。
p{color:red;}
<p>三年級時,我還是一個<span>膽小如鼠</span>的小女孩。</p>
p中的文本與span中的文本都設置爲了紅色。但注意有一些css樣式是不具有繼承性的。如border:1px solid red;
p{border:1px solid red;}
<p>三年級時,我還是一個<span>膽小如鼠</span>的小女孩。</p>
在上面例子中代碼的作用只是給p標籤設置了邊框爲1像素、紅色、實心邊框線,而對於子元素span是沒有起到作用的。
特殊性
有的時候我們爲同一個元素設置了不同的CSS樣式代碼,那麼元素會啓用那個CSS樣式。
p{color:red;}
.first{color:green;}
<p class="first">三年級時,我還是一個<span>膽小如鼠</span>的小女孩。</p>
p和.first都匹配到了p這個標籤上,那麼會顯示哪種顏色呢?green是正確的顏色,那麼爲什麼呢?是因爲瀏覽器是根據權值來判斷使用哪種css樣式的,權值高的就使用哪種css樣式。
下面是權值的規則:
標籤的權值爲1,類選擇符的權值爲10,ID選擇符的權值最高爲100。例如下面的代碼:
p{color:red;} /*權值爲1*/
p span{color:green;} /*權值爲1+1=2*/
.warning{color:white;} /*權值爲10*/
p span.warning{color:purple;} /*權值爲1+1+10=12*/
#footer .note p{color:yellow;} /*權值爲100+10+1=111*/
注意:還有一個權值比較特殊--繼承也有權值但很低,有的文獻提出它只有0.1,所以可以理解爲繼承的權值最低。
層疊
如果在html文件中對於同一個元素有多個css樣式存在並且多個css樣式具有相同權重值,則後面的會覆蓋前面的。
重要性
有些特殊的情況下要爲某些樣式設置最高權值,這時候我們可以使用!important 來解決。
p{color:red!important;}
p{color:green;}
<p class="first">三年級時,我還是一個<span>膽小如鼠</span>的小女孩。</p>
文字排版
現在一般網頁喜歡設置微軟雅黑
Body{font-family:”Microsoft Yahei”} 字體
Body{font-size:12px;color:#666} 字號、顏色
P span{font-weight:bold;} 粗體
Font-style:italic; 斜體
Text_decoration:underline; 下劃線
Text-decoration:line-through; 刪除線
Text-indent:2em; 段前縮進
Line-height:1.5em 行間距
Letter-spacing:50px; 字母間隔
Word-spacing:50px; 單詞間距
Text-align:center left right; 段落排版,對其
元素分類
在講解CSS佈局之前,我們需要提前知道一些知識,在CSS中,html中的標籤元素大體被分爲三種不同的類型:塊狀元素、內聯元素(又叫行內元素)和內聯塊狀元素。
常用的塊狀元素有:
<div>、<p>、<h1>...<h6>、<ol>、<ul>、<dl>、<table>、<address>、<blockquote>、<form>
常用的內聯元素有:
<a>、<span>、<br>、<i>、<em>、<strong>、<label>、<q>、<var>、<cite>、<code>
常用的內聯塊狀元素有:
<img>、<input>
塊狀元素
什麼是塊級元素?在html中<div>、 <p>、<h1>、<form>、<ul> 和 <li>就是塊級元素。設置display:block就是將元素顯示爲塊級元素。如下代碼就是將內聯元素a轉換爲塊狀元素,從而使a元素具有塊狀元素特點。
a{display:block;}
塊級元素特點:
1、每個塊級元素都從新的一行開始,並且其後的元素也另起一行。(真霸道,一個塊級元素獨佔一行)
2、元素的高度、寬度、行高以及頂和底邊距都可設置。
3、元素寬度在不設置的情況下,是它本身父容器的100%(和父元素的寬度一致),除非設定一個寬度。
內聯元素
在html中,<span>、<a>、<label>、 <strong> 和<em>就是典型的內聯元素(行內元素)(inline)元素。當然塊狀元素也可以通過代碼display:inline將元素設置爲內聯元素。如下代碼就是將塊狀元素div轉換爲內聯元素,從而使 div 元素具有內聯元素特點。
div{
display:inline;
}
......
<div>我要變成內聯元素</div>
內聯元素特點:
1、和其他元素都在一行上;
2、元素的高度、寬度及頂部和底部邊距不可設置;
3、元素的寬度就是它包含的文字或圖片的寬度,不可改變。
內聯塊狀元素
內聯塊狀元素(inline-block)就是同時具備內聯元素、塊狀元素的特點,代碼display:inline-block就是將元素設置爲內聯塊狀元素。(css2.1新增),<img>、<input>標籤就是這種內聯塊狀標籤。
inline-block 元素特點:
1、和其他元素都在一行上;
2、元素的高度、寬度、行高以及頂和底邊距都可設置。
盒子模型-邊框
盒子模型的邊框就是圍繞着內容及補白的線,這條線你可以設置它的粗細、樣式和顏色(邊框三個屬性)。
如下面代碼爲 div 來設置邊框粗細爲 2px、樣式爲實心的、顏色爲紅色的邊框:
div{
border:2px solid red;
}
上面是 border 代碼的縮寫形式,可以分開寫:
div{
border-width:2px;
border-style:solid;
border-color:red;
}
注意:
1、border-style(邊框樣式)常見樣式有:
dashed(虛線)| dotted(點線)| solid(實線)。
2、border-color(邊框顏色)中的顏色可設置爲十六進制顏色,如:
border-color:#888;//前面的井號不要忘掉。
3、border-width(邊框寬度)中的寬度也可以設置爲:
thin | medium | thick(但不是很常用),最常還是用象素(px)
如果有想爲 p 標籤單獨設置下邊框,而其它三邊都不設置邊框樣式怎麼辦呢?css 樣式中允許只爲一個方向的邊框設置樣式:
div{border-bottom:1px solid red;}
同樣可以使用下面代碼實現其它三邊(上、右、左)邊框的設置:
border-top:1px solid red;
border-right:1px solid red;
border-left:1px solid red;
盒模型-寬度和高度
盒模型寬度和高度和我們平常所說的物體的寬度和高度理解是不一樣的,css內定義的寬(width)和高(height),指的是填充以裏的內容範圍。
因此一個元素實際寬度(盒子的寬度)=左邊界+左邊框+左填充+內容寬度+右填充+右邊框+右邊界。
元素的高度也是同理。
比如:
css代碼:
div{
width:200px;
padding:20px;
border:1px solid red;
margin:10px;
}
html代碼:
<body>
<div>文本內容</div>
</body>
元素的實際長度爲:10px+1px+20px+200px+20px+1px+10px=262px。在chrome瀏覽器下可查看元素盒模型,如下圖:
盒模型-填充
元素內容與邊框之間是可以設置距離的,稱之爲“填充”。填充也可分爲上、右、下、左(順時針)。如下代碼:
div{padding:20px 10px 15px 30px;}
順序一定不要搞混。可以分開寫上面代碼:
div{
padding-top:20px;
padding-right:10px;
padding-bottom:15px;
padding-left:30px;
}
如果上、右、下、左的填充都爲10px;可以這麼寫
div{padding:10px;}
如果上下填充一樣爲10px,左右一樣爲20px,可以這麼寫:
div{padding:10px 20px;}
盒模型-邊界
元素與其它元素之間的距離可以使用邊界(margin)來設置。邊界也是可分爲上、右、下、左。如下代碼:
div{margin:20px 10px 15px 30px;}
也可以分開寫:
div{
margin-top:20px;
margin-right:10px;
margin-bottom:15px;
margin-left:30px;
}
如果上右下左的邊界都爲10px;可以這麼寫:
div{ margin:10px;}
如果上下邊界一樣爲10px,左右一樣爲20px,可以這麼寫:
div{ margin:10px 20px;}
總結一下:padding和margin的區別,padding在邊框裏,margin在邊框外。
CSS佈局模型
CSS包含3種基本的佈局模型,用英文概括爲:Flow、Layer 和 Float。
在網頁中,元素有三種佈局模型:
1、流動模型(Flow)
2、浮動模型 (Float)
3、層模型(Layer)
流動模型
流動(Flow)是默認的網頁佈局模式。也就是說網頁在默認狀態下的 HTML 網頁元素都是根據流動模型來分佈網頁內容的。
流動佈局模型具有2個比較典型的特徵:
第一點, 塊狀元素都會在所處的包含元素內自上而下按順序垂直延伸分佈,因爲在默認狀態下,塊狀元素的寬度都爲100%。實際上,塊狀元素都會以行的形式佔據位置。
第二點, 在流動模型下,內聯元素都會在所處的包含元素內從左到右水平分佈顯示。
浮動模型
如果現在我們想讓兩個塊狀元素並排顯示,怎麼辦呢?不要着急,設置元素浮動就可以實現這一願望。
任何元素在默認情況下是不能浮動的,但可以用 CSS 定義爲浮動,如 div、p、table、img 等元素都可以被定義爲浮動。如下代碼可以實現兩個 div 元素一行顯示。
div{
width:200px;
height:200px;
border:2px red solid;
float:left;
}
<div id="div1"></div>
<div id="div2"></div>
效果:
設置兩個元素右浮動
div{
width:200px;
height:200px;
border:2px red solid;
float:right;
}
設置一左一右浮動
div{
width:200px;
height:200px;
border:2px red solid;
}
#div1{float:left;}
#div2{float:right;}
層模型
什麼是層佈局模型?層佈局模型就像是圖像軟件PhotoShop中非常流行的圖層編輯功能一樣,每個圖層能夠精確定位操作,但在網頁設計領域,由於網頁大小的活動性,層佈局沒能受到熱捧。但是在網頁上局部使用層佈局還是有其方便之處的。下面我們來學習一下html中的層佈局。
如何讓html元素在網頁中精確定位,就像圖像軟件PhotoShop中的圖層一樣可以對每個圖層能夠精確定位操作。CSS定義了一組定位(positioning)屬性來支持層佈局模型。
層模型有三種形式:
1、絕對定位(position:absolute)
2、相對定位(position:relative)
3、固定定位(position:fixed)
層模型-絕對定位
如果想爲元素設置層模型中的絕對定位,需要設置position:absolute(表示絕對定位),這條語句的作用將元素從文檔流中拖出來,然後使用left、right、top、bottom屬性相對於其最接近的一個具有定位屬性的父包含塊進行絕對定位。如果不存在這樣的包含塊,則相對於body元素,即相對於瀏覽器窗口。
如下面代碼可以實現div元素相對於瀏覽器窗口向右移動100px,向下移動50px。
div{
width:200px;
height:200px;
border:2px red solid;
position:absolute;
left:100px;
top:50px;
}
<div id="div1"></div>
層模型-相對定位
如果想爲元素設置層模型中的相對定位,需要設置position:relative(表示相對定位),它通過left、right、top、bottom屬性確定元素在正常文檔流中的偏移位置。相對定位完成的過程是首先按static(float)方式生成一個元素(並且元素像層一樣浮動了起來),然後相對於以前的位置移動,移動的方向和幅度由left、right、top、bottom屬性確定,偏移前的位置保留不動(偏移前的位置還在,只是看不到了)。
如下代碼實現相對於以前位置向下移動50px,向右移動100px;
#div1{
width:200px;
height:200px;
border:2px red solid;
position:relative;
left:100px;
top:50px;
}
<div id="div1"></div>
效果圖:
層模型-固定定位
fixed:表示固定定位,與absolute定位類型類似,但它的相對移動的座標是視圖(屏幕內的網頁窗口)本身。由於視圖本身是固定的,它不會隨瀏覽器窗口的滾動條滾動而變化,除非你在屏幕中移動瀏覽器窗口的屏幕位置,或改變瀏覽器窗口的顯示大小,因此固定定位的元素會始終位於瀏覽器窗口內視圖的某個位置,不會受文檔流動影響,這與background-attachment:fixed;屬性功能相同。以下代碼可以實現相對於瀏覽器視圖向右移動100px,向下移動50px。並且拖動滾動條時位置固定不變。
#div1{
width:200px;
height:200px;
border:2px red solid;
position:fixed;
left:100px;
top:50px;
}
<p>文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。</p>
....
Relative和Absolute組合使用
使用position:absolute可以實現被設置元素相對於瀏覽器(body)設置定位以後,大家有沒有想過可不可以相對於其它元素進行定位呢?答案是肯定的,當然可以。使用position:relative來幫忙,但是必須遵守下面規範:
1、參照定位的元素必須是相對定位元素的前輩元素:
<div id="box1"><!--參照定位的元素-->
<div id="box2">相對參照元素進行定位</div><!--相對定位元素-->
</div>
從上面代碼可以看出box1是box2的父元素(父元素當然也是前輩元素了)。
2、參照定位的元素必須加入position:relative;
#box1{
width:200px;
height:200px;
position:relative;
}
3、定位元素加入position:absolute,便可以使用top、bottom、left、right來進行偏移定位了。
#box2{
position:absolute;
top:20px;
left:30px;
}
這樣box2就可以相對於父元素box1定位了(這裏注意參照物就可以不是瀏覽器了,而可以自由設置了)。
盒子模型代碼縮寫
盒模型時外邊距(margin)、內邊距(padding)和邊框(border)設置上下左右四個方向的邊距是按照順時針方向設置的:上右下左。具體應用在margin和padding的例子如下:
margin:10px 15px 12px 14px;/*上設置爲10px、右設置爲15px、下設置爲12px、左設置爲14px*/
通常有下面三種縮寫方法:
1、如果top、right、bottom、left的值相同,如下面代碼:
margin:10px 10px 10px 10px;
可縮寫爲:
margin:10px;
2、如果top和bottom值相同、left和 right的值相同,如下面代碼:
margin:10px 20px 10px 20px;
可縮寫爲:
margin:10px 20px;
3、如果left和right的值相同,如下面代碼:
margin:10px 20px 30px 20px;
可縮寫爲:
margin:10px 20px 30px;
注意:padding、border的縮寫方法和margin是一致的。
顏色值縮寫
關於顏色的css樣式也是可以縮寫的,當你設置的顏色是16進制的色彩值時,如果每兩位的值相同,可以縮寫一半。
例子1:
p{color:#000000;}
可以縮寫爲:
p{color: #000;}
例子2:
p{color: #336699;}
可以縮寫爲:
p{color: #369;}
字體縮寫
網頁中的字體css樣式代碼也有他自己的縮寫方式,下面是給網頁設置字體的代碼:
body{
font-style:italic;
font-variant:small-caps;
font-weight:bold;
font-size:12px;
line-height:1.5em;
font-family:"宋體",sans-serif;
}
這麼多行的代碼其實可以縮寫爲一句:
body{
font:italic small-caps bold 12px/1.5em "宋體",sans-serif;
}
注意:
1、使用這一簡寫方式你至少要指定font-size 和 font-family 屬性,其他的屬性(如 font-weight、font-style、font-varient、line-height)如未指定將自動使用默認值。
2、在縮寫時 font-size 與 line-height中間要加入“/”斜扛。
一般情況下因爲對於中文網站,英文還是比較少的,所以下面縮寫代碼比較常用:
body{
font:12px/1.5em "宋體",sans-serif;
}
只是有字號、行間距、中文字體、英文字體設置。
顏色值
在網頁中的顏色設置是非常重要,有字體顏色(color)、背景顏色(background-color)、邊框顏色(border)等,設置顏色的方法也有很多種:
1、英文命令顏色
前面幾個小節中經常用到的就是這種設置方法:
p{color:red;}
2、RGB顏色
這個與 photoshop 中的 RGB 顏色是一致的,由 R(red)、G(green)、B(blue) 三種顏色的比例來配色。
p{color:rgb(133,45,200);}
每一項的值可以是 0~255 之間的整數,也可以是 0%~100% 的百分數。如:
p{color:rgb(20%,33%,25%);}
3、十六進制顏色
這種顏色設置方法是現在比較普遍使用的方法,其原理其實也是 RGB 設置,但是其每一項的值由 0-255 變成了十六進制 00-ff。
p{color:#00ffff;}
長度值
長度單位總結一下,目前比較常用到px(像素)、em、% 百分比,要注意其實這三種單位都是相對單位。
1、像素
像素爲什麼是相對單位呢?因爲像素指的是顯示器上的小點(CSS規範中假設“90像素=1英寸”)。實際情況是瀏覽器會使用顯示器的實際像素值有關,在目前大多數的設計者都傾向於使用像素(px)作爲單位。
2、em
就是本元素給定字體的 font-size 值,如果元素的 font-size 爲 14px ,那麼 1em = 14px;如果 font-size 爲 18px,那麼 1em = 18px。如下代碼:
p{font-size:12px;text-indent:2em;}
上面代碼就是可以實現段落首行縮進 24px(也就是兩個字體大小的距離)。
下面注意一個特殊情況:
但當給 font-size 設置單位爲 em 時,此時計算的標準以 p 的父元素的 font-size 爲基礎。如下代碼:
html:
<p>以這個<span>例子</span>爲例。</p>
css:
p{font-size:14px}
span{font-size:0.8em;}
結果 span 中的字體“例子”字體大小就爲 11.2px(14 * 0.8 = 11.2px)。
3、百分比
p{font-size:12px;line-height:130%}
設置行高(行間距)爲字體的130%(12 * 1.3 = 15.6px)。
水平居中設置-行內元素
我們在實際工作中常會遇到需要設置水平居中的場景,比如爲了美觀,文章的標題一般都是水平居中顯示的。
這裏我們又得分兩種情況:行內元素還是 塊狀元素 ,塊狀元素裏面又分爲定寬塊狀元素,以及不定寬塊狀元素。今天我們先來了解一下行內元素怎麼進行水平居中?
如果被設置元素爲文本、圖片等行內元素時,水平居中是通過給父元素設置 text-align:center 來實現的。(父元素和子元素:如下面的html代碼中,div是“我想要在父容器中水平居中顯示”這個文本的父元素。反之這個文本是div的子元素 )如下代碼:
html代碼:
<body>
<div class="txtCenter">我想要在父容器中水平居中顯示。</div>
</body>
css代碼:
<style>
.txtCenter{
text-align:center;
}
</style>
水平居中設置-定寬塊狀元素
當被設置元素爲塊狀元素 時用 text-align:center 就不起作用了,這時也分兩種情況:定寬塊狀元素和不定寬塊狀元素。
這一小節我們先來講一講定寬塊狀元素。(定寬塊狀元素:塊狀元素的寬度width爲固定值。)
滿足定寬和塊狀兩個條件的元素是可以通過設置“左右margin”值爲“auto”來實現居中的。我們來看個例子就是設置 div 這個塊狀元素水平居中:
html代碼:
<body>
<div>我是定寬塊狀元素,哈哈,我要水平居中顯示。</div>
</body>
css代碼:
<style>
div{
border:1px solid red;/*爲了顯示居中效果明顯爲 div 設置了邊框*/
width:200px;/*定寬*/
margin:20px auto;/* margin-left 與 margin-right 設置爲 auto */
}
</style>
也可以寫成:
margin-left:auto;
margin-right:auto;
注意:元素的“上下 margin”是可以隨意設置的。
水平居中總結-不定寬塊狀元素(一)
在實際工作中我們會遇到需要爲“不定寬度的塊狀元素”設置居中,比如網頁上的分頁導航,因爲分頁的數量是不確定的,所以我們不能通過設置寬度來限制它的彈性。(不定寬塊狀元素:塊狀元素的寬度width不固定。)
不定寬度的塊狀元素有三種方法居中(這三種方法目前使用的都很多):
加入 table 標籤
設置 display: inline 方法:與第一種類似,顯示類型設爲行內元素,進行不定寬元素的屬性設置
設置 position:relative 和 left:50%:利用相對定位 的方式,將元素向左偏移50% ,即達到居中的目的
這一小節我們來講一下第一種方法:
爲什麼選擇方法一加入table標籤? 是利用table標籤的長度自適應性---即不定義其長度也不默認父元素body的長度(table其長度根據其內文本長度決定),因此可以看做一個定寬度塊元素,然後再利用定寬度塊狀居中的margin的方法,使其水平居中。
第一步:爲需要設置的居中的元素外面加入一個 table 標籤 ( 包括 <tbody>、<tr>、<td> )。
第二步:爲這個 table 設置“左右 margin 居中”(這個和定寬塊狀元素的方法一樣)。
舉例如下:
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>
水平居中總結-不定寬塊狀元素(二)
改變元素的display類型爲行內元素,利用其屬性直接設置。
第二種方法:改變塊級元素的 display 爲 inline 類型(設置爲行內元素 顯示),然後使用text-align:center 來實現居中效果。如下例子:
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(設置li文本之間的間隔)*/
.container li{
margin-right:8px;
display:inline;
}
</style>
這種方法相比第一種方法的優勢是不用增加無語義標籤,但也存在着一些問題:它將塊狀元素的 display 類型改爲 inline,變成了行內元素,所以少了一些功能,比如設定長度值。
水平居中總結-不定寬塊狀元素(三)
通過給父元素設置 float,然後給父元素設置 position:relative 和 left:50%,子元素設置 position:relative 和 left: -50% 來實現水平居中。
我們可以這樣理解:假想ul層的父層(即下面例子中的div層)中間有條平分線將ul層的父層(div層)平均分爲兩份,ul層的css代碼是將ul層的最左端與ul層的父層(div層)的平分線對齊;而li層的css代碼則是將li層的平分線與ul層的最左端(也是div層的平分線)對齊,從而實現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{
float:left;
position:relative;
left:50%
}
.container ul{
list-style:none;
margin:0;
padding:0;
position:relative;
left:-50%;
}
.containerli{float:left;display:inline;margin-right:8px;}
</style>
這三種方法使用得都非常廣泛,各有優缺點,具體選用哪種方法,可以視具體情況而定。
上面的方法可以這樣理解:
先給div設置float:left;讓它水平在左邊;left:50%;右移到中間(要知道這裏的中間是指div的最左邊線,此時是在水平最中間,而不是div中心部分在中間,在這給它做個標記叫
|);再看ul(假設他裏面的內容長度爲
- -兩條線這麼長,還記得剛纔我們做的標記 | 麼?此時ul的內容是 |- -,在中心的右邊),給ul設置left:-50%,指的是讓它向左移動他長度的一半,然後後面他裏面的內容,,也就是li , 就剛好是在水平中間了,既-|-;
垂直居中-父元素高度確定的當行文本
我們在實際工作中也會遇到需要設置垂直居中的場景,比如好多報紙的文章標題在左右一側時,常常會設置爲垂直居中,爲了用戶體驗性好。
這裏我們又得分兩種情況:父元素高度確定的單行文本,以及父元素高度確定的多行文本。
本節我們先來看第一種父元素高度確定的單行文本, 怎麼設置它爲垂直居中呢?
父元素高度確定的單行文本的豎直居中的方法是通過設置父元素的 height 和 line-height 高度一致來實現的。(height: 該元素的高度,line-height: 顧名思義,行高(行間距),指在文本中,行與行之間的基線間的距離 )。
line-height 與 font-size 的計算值之差,在 CSS 中成爲“行間距”。分爲兩半,分別加到一個文本行內容的頂部和底部。
這種文字行高與塊高一致帶來了一個弊端:當文字內容的長度大於塊的寬時,就有內容脫離了塊。
如下代碼:
<div class="container">
hi,imooc!
</div>
css代碼:
<style>
.container{
height:100px;
line-height:100px;
background:#999;
}
</style>
垂直居中-父元素高度確定的多行文本(方法一)
父元素高度確定的多行文本、圖片等的豎直居中的方法有兩種:
方法一:使用插入 table (包括tbody、tr、td)標籤,同時設置vertical-align:middle。
css 中有一個用於豎直居中的屬性vertical-align,在父元素設置此樣式時,會對inline-block類型的子元素都有用。下面看一下例子:
html代碼:
<body>
<table><tbody><tr><tdclass="wrap">
<div>
<p>看我是否可以居中。</p>
</div>
</td></tr></tbody></table>
</body>
css代碼:
table td{height:500px;background:#ccc}
因爲 td 標籤默認情況下就默認設置了 vertical-align 爲 middle,所以我們不需要顯式地設置了。
垂直居中-父元素高度確定的多行文本(方法二)
在 chrome、firefox 及 IE8 以上的瀏覽器下可以設置塊級元素的 display 爲 table-cell(設置爲表格單元顯示),激活 vertical-align 屬性,但注意 IE6、7 並不支持這個樣式, 兼容性比較差。
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>
這種方法的好處是不用添加多餘的無意義的標籤,但缺點也很明顯,它的兼容性不是很好,不兼容 IE6、7而且這樣修改display的block變成了table-cell,破壞了原有的塊狀元素的性質。
隱性改變display類型
有一個有趣的現象就是當爲元素(不論之前是什麼類型元素,display:none 除外)設置以下 2 個句之一:
1.position : absolute
2.float : left 或 float:right
簡單來說,只要html代碼中出現以上兩句之一,元素的display顯示類型就會自動變爲以 display:inline-block(塊狀元素)的方式顯示,當然就可以設置元素的 width 和 height 了,且默認寬度不佔滿父元素。
如下面的代碼,小夥伴們都知道 a 標籤是行內元素 ,所以設置它的 width是 沒有效果的,但是設置爲position:absolute 以後,就可以了。
<div class="container">
<a href="#" title="">進入課程請單擊這裏</a>
</div>
css代碼
<style>
.container a{
position:absolute;
width:200px;
background:#ccc;
}
</style>