CSS全稱爲「層疊樣式表 (Cascading Style Sheets)」,它主要是用於定義HTML內容在瀏覽器內的顯示樣式,如文字大小、顏色、字體加粗等。使用CSS樣式的一個好處是經過定義某個樣式,可讓不一樣網頁位置的文字有着統一的字體、字號或者顏色等。css
css樣式由選擇符和聲明組成,而聲明又由屬性和值組成,好比:html
p{color:blue}
就像在Html的註釋同樣,在CSS中也有註釋語句:用/*註釋語句*/
來標明(Html中使用<!--註釋語句-->
)。chrome
內聯式
css樣式表就是把css代碼直接寫在現有的HTML標籤中,以下面代碼:瀏覽器
<p style="color:red">這裏文字是紅色。</p>
注意要寫在元素的開始標籤裏,下面這種寫法是錯誤的:安全
<p>這裏文字是紅色。</p style="color:red">
而且css樣式代碼要寫在style=""
雙引號中,若是有多條css樣式代碼設置能夠寫在一塊兒,中間用分號隔開。以下代碼:編輯器
<p style="color:red;font-size:12px">這裏文字是紅色。</p>
嵌入式css樣式,就是能夠把css樣式代碼寫在<style type="text/css"></style>
標籤之間。以下面代碼實現把三個<span>
標籤中的文字設置爲紅色:佈局
<style type="text/css"> span{ color:red; } </style>
嵌入式css樣式必須寫在<style></style>
之間,而且通常狀況下嵌入式css樣式寫在<head></head>
之間。學習
外部式css樣式(也可稱爲外聯式)就是把css代碼寫一個單獨的外部文件中,這個css樣式文件以「.css
」爲擴展名,在<head>
內(不是在<style>
標籤內)使用<link>
標籤將css樣式文件連接到HTML文件內,以下面代碼:字體
<link href="base.css" rel="stylesheet" type="text/css" />
注意:網站
css樣式文件名稱以有意義的英文字母命名,如main.css
。
rel="stylesheet" type="text/css"
是固定寫法不可修改。
<link>
標籤位置通常寫在<head>
標籤以內。
內聯式>嵌入式>外部式
可是嵌入式>外部式
有一個前提:嵌入式css樣式的位置必定在外部式的後面。如右代碼編輯器就是這樣,<link href="style.css" ...>
代碼在<style type="text/css">...</style>
代碼的前面(實際開發中也是這麼寫的)
其實總結來講,就是——就近原則(離被設置元素越近優先級別越高)。
但注意上面所總結的優先級是有一個前提:內聯式、嵌入式、外部式樣式表中css樣式是在的相同權值的狀況下。
每一條css樣式聲明(定義)由兩部分組成,形式以下:
選擇器{ 樣式; }
在{}
以前的部分就是「選擇器」,「選擇器」指明瞭{}中的「樣式」的做用對象,也就是「樣式」做用於網頁中的哪些元素。
標籤選擇器其實就是html代碼中的標籤。如右側代碼編輯器中的<html>
、<body>
、<h1>
、<p>
、<img>
。例以下面代碼:
p{font-size:12px;line-height:1.6em;}
上面的css樣式代碼的做用:爲p標籤設置12px字號,行間距設置1.6em的樣式。
類選擇器在css樣式編碼中是最經常使用到的。
語法:
.類選器名稱{css樣式代碼;}
注意:
英文圓點開頭
其中類選器名稱能夠任意起名(但不要起中文噢)
使用方法:
第一步:使用合適的標籤把要修飾的內容標記起來,以下:
<span>膽小如鼠</span>
第二步:使用class="類選擇器名稱"
爲標籤設置一個類,以下:
<span class="stress">膽小如鼠</span>
第三步:設置類選器css樣式,以下:
.stress{color:red;}/*類前面要加入一個英文圓點*/
在不少方面,ID選擇器都相似於類選擇符,但也有一些重要的區別:
爲標籤設置id="ID名稱"
,而不是class="類名稱"
。
ID選擇符的前面是井號(#
)號,而不是英文圓點(.
)。
相同點:
能夠應用於任何元素
不一樣點:
ID選擇器只能在文檔中使用一次。與類選擇器不一樣,在一個HTML文檔中,ID選擇器只能使用一次,並且僅一次。而類選擇器可使用屢次。
可使用類選擇器詞列表方法爲一個元素同時設置多個樣式。咱們能夠爲一個元素同時設多個樣式,但只能夠用類選擇器的方法實現,ID選擇器是不能夠的(不能使用 ID 詞列表)。
下面的代碼是正確的(完整代碼見右側代碼編輯器)
.stress{ color:red; } .bigsize{ font-size:25px; } <p>到了<span class="stress bigsize">三年級</span>下學期時,咱們班上了一節公開課...</p>
上面代碼的做用是爲「三年級」三個文字設置文本顏色爲紅色而且字號爲25px。
下面的代碼是不正確的(完整代碼見右側代碼編輯器)
#stressid{ color:red; } #bigsizeid{ font-size:25px; } <p>到了<span id="stressid bigsizeid">三年級</span>下學期時,咱們班上了一節公開課...</p>
上面代碼不能夠實現爲「三年級」三個文字設置文本顏色爲紅色而且字號爲25px的做用。
還有一個比較有用的選擇器子選擇器,即大於符號(>
),用於選擇指定標籤元素的第一代子元素。如右側代碼編輯器中的代碼:
.food>li{border:1px solid red;}
這行代碼會使class
名爲food
下的子元素li
(水果、蔬菜)加入紅色實線邊框。
包含選擇器,即加入空格,用於選擇指定標籤元素下的後輩元素。如右側代碼編輯器中的代碼:
.first span{color:red;}
這行代碼會使第一段文字內容的字體顏色變爲紅色。
請注意這個選擇器與子選擇器的區別,子選擇器(child selector)僅是指它的直接後代,或者你能夠理解爲做用於子元素的第一代後代。然後代選擇器是做用於全部子後代元素。後代選擇器經過空格來進行選擇,而子選擇器是經過「>」進行選擇。
總結:>
做用於元素的第一代後代,空格做用於元素的全部後代。
通用選擇器是功能最強大的選擇器,它使用一個(*
)號指定,它的做用是匹配html中全部標籤元素,以下使用下面代碼使用html中任意標籤元素字體顏色所有設置爲紅色:
* {color:red;}
更有趣的是僞類選擇符,爲何叫作僞類選擇符,它容許給html不存在的標籤(標籤的某種狀態)設置樣式,好比說咱們給html中一個標籤元素的鼠標滑過的狀態來設置字體顏色:
a:hover{color:red;}
上面一行代碼就是爲a
標籤鼠標滑過的狀態設置字體顏色變紅。這樣就會使第一段文字內容中的「膽小如鼠」文字加入鼠標滑過字體顏色變爲紅色特效。
當你想爲html中多個標籤元素設置同一個樣式時,可使用分組選擇符(,
),以下代碼爲右側代碼編輯器中的h1
、span
標籤同時設置字體顏色爲紅色:
h1,span{color:red;}
它至關於下面兩行代碼:
h1{color:red;} span{color:red;}
CSS的某些樣式是具備繼承性的,那麼什麼是繼承呢?繼承是一種規則,它容許樣式不只應用於某個特定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樣式的先後順序來決定,處於最後面的css樣式會被應用。
以下面代碼:
p{color:red;} p{color:green;} <p class="first">三年級時,我仍是一個<span>膽小如鼠</span>的小女孩。</p>
最後p中的文本會設置爲green
,這個層疊很好理解,理解爲後面的樣式會覆蓋前面的樣式。
因此前面的css樣式優先級就不難理解了:
內聯樣式表(標籤內部)> 嵌入樣式表(當前文件中)> 外部樣式表(外部文件中)。
咱們在作網頁代碼的時,有些特殊的狀況須要爲某些樣式設置具備最高權值,怎麼辦?這時候咱們可使用!important
來解決。
以下代碼:
p{color:red!important;} p{color:green;} <p class="first">三年級時,我仍是一個<span>膽小如鼠</span>的小女孩。</p>
這時 p 段落中的文本會顯示的red紅色。
注意:!important
要寫在分號的前面
這裏注意當網頁製做者不設置css樣式時,瀏覽器會按照本身的一套樣式來顯示網頁。而且用戶也能夠在瀏覽器中設置本身習慣的樣式,好比有的用戶習慣把字號設置爲大一些,使其查看網頁的文本更加清楚。這時注意樣式優先級爲:瀏覽器默認的樣式 < 網頁製做者樣式 < 用戶本身設置的樣式,但記住!important
優先級樣式是個例外,權值高於用戶本身設置的樣式。
咱們可使用css樣式爲網頁中的文字設置字體、字號、顏色等樣式屬性。下面咱們來看一個例子,下面代碼實現:爲網頁中的文字設置字體爲宋體。
body{font-family:"宋體";}
這裏注意不要設置不經常使用的字體,由於若是用戶本地電腦上若是沒有安裝你設置的字體,就會顯示瀏覽器默認的字體。(由於用戶是否能夠看到你設置的字體樣式取決於用戶本地電腦上是否安裝你設置的字體。)
如今通常網頁喜歡設置「微軟雅黑」,以下代碼:
body{font-family:"Microsoft Yahei";}
或
body{font-family:"微軟雅黑";}
注意:第一種方法比第二種方法兼容性更好一些。
由於這種字體即美觀又能夠在客戶端安全的顯示出來(用戶本地通常都是默認安裝的)。
可使用下面代碼設置網頁中文字的字號爲12像素,並把字體顏色設置爲#666(灰色):
body{font-size:12px;color:#666}
咱們還可使用css樣式來改變文字的樣式:粗體、斜體、下劃線、刪除線,可使用下面代碼實現設置文字以粗體樣式顯示出來。
p span{font-weight:bold;}
在這裏你們能夠看到,若是想爲文字設置粗體是有單獨的css樣式來實現的,再不用爲了實現粗體樣式而使用h1
-h6
或strong
標籤了。
如下代碼能夠實現文字以斜體樣式在瀏覽器中顯示:
p a{font-style:italic;} <p>三年級時,我仍是一個<a>膽小如鼠</a>的小女孩。</p>
有些狀況下想爲文字設置爲下劃線樣式,這樣能夠在視覺上強調文字,可使用下面代碼來實現:
p a{text-decoration:underline;} <p>三年級時,我仍是一個<a>膽小如鼠</a>的小女孩。</p>
刪除線使用下面代碼就能夠實現:
.oldPrice{text-decoration:line-through;}
中文文字中的段前習慣空兩個文字的空白,這個特殊的樣式能夠用下面代碼來實現:
p{text-indent:2em;} <p>1922年的春天,一個想要成名名叫尼克卡拉威(託比?馬奎爾Tobey Maguire 飾)的做家,離開了美國中西部,來到了紐約。那是一個道德感漸失,爵士樂流行,走私爲王,股票飛漲的時代。爲了追尋他的美國夢,他搬入紐約附近一海灣居住。</p>
注意:2em的意思就是文字的2倍大小。
在段落排版中起重要做用的行間距(行高)屬性(line-height),以下代碼實現設置段落行間距爲1.5倍。
p{line-height:1.5em;} <p>菲茨傑拉德,二十世紀美國文學巨擘之一,兼具做家和編劇雙重身份。他以詩人的敏感和戲劇家的想象爲"爵士樂時代"吟唱華麗輓歌,其詩人和夢想家的氣質亦爲那個奢靡年代的不二註解。</p>
中文字間隔、字母間隔設置:
若是想在網頁排版中設置文字間隔或者字母間隔就可使用letter-spacing
來實現,以下面代碼:
h1{ letter-spacing:50px; } ... <h1>了不得的蓋茨比</h1>
注意:這個樣式使用在英文單詞時,是設置字母與字母之間的間距。
單詞間距設置:
若是我想設置英文單詞之間的間距呢?可使用word-spacing
來實現。以下代碼:
h1{ word-spacing:50px; } ... <h1>welcome to imooc!</h1>
想爲塊狀元素中的文本、圖片設置居中樣式嗎?可使用text-align
樣式代碼,以下代碼可實現文本居中顯示。
h1{ text-align:center; } <h1>了不得的蓋茨比</h1>
一樣能夠設置居左:
h1{ text-align:left; } <h1>了不得的蓋茨比</h1>
還能夠設置居右:
h1{ text-align:right; } <h1>了不得的蓋茨比</h1>
在講解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;}
塊級元素特色:
每一個塊級元素都重新的一行開始,而且其後的元素也另起一行。(真霸道,一個塊級元素獨佔一行)
元素的高度、寬度、行高以及頂和底邊距均可設置。
元素寬度在不設置的狀況下,是它自己父容器的100%(和父元素的寬度一致),除非設定一個寬度。
在html中,<span>
、<a>
、<label>
、 <strong>
和<em>
就是典型的內聯元素(行內元素)(inline)元素。固然塊狀元素也能夠經過代碼display:inline
將元素設置爲內聯元素。以下代碼就是將塊狀元素div轉換爲內聯元素,從而使div
元素具備內聯元素特色。
div{ display:inline; } ...... <div>我要變成內聯元素</div>
內聯元素特色:
和其餘元素都在一行上;
元素的高度、寬度及頂部和底部邊距不可設置;
元素的寬度就是它包含的文字或圖片的寬度,不可改變。
內聯塊狀元素(inline-block)就是同時具有內聯元素、塊狀元素的特色,代碼display:inline-block
就是將元素設置爲內聯塊狀元素。(css2.1新增),<img>
、<input>
標籤就是這種內聯塊狀標籤。
inline-block
元素特色:
和其餘元素都在一行上;
元素的高度、寬度、行高以及頂和底邊距均可設置。
盒子模型包括:
padding
容器內邊距
margin
盒子的外邊距
border
盒子的外邊框
特色:
每一個都有四個方向上的邊距:top
、bottom
、left
、right
<div>
、<p>
、<ul>
、<ol>
都是塊級標籤,盒子模型的特徵只適合塊級標籤。
注:盒子的實際寬度=左邊界+左邊框+左填充+內容寬度+右填充+右邊框+右邊界(內容高度+上下內外邊距),高度同理。
盒子模型的邊框就是圍繞着內容及補白的線,這條線你能夠設置它的粗細、樣式和顏色(邊框三個屬性)。
以下面代碼爲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。
元素內容與邊框之間是能夠設置距離的,稱之爲「填充」。填充也可分爲上、右、下、左(順時針)。以下代碼:
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 最基本、 最核心的概念。 但佈局模型是創建在盒模型基礎之上,又不一樣於咱們常說的 CSS 佈局樣式或 CSS 佈局模板。若是說佈局模型是本,那麼 CSS 佈局模板就是末了,是外在的表現形式。
CSS包含3種基本的佈局模型,用英文歸納爲:Flow
、Layer
和Float
。
在網頁中,元素有三種佈局模型:
流動模型(Flow
)
浮動模型(Float
)
層模型(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
)屬性來支持層佈局模型。
層模型有三種形式:
絕對定位(position: absolute
)
相對定位(position: relative
)
固定定位(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> ....
使用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; }
注意:
使用這一簡寫方式你至少要指定font-size
和font-family
屬性,其餘的屬性(如font-weight
、font-style
、font-varient
、line-height
)如未指定將自動使用默認值。
二、在縮寫時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(也就是兩個字體大小的距離)。(indent英文義爲「切割…使呈鋸齒狀; 縮進排版」。)
下面注意一個特殊狀況:
但當給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代碼:
<body> <div class="txtCenter">我是文本,哈哈,我想要在父容器中水平居中顯示。</div> </body>
css代碼:
<style> div.txtCenter{ text-align:center; } </style>
當被設置元素爲塊狀元素時用text-align:center
就不起做用了,這時也分兩種狀況:定寬塊狀元素和不定寬塊狀元素。這一小節咱們先來說一講定寬塊狀元素。
知足定寬和塊狀兩個條件的元素是能夠經過設置「左右margin
」值爲「auto
」來實現居中的。咱們來看個例子就是設置div
這個塊狀元素水平居中:
html代碼:
<body> <div>我是定寬塊狀元素,哈哈,我要水平居中顯示。</div> </body>
css代碼:
<style> div{ border:1px solid red;/*爲了顯示居中效果明顯爲 div 設置了邊框*/ width:500px;/*定寬*/ margin:20px auto;/* margin-left 與 margin-right 設置爲 auto */ } </style>
也能夠寫成:
margin-left:auto; margin-right:auto;
注意:元素的「上下 margin
」 是能夠隨意設置的。(margin
:外邊距屬性)
不定寬度的塊狀元素有三種方法居中(這三種方法目前使用的都比多):
加入table
標籤
設置display;inline
方法
設置position:relative
和left:50%
;
這一小節咱們來說一下第一種方法:
第一步:爲須要設置的居中的元素外面加入一個table
標籤 ( 包括<tbody>
、<tr>
、<td>
)。
第二步:爲這個table
設置「左右margin居中
」(這個和定寬塊狀元素的方法同樣)。
html代碼:
<div> <table> <tbody> <tr><td> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> </td></tr> </tbody> </table> </div>
css代碼:
<style> table{ margin:0 auto; } ul{list-style:none;margin:0;padding:0;} li{float:left;display:inline;margin-right:8px;} </style>
第二種方法:改變塊級元素的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; } .container ul{ list-style:none; margin:0; padding:0; display:inline; } .container li{ margin-right:8px; display:inline; } </style>
這種方法相比第一種方法的優點是不用增長無語義標籤,簡化了標籤的嵌套深度,但也存在着一些問題:它將塊狀元素的display
類型改成inline
,變成了行內元素,因此少了一些功能,好比設定長度值。
方法三:經過給父元素設置float
,而後給父元素設置position:relative
和 left:50%
,子元素設置position:relative
和left:-50%
來實現水平居中。
代碼以下:
<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%; } .container li{float:left;display:inline;margin-right:8px;} </style>
這種方法能夠保留塊狀元素仍以display:block
的形式顯示,優勢不添加無語議表標籤,不增長嵌套深度,但它的缺點是設置了position:relative
,帶來了必定的反作用。
父元素高度肯定的單行文本的豎直居中的方法是經過設置父元素的height
和line-height
高度一致來實現的。以下代碼:
<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
,但這個樣式只有在父元素爲td
或th
時,纔會生效。因此又要插入table
標籤了。下面看一下例子:
html代碼:
<body> <table><tbody><tr><td class="wrap"> <div> <p>看我是否能夠居中。</p> <p>看我是否能夠居中。</p> <p>看我是否能夠居中。</p> <p>看我是否能夠居中。</p> <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
屬性,但注意 IE六、7 並不支持這個樣式。
html代碼:
<div class="container"> <div> <p>看我是否能夠居中。</p> <p>看我是否能夠居中。</p> <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>
這種方法的好處是不用添加多餘的無心義的標籤,但缺點也很明顯,它的兼容性不是很好,不兼容 IE六、7。
有一個有趣的現象就是當爲元素(不論以前是什麼類型元素,display:none
除外)設置如下 2 個句之一:
position : absolute
float : left
或 float:right
元素會自動變爲以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>