者:極客小俊
一個把邏輯思維轉(zhuǎn)變?yōu)榇a的技術(shù)博主
你不用拼過聰明人,你只需要拼過那些懶人 你就一定會超越大部分人!
概念: 行高指的是文本行的基線之間的距離, 更簡單來說行高是指文本行基線間的垂直距離, 行高也是文字大小與行距的和, 行高越大則行間距越大!
注意:line-height屬性不允許使用負(fù)值。
但是很多人就只是知道 line-height屬性用于設(shè)置行高, 而行高到底是一個什么東西并不是很清楚!
那么在了解行高之前,我們就必須要先掌握這幾個概念: 頂線、中線、基線、底線、x-height、ex、內(nèi)聯(lián)盒模型、行距等..
知道這些概念之后才能真正的去理解line-height屬性的意義!
那現(xiàn)在我們廢話不多說,就先來看一張文字在網(wǎng)頁中的結(jié)構(gòu)圖:
從上到下四條線分別是頂線(綠色)、中線(藍(lán)色)、基線(紅色)、底線(紫色)
圖中黃顏色的線位置表示: 行間距 其實是分為上一行文字的下半行距 和 下一行文字的上半行距, 這里要是聽不懂 沒關(guān)系 我們接下來會慢慢說半行距的意義!
小提示: 之后我們要講到的vertical-align css屬性中有top、middle、baseline、bottom,就是和這四條線相關(guān)!
要了解基線 那么還要知道 在我們英文的26個字幕當(dāng)中 有一個小寫的x字母是在CSS中相當(dāng)特殊的! 那么基線是什么呢?
解答: 基線就是小寫x字母的下邊緣(線) 就是我們常說的 基線 而不是那些有尾巴的英文字母, 例如: s 、j、g、k、f、y
所以一定要注意: 基線(baseline)不是漢字文字的下底部,而是英文小寫字母“x”的下底部!
內(nèi)聯(lián)元素默認(rèn)是按照基線對齊的 而基線就是小寫字母x的底部! 不懂的話舉個例子 如下:
北京市
<span>深圳市</span>
<strong>計算機</strong>
<img src="images/1.gif">
效果圖: 紅色箭頭指向位置從圖中可以發(fā)現(xiàn), 只要是內(nèi)聯(lián)元素基線都是對齊的! 也就是說內(nèi)聯(lián)元素中的文字都是放在基線上的!
例如下圖一樣:
line-height屬性設(shè)置的行高也就是定義的兩行文字基線之間的距離! 原因是因為中間夾雜了更多的行距 關(guān)于行距的概念我們接下來會說到!
如果把line-height設(shè)置為0px 那么這個基線就會重疊! 文字也重疊了!
那么也由此可見 設(shè)置line-height會影響基線之間的距離! 基線變大了 每一行的文字也就隔開了!
頂線就是在中文漢字的頂部位置就是頂線的位置!
如下圖:
底線就是在中文漢字的底部位置 就是底線的位置!
故名意思: css中有一個概念叫x-height,意思也就是小寫字母x的高度!
那么在css當(dāng)中小寫x字母不僅有確定了基線(baseline)的位置,還有描述了中線(等分線)(middle)的作用!
中線又是什么?
在css中,有些屬性值的定義就和這個x-height有關(guān), 最經(jīng)典最有代表性的就是vertical-align的屬性值middle 這里的middle就是中間的意思 指的其實就是基線 往上1/2的位置 也就是小寫x字母的中間交叉點那個位置!也就是middle的位置!
這里就是我們所說的中線:橫過小寫英文字母x的中間的線!
如下圖: 藍(lán)色線位置
案例:
<style>
#cont{
width:800px;
background-color:rgb(255,255,30);
}
#cont>span{
display: inline-block;
border: 1px solid red;
line-height: 60px;
font-size: 36px;
}
/*一行文本 有且只有 一個基線 多行文本每一行都有一個基線*/
#img{
vertical-align: middle;
}
</style>
<div id="cont">
<span>
<img src="images/test.gif" id="img">
北京市 iphone x
</span>
</div>
效果圖如下:
但是大家從結(jié)果上肯定也能夠看出來, vertical-align: middle 并不是絕對的垂直居中于文字對齊!
middle也只是一種近似接近于居中的效果! 因為不同的字體在行元素中的中線的位置是不一樣的 !
例如:
<style type="text/css" >
#test{
background: yellow;
font-size: 38px;
font-family: serif;
}
#test2{
background: yellow;
font-size: 38px;
font-family: 龐門正道標(biāo)題體;
}
span>img{
vertical-align: middle;
}
</style>
<span id="test"><img src="images/test.gif"> 北京市 iphone x</span>
<br>
<span id="test2"><img src="images/test.gif"> 北京市 iphone x</span>
效果圖: 從下圖效果中可以看出 x的交叉點的高矮是不一樣的位置!
所以 在CSS中, 內(nèi)聯(lián)元素(行元素) 垂直居中(也就是給內(nèi)聯(lián)元素設(shè)置vertical-align:middle)是對文字垂直居中, 而與外部容器無關(guān)!
關(guān)于vertical-align元素后面會單獨提及到
上面也說過了, vertical-align: middle 并不是絕對的垂直居中于文字對齊! middle也只是一種近似接近于居中的效果!
就是因為不同的字體在行元素中的位置是不一樣的!中線位置也不一樣,所以說對齊方式也不一樣。
同時如果font-size字體大小有變化的情況下, x字母的高度也會隨之變化, 然后內(nèi)聯(lián)元素依舊會以小寫字母x的中線為基準(zhǔn)對齊
舉個例子:
如果用一個小圖標(biāo)來對齊一行文字,那么在文字大小和字體樣式有變化之后,給小圖標(biāo)設(shè)置vertical-align: middle 后,它依舊會按照x中線對齊, 但這個小圖標(biāo)的從大小上感覺沒有對齊,也從外部元素的高度上來看,所以小圖標(biāo)感覺也沒有垂直居中對齊的樣子!
如下圖所示:
所以要讓一個小圖標(biāo)來對齊一行文字,還有一個更加簡便的做法 那么就是使用ex單位來解決!
ex 在css中的定義是一個尺寸單位, 官方的解釋是: 一個 ex 是一個字體的 x-height。(其實就是你設(shè)定的字體中產(chǎn)生的x的大小)
我的解釋 : ex 就是css中的一個相對單位, 相對的是字體大小和字體樣式而改變的一個單位! 指的就是小寫字母x的高度 其實就是x-height
也就是說把內(nèi)聯(lián)元素的高度尺寸單位設(shè)置為ex 那么就不會受到 字體樣式和字號的影響! 從該內(nèi)聯(lián)元素相對字體樣式和字號進(jìn)行變化!
1ex 就是一個x的高度這句話如何理解: 就是在不同字體和字號情況下x的高度!
那么也就是說把小圖標(biāo)的高度設(shè)置為1ex 那么不管你把字體大小 和 字體樣式如何修改, 這個小圖標(biāo)都會隨著他們而變化!
案例:
<style type="text/css" >
#test{
background: yellow;
font-size: 78px;
font-family: serif;
}
#test2{
background: yellow;
font-size: 78px;
font-family: 龐門正道標(biāo)題體;
}
#test3{
background: yellow;
font-size: 78px;
font-family: 微軟雅黑;
}
span>img{
/* vertical-align: middle;*/
height: 1ex;
}
</style>
<span id="test"><img src="images/test.gif"> 北京市 iphone x</span>
<br>
<span id="test2"><img src="images/test.gif"> 北京市 iphone x</span>
<br>
<span id="test3"><img src="images/test.gif"> <em>北京市 iphone x</em></span>
效果如下:
不管如何修改字體大小和字號 小圖標(biāo)都會更好的去垂直居中, vertical-align: middle;也沒必要使用了! 借助ex這個相對單位我們直接利用默認(rèn)的baseline基線對齊就可以實現(xiàn)小圖標(biāo)內(nèi)聯(lián)元素和文字進(jìn)行居中的效果了! 注意:經(jīng)過審查元素看到每一行小圖標(biāo)和文字中的字母x高度始終是一樣的!
小結(jié): ex相對單位不會受字體和字號的影響! 雖然ex單位跟line-height沒有直接關(guān)系,但也有間接關(guān)系!
內(nèi)聯(lián)元素從定義上看: 該元素默認(rèn)的display屬性值為inline、inline-block、inline-table的元素就是內(nèi)聯(lián)元素。
內(nèi)聯(lián)元素從表現(xiàn)上看: 典型的特征就是內(nèi)聯(lián)元素可以和文字在一行進(jìn)行顯示, 這里注意: 文字本身也是一個內(nèi)聯(lián)元素(是匿名內(nèi)聯(lián)元素 馬上會接下來會說到), 所以我們常見的內(nèi)聯(lián)元素從表面上看有文字、 圖片、按鈕、輸入框、下拉框、等原生表單控件都是內(nèi)聯(lián)元素!
在我們學(xué)習(xí)line-height這個屬性的時候, 我們還必須要了解CSS中一個重要的概念 就是內(nèi)聯(lián)盒模型 那么我們先來看一段代碼案例, 這一段文字代碼看似簡單 但其中包含很多術(shù)語和概念,通俗的說這一段代碼中包含很多種類的盒子!
如下:
<p>
這是一行普通的文字, 這里有一個 <em>我是斜體</em> 標(biāo)簽
</p>
從以上代碼中 我們來分析它里面到底有哪些盒子!
(1) 內(nèi)容區(qū)域 content area
內(nèi)容區(qū)域是一種我們?nèi)庋劭床灰姷暮凶樱鼑@著文字 我們平常是看不見這個盒子的!
通俗理解: 其實可以通過選中文本然后查看背景顏色區(qū)域作為內(nèi)容區(qū)域來理解!
小提示:但是要注意的是 如果是圖片,其內(nèi)容不是文字,不存在內(nèi)容區(qū)域之說 因此對于圖片這類元素可以把內(nèi)容區(qū)域看作是元素自身!
也就是說如果是圖片的話,那么內(nèi)容區(qū)域的大小是隨著圖片的大小來決定的!
這樣理解內(nèi)容區(qū)域可以幫助我們理解各種相關(guān)內(nèi)聯(lián)元素的行為都是可以的!
如下圖:
內(nèi)容區(qū)域小結(jié)
總的來說內(nèi)容區(qū)域:就是底線和頂線包裹的區(qū)域(行內(nèi)元素display:inline可以通過background-color屬性顯示出來),實際中不一定看得到,但確實存在。內(nèi)容區(qū)的大小依據(jù)font-size的值和字?jǐn)?shù)進(jìn)行變化。
如下圖:
(2) 內(nèi)聯(lián)盒子(行內(nèi)框) inline box
說到內(nèi)聯(lián)盒子 那么大家一定就不會陌生了 就是我們平常使用的內(nèi)聯(lián)元素(行內(nèi)元素)!
內(nèi)聯(lián)盒子也稱之為: 行內(nèi)框 這要特別注意 這是針對行元素而言的, 每個行內(nèi)元素會生成一個行內(nèi)框,行內(nèi)框是一個瀏覽器渲染模型中的一個概念 無法肉眼觀測!
它讓內(nèi)容成為一行排列 所以內(nèi)聯(lián)盒子就是指的內(nèi)聯(lián)元素, 簡單的說就是文字用的什么內(nèi)聯(lián)元素來包含!
例如: span、em、a、這些都屬于 內(nèi)聯(lián)盒子(行內(nèi)框)!
注意:行內(nèi)框=內(nèi)容區(qū)域
內(nèi)聯(lián)盒子的分類
但是內(nèi)聯(lián)盒子則又會細(xì)分為 內(nèi)聯(lián)盒子 和 匿名內(nèi)聯(lián)盒子
所以 常見的內(nèi)聯(lián)盒子 如文字外部包含的是 span、a、em、strong、等這些標(biāo)簽 那么則屬于 內(nèi)聯(lián)盒子
如果 是光禿禿的文字 則屬于 匿名內(nèi)聯(lián)盒子 所以要注意 光禿禿的文字其實也是一種內(nèi)聯(lián)盒子!只是沒有標(biāo)簽名字而已!
如下圖:
特別案例
我們在設(shè)定line-height行高時,行內(nèi)框(也就是內(nèi)聯(lián)盒子)的高度是不會有任何變化的,不知道大家有沒有注意到這個情況!
如下案例:
<div>
<span style="">重慶市</span>
<em>北京市</em>
<strong style="line-height: 30px;">深圳市</strong>
</div>
如圖: 我給strong設(shè)定了line-height為30px 但strong的高度依舊是19.8 其他兩個內(nèi)聯(lián)盒子也是一樣的高度 并沒有影響,
影響的是strong上下周圍的區(qū)域 也就是分別增加/減少到內(nèi)容區(qū)域的上下兩邊灰色的部分! 并且上下的灰色部分的高度是一致的!
這也就是我們待會要講解到的行框與行間距(行距)、(半行距)的概念
(3) 行框盒子 line box
每一行就是一個行框盒子,那什么又叫做每一行呢 ?由多個內(nèi)聯(lián)盒子組合而成的一行 就會形成一個行框盒子
所以反推每一個行框盒子又是由一個個內(nèi)聯(lián)盒子組成而來的!
注意: 是每一行都會形成,如果文字有五行,就會形成5個行框。
如下圖:
綠色框部分就是由一個一個的內(nèi)聯(lián)盒子組成的 最終這一個整體就叫做一個 行框 或者叫 行框盒子
小提示: 如果有換行符 把字符和元素?fù)Q到下一行那么 下一行就是一個新的行框! 就相當(dāng)于有多行內(nèi)容時,每行都會有自己的行框
注意: 并且 行框高度等于本行框內(nèi)部,所有行內(nèi)框(內(nèi)聯(lián)盒子)中,最大的那個行內(nèi)框(內(nèi)聯(lián)盒子)的值! 重點: 是以帶有行高值最大的行內(nèi)框(內(nèi)聯(lián)元素)為基準(zhǔn)來最終計算行框的高度,其他行內(nèi)框(內(nèi)聯(lián)元素)采用自己的對齊方式向基準(zhǔn)對齊!
簡單的說 就是 行間距 + 字體大小=Line-height的高度 就是這個高度撐開了行框! (行間距包含在行框內(nèi)部的!) 為了方便理解請看下圖:
從上圖可以看出來 所有的內(nèi)聯(lián)元素都是以基線對齊的上面已經(jīng)說過了,但重要的是 第二個內(nèi)聯(lián)元素具有行高, 產(chǎn)生了行間距 所以就以第二個內(nèi)聯(lián)元素為基準(zhǔn)來計算行框最終的高度!
備注: 設(shè)置line-height屬性會影響行框的布局? 這句話的意義何在?
答案就是: line-height 與 font-size 的計算值之差(行距)分為兩半,分別加到一個內(nèi)聯(lián)元素的頂部和底部 而且計算出來的差值分別加到內(nèi)容區(qū)域的頂部和底部的就是行距 所以實質(zhì)上撐開 行框 的是line-height行高其中的行距!
(4) 包含盒子 containing box
這段代碼中的p標(biāo)簽就是一個包含盒子! 包含盒子的內(nèi)部就是由一行一行的行框盒子組成!
一個行框盒子 說明只有一行, 多個行框盒子說明是多行! 當(dāng)然也有人稱呼它為 包含塊(containing block)
如下圖:
粉紅色部分的就是包含塊部分! 包含塊最終把這一行整合為一個整體!
(5) 幽靈空白節(jié)點
這個概念聽起來就很玄乎! 很奇特 但其實也是在內(nèi)聯(lián)盒模型中一個很重要的概念!
概念理解: 在瀏覽器對內(nèi)聯(lián)元素的解析和渲染中 每一個行框 前面都有一個 空白節(jié)點 但很奇特的是這個空白節(jié)點永遠(yuǎn)是看不見透明的 并且也不占據(jù)任何寬度 也就是說 寬度為0, 是的 肉眼看不見 也無法通過腳本去獲取到 就好比幽靈一般! 但有的的確確是存在的! 就跟文本節(jié)點一樣 所以 大家都稱為它是 幽靈空白節(jié)點
注意: 有一個前提條件 它主要是在HTML5的文檔聲明中才有這個情況,其他老一點的文檔聲明則不存在 幽靈空白節(jié)點!
我們來看一個案例 就會馬上了解 如下:
<style type="text/css" >
div{
background: #cd0000;
}
span{
display: inline-block;
}
</style>
<div><span></span></div>
注意: 這里我們并沒有設(shè)置任何高度! 而結(jié)果卻是如下圖所示:
此時你看見結(jié)果后一定會很驚訝 為什么div的高度不是0呢? 我們并沒有給div設(shè)置任何高度呀 對吧 并且內(nèi)部span的高度我們也沒有設(shè)置呀 高度也應(yīng)該是0 那么div的高度20px是如何來的呢? 這就是我們剛剛說的 幽靈空白節(jié)點 的緣故
其實原因就是 : 瀏覽器對內(nèi)聯(lián)元素的解析和渲染中 每一個行框 前面都有一個 空白節(jié)點 那么這里就是在span元素的前面還有一個寬度為0的空白字符!
并且其實它也是一個盒子 不過是一個抽象的盒子 官方定義名稱為: strut (支柱) 重點來了, 并且這個空白字符strut(支柱) 是一個存在于每個行框盒子 內(nèi)部的最前面 它的寬度只有0px,看不到的, 同時這個 strut (支柱)的行高和字體大小都與該元素相同! 簡單的先知道這個概念就可以了 至于高度從何而來我們后面再細(xì)說!
圖解如下:
CSS官方對strut (支柱) 的介紹: [了解]
Each line box starts with a zero-width inline box with the element's font an d line-height properties. We call that imaginary box a "strut"!
我們來看一個跟幽靈空白節(jié)點有關(guān)的案例:
<style>
.box{
line-height: 256px;
background: yellow;
}
</style>
<div class="box">
<img src="images/test.gif">
</div>
效果:
此時 div的高會成為256px, 有人會認(rèn)為這是把圖片的高度改變了,其實不是 而是line-height把 幽靈空白節(jié)點上下的行距增大從而改變了 因為圖片是內(nèi)聯(lián)元素 會形成一個 行框盒子 在HTML5文檔模式下, 每一個行框盒子前面都有一個寬度為0的 幽靈空白節(jié)點 前面也提到過了 這個幽靈空白節(jié)點的特性和普通字符一模一樣也就是它是一個隱藏的內(nèi)聯(lián)元素 所以其實是這個幽靈空白節(jié)點被設(shè)置了上下行距為122像素的緣故 撐開了行框 ,而行框最后撐開了外面的div元素!
了解幽靈空白節(jié)點為后續(xù)更好的認(rèn)識內(nèi)聯(lián)元素打好堅實的基礎(chǔ)!
先提出一個問題: 不管是內(nèi)聯(lián)元素 還是 塊元素 在他們沒有設(shè)置高度并且里面也有文字內(nèi)容的情況下 元素的高度從何而來?
很多人認(rèn)為是由文字撐開! 實際上卻不是, 而是line-height的高度決定的!
案例1:
通過測試我們可以看出 .test1 元素雖然設(shè)置了font-size為36px 但line-height設(shè)置為0后 .test1元素顯示成了一根線! 并沒有像有些人所說的文字會撐開! 而.test2雖然font-size設(shè)為了0 文字看不見了,但line-height設(shè)為了36px 它卻把 .test2元素?fù)伍_了! 原理跟上面所講到的 幽靈空白節(jié)點 一致! (個人理解)
案例2
<style>
span,em{
background-color: red;
line-height: 100px;
/*font-size: 100px;*/
border: 1px solid blue;
}
</style>
<div>
<span>北京市</span>
<span>北京市</span>
<span>北京市</span>
<span>北京市</span>
</div>
<div>
<em>北京市</em>
<em>北京市</em>
<em>北京市</em>
<em>北京市</em>
</div>
效果如下:
從上圖看 通過給內(nèi)聯(lián)元素span、em設(shè)置line-height , 他們的可視高度沒有變,但他們的彼此撐開了外部包含的div 那么是什么撐開的呢?
答案是: line-height撐開了行框盒子 然后這個行框盒子從我們?nèi)庋凵峡词强床灰姷? 但它又可以撐開外部的div 所以就看到現(xiàn)在兩行文字彼此之間有距離了!
所以從圖中看, 內(nèi)聯(lián)元素設(shè)置line-height但內(nèi)聯(lián)元素本身高度是沒有變化,但每一行的行框的高度改變了, 從人的視覺上是看不出來的! 而撐開的這個高其實就叫 行距
行距又稱為 行間距
行距 從意義上來說 作用是讓我們閱讀文章的時候,好確定閱讀的方向!
行距 從css的角度來說, 代表的不是一個地方, 而是要分為兩個部分! 分別是一個文本行內(nèi)容的頂部和底部!
也就是說 底線下面粉紅色標(biāo)注區(qū)域 和 頂線上面粉紅色標(biāo)注區(qū)域, 就是行間距
如下圖:
中間黃顏色部分 等于 上半行距 + 下半行距 之和 就是行間距, 也就是行高與字體尺寸的差稱為行間距
但即使是只有一行文字,其實上方也是有行距的 只不過這個行距的高度僅僅是完整行距高度的一半! 俗稱 半行距
行距小結(jié): 指相鄰文本行間上一個文本行底線和下一文本行頂線之間的距離。
當(dāng)然,有些人的理解是: (上文本行行高-內(nèi)容區(qū)高度)/2+(下文本行行高-內(nèi)容區(qū)高度)/2
為什么我們要算行距呢? 是因為上面提到了 半行距 那么這個半行距是如何求得呢 ? 我們就要了解一下這個行距的計算公式了!
行間距=line-height的值(行高) - font-size字體大小 (行間距=行高 - 字體大小)
然后 算出來的這個行間距 / 2 所得到的值分別給粉紅色的兩部, 分別加到一個行內(nèi)框(內(nèi)聯(lián)盒子)的頂部和底部即可!
也就是俗稱的 半行間距【(行高-字體size)/2 】分別增加 或者 減少到內(nèi)容區(qū)域的上下兩邊:
例如: 設(shè)置行高為40px; 字體大小設(shè)為16px , 那么根據(jù)上面的公式我們得到行間距的值是24px, 這個24像素要除以2 劃分為兩個部分!
也就是行內(nèi)容的頂部 和 底部 這兩個地方分別為: 12px像素!
案例代碼:
<style>
#cont{
width:600px;
background-color:rgb(255,255,30);
line-height: 40px;
font-size: 16px;
}
</style>
<div id="cont">
在過去的52周,騰訊的最低股價為324.29港元,最高為633港元。按照最高股價計算,騰訊的總市值在過去一年創(chuàng)造了歷史新高——突破6萬億港元。
在2018年的“930改革”后,經(jīng)歷2019年的波動,騰訊終于在2020年重新回到增長軌道。
一方面,隨著游戲版權(quán)開放,加上全球新冠肺炎疫情蔓延,騰訊的“現(xiàn)金牛”業(yè)務(wù)游戲收獲頗豐;另外一方面,騰訊堅決落地產(chǎn)業(yè)互聯(lián)網(wǎng)戰(zhàn)略,并初見成效,擺脫了增長依賴于游戲業(yè)務(wù)的局面。
在高速增長下,2020年騰訊也存在一些隱憂,隨著監(jiān)管部門加強對于互聯(lián)網(wǎng)平臺經(jīng)濟(jì)的監(jiān)管和反壟斷的深入進(jìn)行,騰訊需要在適應(yīng)環(huán)境變化的情況下保持增長
</div>
所以上下文本之間的行間距也就是上面文本底部的12像素+下面文本頂部的12像素!
我們知道了內(nèi)容區(qū)域與字體字號大小的關(guān)系、也知道了什么是行間距以后, 其實我們就可以反推出 行高是什么了!
公式: 內(nèi)容區(qū)域content area(或字體大小) + 行間距=行高
注意 :
line-height行高小結(jié)
行高(line-height):就是包括內(nèi)容區(qū)域(content area)與以內(nèi)容區(qū)為基礎(chǔ)對稱拓展的空白區(qū)域(也就是上下半行距),我們稱之為行高。
一般情況下,也可以認(rèn)為是相鄰文本行基線間的距離。
如下圖:
line-height的取值可以是一個像素值!
特別注意:
line-height的取值可以是一個百分比%
指定一個百分?jǐn)?shù), 意思就是會相對于font-size字體大小去計算行高! 沒有明白嗎?那我們看下面的案例吧!
案例1
font-size大小為30px,而line-height的大小為80%,也就是說line-height的大小占 font-size大小的80%,又因為80%相當(dāng)于 80/100就等于0.8,所以最終line-height的大小也就是行高為30px*0.8=24px,根據(jù)上面的公式,那么行間距就為24px-30px=-6px,上面文本底部與下面文本頂部都為-3px。
代碼如下:
<style>
#cont{
width:600px;
background-color:rgb(255,255,30);
line-height: 80%;
font-size: 30px;
}
</style>
注意: 但是如果使用百分比,那么這個百分比通常不會小于100%,因為小于100%所計算出來的行距值是一個負(fù)數(shù)! 其實跟上面的line-height的值小于當(dāng)前元素的font-size的值是一個道理! 都是沒有意義的!
如下圖:
案例2
font-size大小為30px,而line-height的大小為200%,也就是說line-height的大小就是 font-size大小的兩倍,又因為200%相當(dāng)于 200/100就等于2,所以最終line-height的大小也就是行高為30px*2=60px,根據(jù)上面的公式,那么行間距就為60px-30px=30px,上面文本底部與下面文本頂部都為15px。這樣用百分比來表示行高才有意義。代碼如下:
<style>
#cont{
width:600px;
background-color:rgb(255,255,30);
line-height: 200%;
font-size: 30px;
}
</style>
如下圖:
小提示: line-height的百分比取值并不是很常用! 通常都是像素值!
line-height的取值可以是一個整數(shù)數(shù)字!
如果設(shè)置line-height的值為一個整數(shù)數(shù)值,那么則行高的值其實就是font-size字體大小相應(yīng)的倍數(shù)!
簡單的說就是如果設(shè)置數(shù)值 此數(shù)字會與當(dāng)前的font-size字體大小相乘來設(shè)置行間距!
案例如下: 這里line-height設(shè)置為2 也就相當(dāng)于上面的 line-height設(shè)置為:200%是一個道理!那么行高的實際大小為:30px*2=60px,也就是說line-height:60px,則半行距=(60px-30px)/2=15px。代碼如下:
<style>
#cont{
width:600px;
background-color:rgb(255,255,30);
line-height: 2;
font-size: 30px;
}
</style>
1、line-height讓單行文本垂直居中詳解
相信大家都知道一種說法,想要讓一個單行文本垂直居中,那么只要設(shè)置line-height 的大小和 height高度一樣就可以了
例如:
一個塊元素中只有一行文字 或者 超級鏈接文字的情況下,也就是說對于單行文本可以將line-height行高設(shè)置為當(dāng)前元素 或者 父元素的高度一樣就可以了!
這樣就可以讓這個單行文本在當(dāng)前元素中 或者 說父元素中 垂直居中!
案例
<style>
#cont{
width:600px;
height: 100px;
background-color:rgb(255,255,30);
font-size: 30px;
line-height: 100px;
}
</style>
<div id="cont">
hello world!
</div>
但從我查閱資料并實際操作后,證明讓line-height的值設(shè)置為和height值一樣來實現(xiàn)單行文本的垂直居中這種說法并不是很正確!
原因有如下:
要讓單行文本垂直居中。其實只需要設(shè)置line-height這一個屬性就可以了,根本不需要再設(shè)置一個height屬性, 所以有很多教程也誤導(dǎo)了大多數(shù)人一定要去設(shè)置一個height屬性才可以垂直居中,其實不然! 如下:
<style>
#cont{
width:600px;
background-color:rgb(255,255,30);
font-size: 30px;
line-height: 100px;
}
</style>
2、line-height只能讓文本近似于垂直居中
這里的垂直居中只僅僅是無限接近于垂直居中! 為什么要說成是接近于垂直居中呢?
原因1: 行高的實現(xiàn)在于CSS中的行間距是 一行文字的上下等分機制! 也就是說一行文本的上面和下面所存在的行間距是相等的! 所以如果行間距只存在于一邊的話 那么文字是無法垂直居中的, 其實這也證明了文字垂直居中靠的重要因素就是上下行間距!
原因2: 剛剛說了 接近于垂直居中,因為文字的中線位置普遍要比 行框盒子的中間線位置要低一些! 如果你不理解 請看下圖: 黃顏色的線 為行框盒子的中間線表示位置, 藍(lán)色的線為文字的中線位置! 是不是文字中線比行框盒子低呢! 對吧! 但有些字體因為看起來可能比較有下沉的感覺,所以可能在行間距垂直居中的作用下會有1px像素的小差異 所以我們稱之為:接近于垂直居中!
所以我們說的接近于垂直居中 而不能完全是垂直居中的原因是 vertical-align造成的, 和line-height是沒有關(guān)系的, 關(guān)于vertical-align屬性 在后面會詳細(xì)說到這里就不多說了!
3、line-height讓多行文本垂直居中
使用line-height來控制文本垂直居中,不僅僅用于單行文本, 就連多行文本其實也是可以進(jìn)行垂直居中的!
多行文本的垂直居中和 單行文本中就不一樣了! 需要使用到vertical-align屬性!
案例代碼:
<style>
#cont{
width:600px;
background-color:rgb(255,255,30);
line-height: 200px;
}
#cont>p{
line-height: normal;
display: inline-block;
vertical-align: middle;
}
</style>
<div id="cont">
<p>
測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...
測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...
測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...
測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...測試數(shù)據(jù)...
</p>
</div>
效果圖如下:
原理實現(xiàn)如下
使用font屬性也可以設(shè)置行高,可以在字體大小后添加 /行高大小 來表示行高,這個值是可選的,不指定的時候會采用默認(rèn)值也就是沒得。
例如:
font: 30px/行高值px '字體樣式';
但是當(dāng)line-height屬性設(shè)置在 font 屬性之前,并且 font 屬性中沒有設(shè)置行高的時候,line-height屬性會被font 屬性中的行高默認(rèn)值覆蓋,也就是說在這個時候line-height屬性是無效的。所以如果想要設(shè)置行高,可以把line-height屬性設(shè)置在 font 屬性之后,也可以直接在 font 屬性里面設(shè)置行高。
案例:
<style>
/*line-height會被font的默認(rèn)行高而覆蓋*/
#cont{
width:600px;
background-color:rgb(255,255,30);
line-height: 50px;
font: 30px '微軟雅黑';
}
/*line-height寫在font下面會被正常解析*/
#cont{
width:600px;
background-color:rgb(255,255,30);
font: 30px '微軟雅黑';
line-height: 50px;
}
/*直接通過font來調(diào)整line-height行高*/
#cont{
width:600px;
background-color:rgb(255,255,30);
font: 30px/50px '微軟雅黑';
}
</style>
小結(jié): 所以使用font屬性的時候要注意一些其他文本屬性的順序,例如line-height, font-style,font-weight,font-family 這些屬性要是寫在font前面都可能被后面的font默認(rèn)值所覆蓋! 注意使用順序即可!
我們先來看一個案例吧:
<style>
div{
width:500px;
background: yellow;
}
</style>
<div>
<img src="images/1.gif">
</div>
結(jié)果圖:
從上圖中可以看出,圖片在div元素中的下部會有一點點間隙! 這正因為前面提到的 匿名空白文本節(jié)點的存在,才會造成圖中的情形!
為什么給父元素設(shè)置text-align: center; 會讓內(nèi)部的img元素居中?
案例:
<div>
<img src="images/1.gif">
</div>
<style>
div{
width:300px;
background: yellow;
text-align: center;
}
</style>
如圖:
原因: 這其實是居中的 幽靈空白節(jié)點, 而不是圖片! 因為幽靈空白節(jié)點也是一個文本節(jié)點,設(shè)置text-align: center; 理所當(dāng)然會居中,而且后面的圖片和前面的幽靈空白節(jié)點同樣都是 內(nèi)聯(lián)元素,幽靈空白節(jié)點居中的時候就把圖片頂過來了! 而且幽靈空白節(jié)點是0寬度看不出來的,所以我們看到的就僅僅是圖片居中了! (個人理解僅供參考)
解決圖片因幽靈空白節(jié)點而產(chǎn)生的底部空隙
行高(line-height):就是包括內(nèi)容區(qū)與以內(nèi)容區(qū)為基礎(chǔ)對稱拓展的空白區(qū)域(也就是上下半行距) 加起來的總和,我們稱之為行高
給行元素(內(nèi)聯(lián)元素)設(shè)置line-height后, 行內(nèi)框(內(nèi)聯(lián)元素盒子) 撐開了行框 , 而行框又撐開了內(nèi)容區(qū)域、而內(nèi)容區(qū)域撐開了包含元素也就是最外層的包含塊!
撐開的部分平均分布在上下兩側(cè)就是行距 !
而行高 就是 內(nèi)容區(qū)域+ 兩側(cè)行間距 就是=行高
原創(chuàng)技術(shù)文章
如果喜歡話請 "點贊 評論 收藏" 一鍵三連
大家的支持就是我堅持下去的動力!
Html和CSS的關(guān)系
學(xué)習(xí)web前端開發(fā)基礎(chǔ)技術(shù)需要掌握:HTML、CSS、JavaScript語言。下面我們就來了解下這三門技術(shù)都是用來實現(xiàn)什么的:
1. HTML是網(wǎng)頁內(nèi)容的載體。內(nèi)容就是網(wǎng)頁制作者放在頁面上想要讓用戶瀏覽的信息,可以包含文字、圖片、視頻等。
2. CSS樣式是表現(xiàn)。就像網(wǎng)頁的外衣。比如,標(biāo)題字體、顏色變化,或為標(biāo)題加入背景圖片、邊框等。所有這些用來改變內(nèi)容外觀的東西稱之為表現(xiàn)。
3. JavaScript是用來實現(xiàn)網(wǎng)頁上的特效效果。如:鼠標(biāo)滑過彈出下拉菜單。或鼠標(biāo)滑過表格的背景顏色改變。還有焦點新聞(新聞圖片)的輪換。可以這么理解,有動畫的,有交互的一般都是用JavaScript來實現(xiàn)的。
1, HTML標(biāo)簽不區(qū)分大小寫,<h1>和<H1>是一樣的,但建議小寫,因為大部分程序員都以小寫為準(zhǔn)。
一個HTML文件是有自己固定的結(jié)構(gòu)的。
<html>
<head>...</head>
<body>...</body>
</html>
代碼講解:
1. <html></html>稱為根標(biāo)簽,所有的網(wǎng)頁標(biāo)簽都在<html></html>中。
2. <head> 標(biāo)簽用于定義文檔的頭部,它是所有頭部元素的容器。頭部元素有<title>、<script>、 <style>、<link>、 <meta>等標(biāo)簽,頭部標(biāo)簽在下一小節(jié)中會有詳細(xì)介紹。
3. 在<body>和</body>標(biāo)簽之間的內(nèi)容是網(wǎng)頁的主要內(nèi)容,如<h1>、<p>、<a>、<img>等網(wǎng)頁內(nèi)容標(biāo)簽,在這里的標(biāo)簽中的內(nèi)容會在瀏覽器中顯示出來。
1,下面這些標(biāo)簽可用在 head 部分:
<head>
<title>...</title>
<meta>
<link>
<style>...</style>
<script>...</script>
</head>
2,代碼注釋不僅方便程序員自己回憶起以前代碼的用途,還可以幫助其他程序員很快的讀懂你的程序的功能,方便多人合作開發(fā)網(wǎng)頁代碼。
語法:
<!--注釋文字 -->
3,CSS注釋代碼
就像在Html的注釋一樣,在CSS中也有注釋語句:用/*注釋語句*/來標(biāo)明(Html中使用<!--注釋語句-->)
1,語義化:說的通俗點就是:明白每個標(biāo)簽的用途(在什么情況下我可以使用這個標(biāo)簽才合理)比如,網(wǎng)頁上的文章的標(biāo)題就得用標(biāo)題標(biāo)簽,網(wǎng)頁上的各個欄目的欄目名稱也可以使用標(biāo)題標(biāo)簽。
2,語義化的作用
1). 更容易被搜索引擎收錄。
2). 更容易讓屏幕閱讀器讀出網(wǎng)頁內(nèi)容。
二,認(rèn)識標(biāo)簽(第一部分)
如果想在網(wǎng)頁上顯示文章,這時就需要<p>標(biāo)簽了,把文章的段落放到<p>標(biāo)簽中。
語法:
<p>段落文本</p>
<hx>標(biāo)簽來制作文章的標(biāo)題。
標(biāo)題標(biāo)簽一共有6個,h1、h2、h3、h4、h5、h6分別為一級標(biāo)題、二級標(biāo)題、三級標(biāo)題、四級標(biāo)題、五級標(biāo)題、六級標(biāo)題。并且依據(jù)重要性遞減。<h1>是最高的等級。
語法:
<hx>標(biāo)題文本</hx> (x為1-6)
文章的標(biāo)題前面已經(jīng)說過了,可以使用標(biāo)題標(biāo)簽,另外網(wǎng)頁上的各個欄目的標(biāo)題也可使用它們
有了段落又有了標(biāo)題,現(xiàn)在如果想在一段話中特別強調(diào)某幾個文字,這時候就可以用到<em>或<strong>標(biāo)簽。
但兩者在強調(diào)的語氣上有區(qū)別:<em> 表示強調(diào),<strong> 表示更強烈的強調(diào)。并且在瀏覽器中<em> 默認(rèn)用斜體表示,<strong> 用粗體表示。兩個標(biāo)簽相比,目前國內(nèi)前端程序員更喜歡使用<strong>表示強調(diào)
<em>、<strong>、<span>的區(qū)別:
1. <em>和<strong>標(biāo)簽是為了強調(diào)一段話中的關(guān)鍵字時使用,它們的語義是強調(diào)。
2. <span>標(biāo)簽是沒有語義的,它的作用就是為了設(shè)置單獨的樣式用的,把一段話圈起來,然后用css設(shè)置樣式。
q標(biāo)簽,短文本引用
比如在你的網(wǎng)頁的文章里想引用某個作家的一句詩,這樣會使你的文章更加出彩,那么<q>標(biāo)簽是你所需要的。
語法:
<q>引用文本</q>
1,注意要引用的文本不用加雙引號,瀏覽器會對q標(biāo)簽自動添加雙引號。
2,注意這里用<q>標(biāo)簽的真正關(guān)鍵點不是它的默認(rèn)樣式雙引號(如果這樣我們不如自己在鍵盤上輸入雙引號就行了),而是它的語義:引用別人的話
blockquote標(biāo)簽,長文本引用
<blockquote>的作用也是引用別人的文本。但它是對長文本的引用
<q>標(biāo)簽是對簡短文本的引用,比如說引用一句話就用到<q>標(biāo)簽。
語法:
<blockquote>引用文本</blockquote>
瀏覽器對<blockquote>標(biāo)簽的解析是縮進(jìn)樣式
換行標(biāo)簽<br/>
<br/>標(biāo)簽作用相當(dāng)于word文檔中的回車。
分割線標(biāo)簽<hr/>
<hr/>標(biāo)簽和<br/>標(biāo)簽一樣也是一個空標(biāo)簽,所以只有一個開始標(biāo)簽,沒有結(jié)束標(biāo)簽。
<hr/>標(biāo)簽的在瀏覽器中的默認(rèn)樣式線條比較粗,顏色為灰色,可能有些人覺得這種樣式不美觀,沒有關(guān)系,這些外在樣式在我們以后學(xué)習(xí)了css樣式表之后,都可以對其修改。
html特殊字符
空格: (;分號必不可少)
address標(biāo)簽,為網(wǎng)頁加入地址信息
語法:
<address>地址信息</address>
如:
<address>北京市西城區(qū)德外大街10號</address>
在瀏覽器上顯示的樣式為斜體,如果不喜歡斜體,當(dāng)然可以,可以在后面的課程中使用css樣式來修改它<address>標(biāo)簽的默認(rèn)樣式
在介紹語言技術(shù)的網(wǎng)站中,必免不了在網(wǎng)頁中顯示一些計算機專業(yè)的編程代碼,當(dāng)代碼為一行代碼時,你就可以使用<code>標(biāo)簽了,如下面例子:
<code>var i=i+300;</code>
語法:
<code>代碼語言</code>
注意:在文章中一般如果要插入多行代碼時不能使用<code>標(biāo)簽,如果是多行代碼,可以使用<pre>標(biāo)簽。
<pre> 標(biāo)簽的主要作用:預(yù)格式化的文本。被包圍在 pre 元素中的文本通常會保留空格和換行符。如果用以前的方法,回車需要輸入<br>簽,空格需要輸入 。
注意:<pre> 標(biāo)簽不只是為顯示計算機的源代碼時用的,在你需要在網(wǎng)頁中預(yù)顯示格式時都可以使用它,只是<pre>標(biāo)簽的一個常見應(yīng)用就是用來展示計算機的源代碼。
三,認(rèn)識標(biāo)簽(第二部分)
1,無序列表
ul-li是沒有前后順序的信息列表。
語法:
<ul>
<li>信息</li>
<li>信息</li>
......
</ul>
舉例:
<ul>
<li>精彩少年</li>
<li>美麗突然出現(xiàn)</li>
<li>觸動心靈的旋律</li>
</ul>
ul-li在網(wǎng)頁中顯示的默認(rèn)樣式一般為:每項li前都自帶一個圓點
2,有序列表
語法:
<ol>
<li>信息</li>
<li>信息</li>
......
</ol>
舉例:
下面是一個熱點課程下載排行榜:
<ol>
<li>前端開發(fā)面試心法 </li>
<li>零基礎(chǔ)學(xué)習(xí)html</li>
<li>JavaScript全攻略</li>
</ol>
<ol>在網(wǎng)頁中顯示的默認(rèn)樣式一般為:每項<li>前都自帶一個序號,序號默認(rèn)從1開
<div>容器標(biāo)簽
在網(wǎng)頁制作過程過中,可以把一些獨立的邏輯部分劃分出來,放在一個<div>標(biāo)簽中,這個<div>標(biāo)簽的作用就相當(dāng)于一個容器。
語法:
<div>…</div>
確定邏輯部分:
什么是邏輯部分?它是頁面上相互關(guān)聯(lián)的一組元素。如網(wǎng)頁中的獨立的欄目版塊,就是一個典型的邏輯部分。如下圖所示:圖中用紅色邊框標(biāo)出的部分就是一個邏輯部分,就可以使用<div>標(biāo)簽作為容器
注釋:<div> 是一個塊級元素,也就是說,瀏覽器通常會在 div 元素前后放置一個換行符。
創(chuàng)建表格的五個元素:
table、tbody、tr、th、td
1、<table>…</table>:整個表格以<table>標(biāo)記開始、</table>標(biāo)記結(jié)束。
2、<tbody>…</tbody>:當(dāng)表格內(nèi)容非常多時,表格會下載一點顯示一點,但如果加上<tbody>標(biāo)簽后,這個表格就要等表格內(nèi)容全部下載完才會顯示。如右側(cè)代碼編輯器中的代碼。(這個標(biāo)簽基本上不怎么用了)
3、<tr>…</tr>:表格的一行,所以有幾對tr 表格就有幾行。
4、<td>…</td>:表格的一個單元格,一行中包含幾對<td>...<td/>,說明一行中就有幾列。
5、<th>…</th>:表格的頭部的一個單元格,表格表頭。
6、表格中列的個數(shù),取決于一行中數(shù)據(jù)單元格的個數(shù)。
表格還是需要添加一些標(biāo)簽進(jìn)行優(yōu)化,可以添加標(biāo)題和摘要
<table summary="本表格記錄2012年到2013年庫存記錄,記錄包括U盤和耳機庫存量">
<caption>2012年到2013年庫存記錄</caption>
1,使用<a>標(biāo)簽,鏈接到別一個頁面
使用<a>標(biāo)簽可實現(xiàn)超鏈接,它在網(wǎng)頁制作中可以說是無處不在,只要有鏈接的地方,就會有這個標(biāo)簽。
語法:
<a href=”目標(biāo)網(wǎng)址”>鏈接顯示的文本</a>
例如:
<a >click here!</a>
上面例子作用是單擊click here!文字,網(wǎng)頁鏈接到http://www.imooc.com這個網(wǎng)頁。
認(rèn)識<img>標(biāo)簽,為網(wǎng)頁插入圖片
在網(wǎng)頁的制作中為使網(wǎng)頁炫麗美觀,肯定是缺少不了圖片,可以使用<img>標(biāo)簽來插入圖片。
語法:
<img src="圖片地址" alt="下載失敗時的替換文本" title="提示文本">
舉例:
<img src="myimage.gif" alt="My Image" title="My Image" />
講解:
1、src:標(biāo)識圖像的位置;
2、alt:指定圖像的描述性文本,當(dāng)圖像不可見時(下載不成功時),可看到該屬性指定的文本;
3、title:提供在圖像可見時對圖像的描述(鼠標(biāo)滑過圖片時顯示的文本);
4、圖像可以是GIF,PNG,JPEG格式的圖像文件。
四,表單標(biāo)簽(與用戶進(jìn)行交互)
表單是可以把瀏覽者輸入的數(shù)據(jù)傳送到服務(wù)器端,這樣服務(wù)器端程序就可以處理表單傳過來的數(shù)據(jù)。
語法:
<form method="傳送方式" action="服務(wù)器文件">
講解:
1.<form> :<form>標(biāo)簽是成對出現(xiàn)的,以<form>開始,以</form>結(jié)束。
2.action :瀏覽者輸入的數(shù)據(jù)被傳送到的地方,比如一個PHP頁面(save.php)。
3.method : 數(shù)據(jù)傳送的方式(get/post)。
<input>輸入框
文本輸入框、密碼輸入框
當(dāng)用戶要在表單中鍵入字母、數(shù)字等內(nèi)容時,就會用到文本輸入框。文本框也可以轉(zhuǎn)化為密碼輸入框。
語法:
<form>
<input type="text/password" name="名稱" value="文本" />
</form>
1、type:
當(dāng)type="text"時,輸入框為文本輸入框;
當(dāng)type="password"時, 輸入框為密碼輸入框。
2、name:為文本框命名,以備后臺程序ASP 、PHP使用。
3、value:為文本輸入框設(shè)置默認(rèn)值。(一般起到提示作用)
文本域,支持多行文本輸入
當(dāng)用戶需要在表單中輸入大段文字時,需要用到文本輸入域。
語法:
<textarea rows="行數(shù)" cols="列數(shù)">文本</textarea>
1、<textarea>標(biāo)簽是成對出現(xiàn)的,以<textarea>開始,以</textarea>結(jié)束。
2、cols :多行輸入域的列數(shù)。
3、rows :多行輸入域的行數(shù)。
單選框,復(fù)選框
語法:
<input type="radio/checkbox" value="值" name="名稱" checked="checked"/>
1、type:
當(dāng)type="radio"時,控件為單選框
當(dāng)type="checkbox"時,控件為復(fù)選框
2、value:提交數(shù)據(jù)到服務(wù)器的值(后臺程序PHP使用)
3、name:為控件命名,以備后臺程序ASP、PHP使用
4、checked:當(dāng)設(shè)置checked="checked"時,該選項被默認(rèn)選中
注意:同一組的單選按鈕,name取值一定要一致,這樣同一組的單選按鈕才可以起到單選的作用。
下拉列表框,節(jié)省空間
下拉列表在網(wǎng)頁中也常會用到,它可以有效的節(jié)省網(wǎng)頁空間。既可以單選、又可以多選。
語法:<option value="提交值">選項</option>
提交值是向服務(wù)器提交的值,選項是顯示的值。
<form action="save.php" method="post" >
<label>愛好:</label>
<select>
<option value="看書">看書</option>
<option value="旅游" selected="selected">旅游</option>
<option value="運動">運動</option>
<option value="購物">購物</option>
</select>
</form>
使用下拉列表框進(jìn)行多選
下拉列表也可以進(jìn)行多選操作,在<select>標(biāo)簽中設(shè)置multiple="multiple"屬性,
就可以實現(xiàn)多選功能,進(jìn)行多選時按下Ctrl鍵同時進(jìn)行單擊,可以選擇多個選項。
如下代碼:
<form action="save.php" method="post" >
<label>愛好:</label>
<select multiple="multiple">
<option value="看書">看書</option>
<option value="旅游">旅游</option>
<option value="運動">運動</option>
<option value="購物">購物</option>
</select>
</form>
在表單中有兩種按鈕可以使用,分別為:提交按鈕、重置。
1,提交按鈕:當(dāng)用戶需要提交表單信息到服務(wù)器時,需要用到提交按鈕。
語法:
<input type="submit" value="提交">
type:只有當(dāng)type值設(shè)置為submit時,按鈕才有提交作用
value:按鈕上顯示的文字
2,重置按鈕,重置表單信息
當(dāng)用戶需要重置表單信息到初始時的狀態(tài)時,比如用戶輸入“用戶名”后,發(fā)現(xiàn)書寫有誤,可以使用重置按鈕使輸入框恢復(fù)到初始狀態(tài)。只需要把type設(shè)置為"reset"就可以。
語法:
<input type="reset" value="重置">
type:只有當(dāng)type值設(shè)置為reset時,按鈕才有重置作用
value:按鈕上顯示的文字
五,css樣式
認(rèn)識css樣式
CSS全稱為“層疊樣式表 (Cascading Style Sheets)”,它主要是用于定義HTML內(nèi)容在瀏覽器內(nèi)的顯示樣式,如文字大小、顏色、字體加粗等。
如下列代碼:
p{
font-size:12px;
color:red;
font-weight:bold;
}
使用CSS樣式的一個好處是通過定義某個樣式,可以讓不同網(wǎng)頁位置的文字有著統(tǒng)一的字體、字號或者顏色等。
CSS代碼語法
css 樣式由選擇符和聲明組成,而聲明又由屬性和值組成
選擇符{屬性:值}
p{color:red;}
選擇符:又稱選擇器,指明網(wǎng)頁中要應(yīng)用樣式規(guī)則的元素,如本例中是網(wǎng)頁中所有的段(p)的文字將變成藍(lán)色,而其他的元素(如ol)不會受到影響。
聲明:在英文大括號“{}”中的的就是聲明,屬性和值之間用英文冒號“:”分隔。當(dāng)有多條聲明時,中間可以英文分號“;”分隔,如下所示:
p{font-size:12px;color:red;}
從CSS 樣式代碼插入的形式來看基本可以分為以下3種:
內(nèi)聯(lián)式、嵌入式和外部式三種
1,內(nèi)聯(lián)式css樣式
就是把css代碼直接寫在現(xiàn)有的HTML標(biāo)簽中,如下面代碼:
<p style="color:red">這里文字是紅色。</p>
css樣式代碼要寫在style=""雙引號中,如果有多條css樣式代碼設(shè)置可以寫在一起,中間用分號隔開。如下代碼:
<p style="color:red;font-size:12px">這里文字是紅色。</p>
2,嵌入式css樣式,
就是可以把css樣式代碼寫在<style type="text/css"></style>標(biāo)簽之間。如下面代碼實現(xiàn)把三個<span>標(biāo)簽中的文字設(shè)置為紅色:
<style type="text/css">
span{
color:red;
}
</style>
嵌入式css樣式必須寫在<style></style>之間,并且一般情況下嵌入式css樣式寫在<head></head>之間。
3,外部式css樣式
寫在單獨的一個文件中
外部式css樣式(也可稱為外聯(lián)式)就是把css代碼寫一個單獨的外部文件中,這個css樣式文件以“.css”為擴展名,在<head>內(nèi)(不是在<style>標(biāo)簽內(nèi))使用<link>標(biāo)簽將css樣式文件鏈接到HTML文件內(nèi),如下面代碼:
<link href="base.css" rel="stylesheet" type="text/css" />
1、css樣式文件名稱以有意義的英文字母命名,如 main.css。
2、rel="stylesheet" type="text/css" 是固定寫法不可修改。
3、<link>標(biāo)簽位置一般寫在<head>標(biāo)簽之內(nèi)。
六,CSS選擇器
每一條css樣式定義由兩部分組成,形式如下:
選擇器{
樣式;
}
在{}之前的部分就是“選擇器”,“選擇器”指明了{(lán)}中的“樣式”的作用對象,也就是“樣式”作用于網(wǎng)頁中的哪些元素
標(biāo)簽選擇器其實就是html代碼中的標(biāo)簽。如右側(cè)代碼編輯器中的<html>、<body>、<h1>、<p>、<img>。例如下面代碼:
p{font-size:12px;line-height:1.6em;}
上面的css樣式代碼的作用:為p標(biāo)簽設(shè)置12px字號,行間距設(shè)置1.6em的樣式。
類選擇器在css樣式編碼中是最常用到的,如右側(cè)代碼編輯器中的代碼:可以實現(xiàn)為“膽小如鼠”、“勇氣”字體設(shè)置為紅色。
語法:
.類選器名稱{css樣式代碼;}
注意:
1、英文圓點開頭
2、其中類選器名稱可以任意起名(但不要起中文噢)
使用方法:
第一步:使用合適的標(biāo)簽把要修飾的內(nèi)容標(biāo)記起來,如下:
<span>膽小如鼠</span>
第二步:使用class="類選擇器名稱"為標(biāo)簽設(shè)置一個類,如下:
<span class="stress">膽小如鼠</span>
第三步:設(shè)置類選器css樣式,如下:
.stress{color:red;}/*類前面要加入一個英文圓點*/
在很多方面,ID選擇器都類似于類選擇符,但也有一些重要的區(qū)別:
1、為標(biāo)簽設(shè)置id="ID名稱",而不是class="類名稱"。
2、ID選擇符的前面是井號(#)號,而不是英文圓點(.)。
相同點:可以應(yīng)用于任何元素
不同點:
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、可以使用類選擇器詞列表方法為一個元素同時設(shè)置多個樣式。我們可以為一個元素同時設(shè)多個樣式,但只可以用類選擇器的方法實現(xiàn),ID選擇器是不可以的(不能使用 ID 詞列表)。
下面的代碼是正確的(完整代碼見右側(cè)代碼編輯器)
.stress{
color:red;
}
.bigsize{
font-size:25px;
}
<p>到了<span class="stress bigsize">三年級</span>下學(xué)期時,我們班上了一節(jié)公開課...</p>
上面代碼的作用是為“三年級”三個文字設(shè)置文本顏色為紅色并且字號為25px
下面的代碼是不正確的(完整代碼見右側(cè)代碼編輯器)
#stressid{
color:red;
}
#bigsizeid{
font-size:25px;
}
<p>到了<span id="stressid bigsizeid">三年級</span>下學(xué)期時,我們班上了一節(jié)公開課...</p>
上面代碼不可以實現(xiàn)為“三年級”三個文字設(shè)置文本顏色為紅色并且字號為25px的作用。
還有一個比較有用的選擇器子選擇器,即大于符號(>),用于選擇指定標(biāo)簽元素的子元素。如下面的代碼:
.food>li{border:1px solid red;}
這行代碼會使class名為food下的子元素li加入紅色實線邊框。
包含選擇器,即加入空格,用于選擇指定標(biāo)簽元素下的后輩元素。如右側(cè)代碼編輯器中的代碼:
.first span{color:red;}
請注意這個選擇器與子選擇器的區(qū)別
1,子選擇器(child selector)僅是指它的直接后代,或者你可以理解為作用于子元素的第一代后代
2,后代選擇器是作用于所有子后代元素。后代選擇器通過空格來進(jìn)行選擇,而子選擇器是通過“>”進(jìn)行選擇。
總結(jié):>作用于元素的第一代后代,空格作用于元素的所有后代。
通用選擇器是功能最強大的選擇器,它使用一個(*)號指定,它的作用是匹配html中任意標(biāo)簽元素,如下使用下面代碼使用html中任意標(biāo)簽元素字體顏色全部設(shè)置為紅色:
* {color:red;}
更有趣的是偽類選擇符,為什么叫做偽類選擇符,它允許給html不存在的標(biāo)簽設(shè)置樣式,比如說我們給html中一個標(biāo)簽元素的鼠標(biāo)滑過的狀態(tài)來設(shè)置字體顏色:
a:hover{color:red;}
這行代碼會使被<a></a>標(biāo)簽包裹的文字內(nèi)容中的“膽小如鼠”字體顏色在鼠標(biāo)滑過時變?yōu)榧t色。
當(dāng)你想為html中多個標(biāo)簽元素設(shè)置同一個樣式時,可以使用分組選擇符(,),如下代碼為右側(cè)代碼編輯器中的h1、span標(biāo)簽同時設(shè)置字體顏色為紅色:
h1,span{color:red;}
它相當(dāng)于下面兩行代碼:
h1{color:red;}
span{color:red;}
七,CSS的繼承、層疊和特殊性。
CSS的某些樣式是具有繼承性的,那么什么是繼承呢?繼承是一種規(guī)則,它允許樣式不僅應(yīng)用于某個特定html標(biāo)簽元素,而且應(yīng)用于其后代。比如下面代碼:如某種顏色應(yīng)用于p標(biāo)簽,這個顏色設(shè)置不僅應(yīng)用p標(biāo)簽,還應(yīng)用于p標(biāo)簽中的所有子元素文本,這里子元素為span標(biāo)簽。
但注意有一些css樣式是不具有繼承性的。如border:1px solid red;
根據(jù)權(quán)值來判斷使用哪個css樣式
瀏覽器是根據(jù)權(quán)值來判斷使用哪種css樣式的,權(quán)值高的就使用哪種css樣式。
下面是權(quán)值的規(guī)則:
標(biāo)簽的權(quán)值為1,類選擇符的權(quán)值為10,ID選擇符的權(quán)值最高為100。例如下面的代碼:
p{color:red;} /*權(quán)值為1*/
p span{color:green;} /*權(quán)值為1+1=2*/
.warning{color:white;} /*權(quán)值為10*/
p span.warning{color:purple;} /*權(quán)值為1+1+10=12*/
#footer .note p{color:yellow;} /*權(quán)值為100+10+1=111*/
注意:還有一個權(quán)值比較特殊--繼承也有權(quán)值但很低,有的文獻(xiàn)提出它只有0.1,所以可以理解為繼承的權(quán)值最低
我們來思考一個問題:如果在html文件中對于同一個元素可以有多個css樣式存在并且這多個css樣式具有相同權(quán)重值怎么辦?好,這一小節(jié)中的層疊幫你解決這個問題。
層疊就是在html文件中對于同一個元素可以有多個css樣式存在,當(dāng)有相同權(quán)重的樣式存在時,會根據(jù)這些css樣式的前后順序來決定,處于最后面的css樣式會被應(yīng)用。
如下面代碼:
p{color:red;}
p{color:green;}
<p class="first">三年級時,我還是一個<span>膽小如鼠</span>的小女孩。</p>
最后 p 中的文本會設(shè)置為green,這個層疊很好理解,理解為后面的樣式會覆蓋前面的樣式。
所以前面的css樣式優(yōu)先級就不難理解了:
內(nèi)聯(lián)樣式表(標(biāo)簽內(nèi)部)> 嵌入樣式表(當(dāng)前文件中)> 外部樣式表(外部文件中)。
重要性
我們在做網(wǎng)頁代碼的時,有些特殊的情況需要為某些樣式設(shè)置具有最高權(quán)值,怎么辦?這時候我們可以使用!important來解決。
如下代碼:
p{color:red!important;}
p{color:green;}
<p class="first">三年級時,我還是一個<span>膽小如鼠</span>的小女孩。</p>
這時 p 段落中的文本會顯示的red紅色。
注意:!important要寫在分號的前面
八,CSS格式化排版
文字排版
1,文字排版--字體
我們可以使用css樣式為網(wǎng)頁中的文字設(shè)置字體、字號、顏色等樣式屬性。下面我們來看一個例子,下面代碼實現(xiàn):為網(wǎng)頁中的文字設(shè)置字體為宋體。
body{font-family:"宋體";}
這里注意不要設(shè)置不常用的字體,因為如果用戶本地電腦上如果沒有安裝你設(shè)置的字體,就會顯示瀏覽器默認(rèn)的字體。(因為用戶是否可以看到你設(shè)置的字體樣式取決于用戶本地電腦上是否安裝你設(shè)置的字體。)
2,文字排版--字號、顏色
可以使用下面代碼設(shè)置網(wǎng)頁中文字的字號為12像素,并把字體顏色設(shè)置為#666(灰色):
body{font-size:12px;color:#666}
3,文字排版--粗體
我們還可以使用css樣式來改變文字的樣式:粗體、斜體、下劃線、刪除線,可以使用下面代碼實現(xiàn)設(shè)置文字以粗體樣式顯示出來。
p span{font-weight:bold;}
4,文字排版--斜體
以下代碼可以實現(xiàn)文字以斜體樣式在瀏覽器中顯示:
p a{font-style:italic;}
<p>三年級時,我還是一個<a>膽小如鼠</a>的小女孩。</p>
5,文字排版--下劃線
有些情況下想為文字設(shè)置為下劃線樣式,這樣可以在視覺上強調(diào)文字,可以使用下面代碼來實現(xiàn):
p a{text-decoration:underline;}
<p>三年級時,我還是一個<a>膽小如鼠</a>的小女孩。</p>
刪除線,在電商網(wǎng)站上經(jīng)常見。
p a{text-decoration:line-through;}
段落排版
1,段落排版--縮進(jìn)
中文文字中的段前習(xí)慣空兩個文字的空白,這個特殊的樣式可以用下面代碼來實現(xiàn):
p{text-indent:2em;}
注意:2em的意思就是文字的2倍大小。
2,段落排版--行間距
這一小節(jié)我們來學(xué)習(xí)一下另一個在段落排版中起重要作用的行間距屬性(line-height),如下代碼實現(xiàn)設(shè)置段落行間距為1.5倍。
p{line-height:1.5em;}
3,段落排版--字間距、字母間距
文字間隔、字母間隔設(shè)置:
如果想在網(wǎng)頁排版中設(shè)置文字間隔或者字母間隔就可以使用 letter-spacing來實現(xiàn),如下面代碼:
h1{
letter-spacing:50px;
}
...
<h1>了不起的蓋茨比</h1>
注意:這個樣式使用在英文單詞時,是設(shè)置字母與字母之間的間距。
單詞間距設(shè)置:
如果我想設(shè)置英文單詞之間的間距呢?可以使用word-spacing來實現(xiàn)。如下代碼:
h1{
word-spacing:50px;
}
...
<h1>welcome to imooc!</h1>
九,CSS盒模型
元素分類
在講解CSS布局之前,我們需要提前知道一些知識,在CSS中,html中的標(biāo)簽元素大體被分為三種不同的類型:塊狀元素、內(nèi)聯(lián)元素和內(nèi)聯(lián)塊狀元素。
常用的塊狀元素有:
<div>、<p>、<h1>...<h6>、<ol>、<ul>、<dl>、<table>、<address>、<blockquote> 、<form>
常用的內(nèi)聯(lián)元素有:
<a>、<span>、<br>、<i>、<em>、<strong>、<label>、<q>、<var>、<cite>、<code>
常用的內(nèi)聯(lián)塊狀元素有:
<img>、<input>
元素分類--塊級元素
什么是塊級元素?在html中<div>、 <p>、<h1>、<form>、<ul> 和 <li>就是塊級元素。設(shè)置display:block就是將元素顯示為塊級元素。如下代碼就是將行內(nèi)元素a轉(zhuǎn)換為塊狀元素,從頁使用a元素具有塊狀元素特點。
a{display:block;}
塊級元素特點:
1、每個塊級元素都從新的一行開始,并且其后的元素也另起一行。(真霸道,一個塊級元素獨占一行)
2、元素的高度、寬度、行高以及頂和底邊距都可設(shè)置。
3、元素寬度在不設(shè)置的情況下,是它本身父容器的100%(和父元素的寬度一致),除非設(shè)定一個寬度。
元素分類--行內(nèi)元素
在html中,<span>、<a>、<label>、<input>、 <img>、 <strong> 和<em>就是典型的行內(nèi)元素(inline)元素。當(dāng)然塊狀元素也可以通過代碼display:inline將元素設(shè)置為行內(nèi)元素。
行內(nèi)元素特點:
1、和其他元素都在一行上;
2、元素的高度、寬度、行高及頂部和底部邊距不可設(shè)置;
3、元素的寬度就是它包含的文字或圖片的寬度,不可改變。
元素分類--內(nèi)聯(lián)塊狀元素
內(nèi)聯(lián)塊狀元素(inline-block)就是同時具備內(nèi)聯(lián)元素、塊狀元素的特點,代碼display:inline-block就是將元素設(shè)置為內(nèi)聯(lián)塊狀元素。(css2.1新增),<img>、<input>標(biāo)簽就是這種內(nèi)聯(lián)塊狀標(biāo)簽。
inline-block元素特點:
1、和其他元素都在一行上;
2、元素的高度、寬度、行高以及頂和底邊距都可設(shè)置。
盒模型--邊框(一)
盒子模型的邊框就是圍繞著內(nèi)容及補白的線,這條線你可以設(shè)置它的粗細(xì)、樣式和顏色(邊框三個屬性)。
如下面代碼為div來設(shè)置邊框粗細(xì)為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(邊框顏色)中的顏色可設(shè)置為十六進(jìn)制顏色,如:
border-color:#888;//前面的井號不要忘掉。
盒模型--邊框(二)
現(xiàn)在有一個問題,如果有想為p標(biāo)簽單獨設(shè)置下邊框,而其它三邊都不設(shè)置邊框樣式怎么辦呢?css樣式中允許只為一個方向的邊框設(shè)置樣式:
div{border-bottom:1px solid red;}
同樣可以使用下面代碼實現(xiàn)其它三邊上、右、左邊框的設(shè)置:
border-top:1px solid red;
border-right:1px solid red;
border-left:1px solid red;
盒模型--邊界
元素與其它元素之間的距離可以使用邊界(margin)來設(shè)置。邊界也是可分為上、右、下、左。如下代碼:
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;}
總結(jié)一下:padding和margin的區(qū)別,padding在邊框里,margin在邊框外。
盒模型--填充
元素內(nèi)容與邊框之間是可以設(shè)置距離的,稱之為填充。填充也可分為上、右、下、左。如下代碼:
div{padding:20px 10px15px 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)、內(nèi)邊距(padding)和邊框(border)設(shè)置上下左右四個方向的邊距是按照順時針方向設(shè)置的:上右下左。具體應(yīng)用在margin和padding的例子如下:
margin:10px 15px 12px 14px;/*上設(shè)置為10px、右設(shè)置為15px、下設(shè)置為12px、左設(shè)置為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是一致的。
顏色值縮寫
關(guān)于顏色的css樣式也是可以縮寫的,當(dāng)你設(shè)置的顏色是16進(jìn)制的色彩值時,如果每兩位的值相同,可以縮寫一半。
例子1:
p{color:#000000;}
可以縮寫為:
p{color: #000;}
例子2:
p{color: #336699;}
可以縮寫為:
p{color: #369;}
十,CSS布局模型
css布局模型
清楚了CSS 盒模型的基本概念、 盒模型類型, 我們就可以深入探討網(wǎng)頁布局的基本模型了。布局模型與盒模型一樣都是 CSS 最基本、 最核心的概念。 但布局模型是建立在盒模型基礎(chǔ)之上,又不同于我們常說的 CSS 布局樣式或 CSS 布局模板。如果說布局模型是本,那么 CSS 布局模板就是末了,是外在的表現(xiàn)形式。
CSS包含3種基本的布局模型,用英文概括為:Flow、Layer 和 Float。
在網(wǎng)頁中,元素有三種布局模型:
1、流動模型(Flow)
2、浮動模型 (Float)
3、層模型(Layer)
流動模型(一)
流動(Flow):自上而下。
先來說一說流動模型,流動(Flow)是默認(rèn)的網(wǎng)頁布局模式。也就是說網(wǎng)頁在默認(rèn)狀態(tài)下的 HTML 網(wǎng)頁元素都是根據(jù)流動模型來分布網(wǎng)頁內(nèi)容的。
流動布局模型具有2個比較典型的特征:
第一點,塊狀元素都會在所處的包含元素內(nèi)自上而下按順序垂直延伸分布,因為在默認(rèn)狀態(tài)下,塊狀元素的寬度都為100%。實際上,塊狀元素都會以行的形式占據(jù)位置。如右側(cè)代碼編輯器中三個塊狀元素標(biāo)簽(div,h1,p)寬度顯示為100%。
第二點,在流動模型下,內(nèi)聯(lián)元素都會在所處的包含元素內(nèi)從左到右水平分布顯示。(內(nèi)聯(lián)元素可不像塊狀元素這么霸道獨占一行)
右側(cè)代碼編輯器中內(nèi)聯(lián)元素標(biāo)簽a、span、em、strong都是內(nèi)聯(lián)元素。
塊狀元素這么霸道都是獨占一行,如果現(xiàn)在我們想讓兩個塊狀元素并排顯示,怎么辦呢?不要著急,設(shè)置元素浮動就可以實現(xiàn)這一愿望。任何元素在默認(rèn)情況下是不能浮動的,但可以用CSS定義為浮動,如div、p、table、img等元素都可以被定義為浮動。如下代碼可以實現(xiàn)兩個div元素一行顯示。
div{
width:200px;
height:200px;
border:2px red solid;
float:left;
}
<div id="div1"></div>
<div id="div2"></div>
注意:設(shè)置浮動的同時一定要先設(shè)置塊狀元素的寬度,且需要浮動的幾個元素寬度加起來一定要小于容器元素的寬度。
什么是層布局模型?層布局模型就像是圖像軟件PhotoShop中非常流行的圖層編輯功能一樣,每個圖層能夠精確定位操作,但在網(wǎng)頁設(shè)計領(lǐng)域,由于網(wǎng)頁大小的活動性,層布局沒能受到熱捧。但是在網(wǎng)頁上局部使用層布局還是有其方便之處的。下面我們來學(xué)習(xí)一下html中的層布局。
如何讓html元素在網(wǎng)頁中精確定位,就像圖像軟件PhotoShop中的圖層一樣可以對每個圖層能夠精確定位操作。CSS定義了一組定位(positioning)屬性來支持層布局模型。
層模型有三種形式:
1、絕對定位(position: absolute)
2、相對定位(position: relative)
3、固定定位(position: fixed)
1,層模型--絕對定位(相對于父類)
如果想為元素設(shè)置層模型中的絕對定位,需要設(shè)置position:absolute(表示絕對定位),這條語句的作用將元素從文檔流中拖出來,然后使用left、right、top、bottom屬性相對于其最接近的一個具有定位屬性的父包含塊進(jìn)行絕對定位。如果不存在這樣的包含塊,則相對于body元素,即相對于瀏覽器窗口。
如下面代碼可以實現(xiàn)div元素相對于瀏覽器窗口向右移動100px,向下移動50px。
div{
width:200px;
height:200px;
border:2px red solid;
position:absolute;
left:100px;
top:50px;
}
<div id="div1"></div>
2,層模型--相對定位(相對于以前)
如果想為元素設(shè)置層模型中的相對定位,需要設(shè)置position:relative(表示相對定位),它通過left、right、top、bottom屬性確定元素在正常文檔流中的偏移位置。相對定位完成的過程是首先按static(float)方式生成一個元素(并且元素像層一樣浮動了起來),然后相對于以前的位置移動,移動的方向和幅度由left、right、top、bottom屬性確定,偏移前的位置保留不動。
如下代碼實現(xiàn)相對于以前位置向下移動50px,向右移動100px;
#div1{
width:200px;
height:200px;
border:2px red solid;
position:relative;
left:100px;
top:50px;
}
<div id="div1"></div>
3,層模型--固定定位(相對于網(wǎng)頁窗口)
固定住某一坐標(biāo)。
fixed:表示固定定位,與absolute定位類型類似,但它的相對移動的坐標(biāo)是視圖(屏幕內(nèi)的網(wǎng)頁窗口)本身。由于視圖本身是固定的,它不會隨瀏覽器窗口的滾動條滾動而變化,除非你在屏幕中移動瀏覽器窗口的屏幕位置,或改變?yōu)g覽器窗口的顯示大小,因此固定定位的元素會始終位于瀏覽器窗口內(nèi)視圖的某個位置,不會受文檔流動影響,這與background-attachment:fixed?屬性功能相同。以下代碼可以實現(xiàn)相對于瀏覽器視圖向右移動100px,向下移動50px。并且拖動滾動條時位置固定不變。
#div1{
width:200px;
height:200px;
border:2px red solid;
position:fixed;
left:100px;
top:50px;
}
小伙伴們學(xué)習(xí)了12-6小節(jié)的相對定位的方法:使用position:absolute可以實現(xiàn)被設(shè)置元素相對于瀏覽器(body)設(shè)置定位以后,大家有沒有想過可不可以相對于其它元素進(jìn)行定位呢?答案是肯定的,當(dāng)然可以。使用position:relative來幫忙,但是必須遵守下面規(guī)范:
1、參照定位的元素必須是相對定位元素的前輩元素:
<div id="box1"><!--參照定位的元素-->
<div id="box2">相對參照元素進(jìn)行定位</div><!--相對定位元素-->
</div>
從上面代碼可以看出box1是box2的父元素(父元素當(dāng)然也是前輩元素了)。
2、參照定位的元素必須加入position:relative;
#box1{
width:200px;
height:200px;
position:relative;
}
3、定位元素加入position:absolute,便可以使用top、bottom、left、right來進(jìn)行偏移定位了。
#box2{
position:absolute;
top:20px;
left:30px;
}
這樣box2就可以相對于父元素box1定位了(這里注意參照物就可以不是瀏覽器了,而可以自由設(shè)置了)。
編程小石頭,為分享干貨而生!據(jù)說,每個年輕上進(jìn),顏值又高的互聯(lián)網(wǎng)人都關(guān)注了編程小石頭。
三部分 附錄(因為暫時不支持插入超鏈接所以部分內(nèi)容無法顯示)
附錄一 DIV命名規(guī)范
附錄二 CSS精靈
a { display:block; width:200px; height:65px; line-height:65px; /*定義狀態(tài)*/ text-indent:-2015px; /*隱藏文字*/ background-image:url(button.png); /*定義背景圖片*/ background-position:0 0; /*定義鏈接的普通狀態(tài),此時圖像顯示的是頂上的部分*/ } a:hover { background-position:0 -66px; /*定義鏈接的滑過狀態(tài),此時顯示的為中間部分,向下取負(fù)值*/ } a:active { background-position:0 -132px; /*定 義鏈接的普通狀態(tài),此時顯示的是底部的部分,向下取負(fù)值*/ }
附錄三 一些tips解決方案
頁面優(yōu)化實踐
寫DIV+CSS 的一些常識
常用代碼片段
body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td { margin:0; padding:0; } body { background:#fff; color:#555; font-size:14px; font-family: Verdana, Arial, Helvetica, sans-serif; } td, th, caption { font-size:14px; } h1, h2, h3, h4, h5, h6 { font-weight:normal; font-size:100%; } address, caption, cite, code, dfn, em, strong, th, var { font-style:normal; font-weight:normal; } a { color:#555; text-decoration:none; } a:hover { text-decoration:underline; } img { border:none; } ol,ul,li { list-style:none; } input, textarea, select, button { font:14px Verdana,Helvetica,Arial,sans-serif; } table { border-collapse:collapse; } html { overflow-y: scroll; } .clearfix:after { content: "."; display: block; height:0; clear:both; visibility: hidden; } .clearfix { *zoom:1; }
<meta name=”viewport” content=”width=320,target-densitydpi=dpi_value,initial-scale=1, user-scalable=no”/>
table-layout: fixed; word-break: break-all;;border-collapse: collapse
<div id=”abc” style=”display:table;text-align:center;width:100%;height:100%;”> <span style=”background:#f00; display:table-cell; vertical-align:middle;”> <input type=”button” value=”item1″ /> </span> </div>
filter:alpha(opacity=50); /*1-100*/ -moz-opacity:0.5; /*0-1.0*/ -khtml-opacity:0.5; /*0-1.0*/ opacity:0.5; /*0-1.0*/
white-space:nowrap; text-overflow:ellipsis; overflow:hidden;
.fix{zoom:1;} .fix:after{ display:block; content:'clear'; clear:both; line-height:0; visibility:hidden; }
一些總結(jié)
一些概念
學(xué)習(xí)從來不是一個人的事情,要有個相互監(jiān)督的伙伴,想要學(xué)習(xí)或交流前端問題的小伙伴可以私信“學(xué)習(xí)”小明加群獲取2019web前端最新入門資料,一起學(xué)習(xí),一起成長!
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。