目錄css
如今的互聯網前端分爲三層:html
HTML: 超文本標記語言. 從語義的角度描述頁面結構.前端
JS: JavaScript. 從交互的角度描述頁面行爲.web
好比說,有一個樣式須要在100個頁面上顯示,若是是html來實現,那要寫100遍,如今有了CSS,只要寫一遍. 如今,html只提供數據和一些控件,至於其餘的各類各樣的樣式則徹底由CSS來提供.canvas
在元素(標籤)內部直接寫屬性(顏色,大小等樣式)瀏覽器
<p style="color: green">我是一個段落</p>
在head標籤中,在style標籤的內部寫入CSSruby
<style type="text/CSS"> /*如下是CSS代碼*/ span{ color: yellow; } </style>
在head標籤中用link標籤鏈入CSS網絡
<link rel="stylesheet" href="./index.CSS">
在style標籤內部使用 @import url("#"); 導入CSSapp
<style type="text/CSS"> @import url('./index.CSS'); </style>
標籤選擇器能夠直接選中全部的標籤元素, 好比div, ul, li, p等等, 無論標籤藏得多深, 都能選中, 選中的是全部的標籤, 而不是某一個, 因此說選擇的是"共性"而不是"特性".dom
用法:
標籤名:{color: red;}
經過#
加id名
來選中某個元素. 同一個頁面中的id毫不可能重複, 任何標籤均可以設置id. id的命名規範, 大小寫都是嚴格區分的, 如aa和AA就是兩個徹底不一樣的屬性值.
用法:
#id名{color: red;}
所謂類就是指class, class與id很是類似, 任何的標籤均可以添加類, 可是類是能夠重複的, 屬於歸類的概念. 同一個標籤中能夠攜帶多個類, 用空格隔開.類選擇器經過.
加類名
來選中某個元素.
用法:
.類名{color: red;}
使用空格表示後代選擇器. 後代選擇器, 顧名思義, 即父元素的後代(包括兒子, 孫子, 重孫子).
用法:
.container p{color: red;}
使用>
表示子代選擇器, 好比div>p, 僅僅表示的是當前div元素選中的(相鄰)子元素p(即:不包括孫子).
用法:
.container>p{color: red;}
多個選擇器之間使用逗號,
隔開, 表示選中頁面中的多個標籤, 一些共性的元素, 可使用並集選擇器.
用法:
h3,content{color: red;}
使用.
表示交集選擇器. 同時用兩種選擇器選擇一個標籤元素, 例如div.active
表示選中的是active和div都擁有的元素
屬性選擇器, 字面的意思就是根據標籤中的屬性, 選中當前的標籤.
用法:
[for]{color: red;}
input[type='text']{background: red;}
僞類選擇器通常用在超連接<a>
標籤中,使用<a>
標籤的僞類選擇器, 咱們必定要遵循愛恨準則
----LoVe HAte
.
用法:
a:link{color: #666;} /*沒有被訪問過的a標籤樣式*/ a:visited{color: yellow;} /*訪問事後的a標籤樣式*/ a:hover{color: green;} /*鼠標懸停時a標籤的樣式*/ a:active{color: #yellowgreen;} /*鼠標按下時a標籤的樣式*/
注意: link, visited, active這三個只有a標籤有, 而horver
其餘元素也能夠用.
p:first-letter:{color:red; font-size:30;}
p:before{content: 'alex';}
這個屬性使用很少, 瞭解便可, 使用此僞元素選擇器必定要結合content
屬性.
p:after{content: '&'; color: red; font-size: 40px;}
這個屬性使用很是頻繁, 一般與佈局有很大的關聯(清除浮動).
CSS有兩大特性: 繼承性和層疊性
面嚮對象語言都會存在繼承的概念, 在面嚮對象語言中, 繼承的特色是: 派生類繼承父類的屬性和方法.
CSS中的繼承: 給父級設置一些屬性, 子元素繼承了父級該屬性.
CSS中的層疊性: 權重大的標籤覆蓋掉了權重小的標籤.
權重: 誰的權重大,瀏覽器就會顯示誰的屬性.
!important
的使用!important
: 設置權重爲無限大(IE不支持)
!important
: 不影響繼承來的權重, 隻影響選中的元素. 不要隨便使用!important
,由於使用它會影響頁面佈局.
用法:
選擇器(樣式: 值!important;)
在CSS中, "box model"這一術語是用來設計和佈局時使用的, 在網頁中基本上都會顯示一些方方正正的盒子. 咱們稱這種盒子叫盒模型.
盒模型有兩種: 標準模型和IE模型. 咱們重點學習標準模型.
若是一個盒子設置了width, height, padding, border (先不設置margin, margin有坑),那麼:
盒子的真實寬度 = width + 2*padding + 2*border
盒子的真實高度 = height + 2*padding + 2*border
padding解釋內邊距的意思, 它是邊框到內容之間的距離. 另外, padding的區域是有背景顏色的, 而且背景顏色和內容的顏色同樣, 也就是說background-color
這個屬性將填充滿全部的border之內的區域.
padding有四個方向, 分別描述四個方向的padding.
padding-top: 30px;
padding-right: 30px;
padding-bottom: 30px;
padding-left: 30px;
/*上 右 下 左*/ padding: 20px 30px 40px 50px;
/*上 左右 下*/ padding: 20px 30px 40px;
/*上下 左右*/ padding: 20px 30px;
/*上下左右*/ padding: 20px;
border: 邊框的意思, 描述盒子的邊框. 邊框有三要素: 粗細, 線性樣式, 顏色.
若是顏色不寫, 默認是黑色.
若是粗細不寫, 默認不顯示邊框.
若是隻寫線性樣式, 默認的有: 上下左右3px
的寬度, 實體樣式, 黑色邊框.如:
border: solid;
分別設置三要素, 以下:
border-width: 3px;
border-style: solid; /*還有dotted、double、dashed*/
border-color: red;
注意: 值能夠是1個, 2個, 3個, 4個, 對應關係跟上面介紹的padding綜合屬性
是同樣的.
設置一個方向的三要素, 以下:
border-top-width: 10px; border-top-style: solid; border-top-color: red;
上面三行代碼至關於下面這一行:
border-top: 10px solid red;
注意: border: none
或者border: 0
都表示沒有設置樣式.
應用: 使用border來製做小三角
/*小三角 箭頭指向上方*/ div{ width: 0; height: 0; border-bottom: 20px solid red; border-left: 20px solid transparent; border-right: 20px solid transparent; }
margin: 外邊距的意思, 表示邊框到最近盒子的距離. margin也有四個方向, 而且也能夠設置1, 2, 3, 4個值.
/*表示四個方向的外邊距離爲20px*/ margin: 20px;
/*表示盒子向下移動了30px*/ margin-top: 30px;
/*表示盒子向右移動了50px*/ margin-left: 50px; margin-bottom: 100px;
有一些標籤會默認自帶樣式, 好比<ul>
標籤默認有padding-left值, 有些默認有margin值, <ul>
,<ol>
和<a>
標籤也自帶一些樣式, 可是咱們通常在作網頁的時候不想用那些默認的樣式, 因此須要清除頁面標籤中默認的樣式, 以便咱們更好的去調整元素的位置.
雖然通配符選擇器*
能夠解決問題, 可是這種方法效率不高, 不推薦. 咱們要使用並集選擇器來選中頁面中應有的標籤, 以下代碼就是清除默認樣式的一種寫法, reset.css
:
參考網址: https://meyerweb.com/eric/tools/css/reset/
參考代碼:
/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } table { border-collapse: collapse; border-spacing: 0; }
宏觀的講, 咱們的web頁面和ps等設計軟件有本質的區別, web網頁的製做, 是個"流", 從上而下, 像"織毛衣". 而設計軟件, 想往哪裏畫東西, 就去哪裏畫.
標準文檔流下, 有一些現象, 好比: 空間摺疊現象, 高矮不齊底邊對齊現象等.
標準文檔流等級森嚴, 標籤分爲兩種等級: 行內元素和塊級元素.
在之前的HTML學習中, 咱們已經將標籤分過類了, 當時分爲: 文本級和容器級.
<p>
, <span>
, <a>
, <b>
, <i>
, <u>
, <em>
<div>
, <h1>~<h6>
, <li>
, <dt>
, <dd>
PS: 爲何說<p>
是文本級標籤呢? 由於<p>
裏面只能放"文字","圖片"和"表單"元素, <p>
裏面不能放<h1>~<h6>
和<ul>
, <p>
裏面也不能放<p>
.
<p>
不同:
<p>
以外, 全部的文本級標籤, 都是行內元素. 而<p>
雖是個文本級標籤, 但它倒是個塊級元素<p>
標籤也是塊級元素.咱們能夠經過display屬性將塊級元素和行內元素進行相互之間的轉換.display即"顯示模式".
display: inline;
display: block;
標準文檔流裏面的如今很是多, 致使不少頁面效果沒法實現, 若是咱們如今就要設置並排和寬高, 那該怎麼辦呢? 辦法就是: 移民! 即脫離標準文檔流.
浮動是CSS裏面佈局最多的一種屬性, 也是很重要的一個屬性. float
表示浮動的意思, 它有以下屬性值:
none
: 表示不浮動, 默認left
: 表示左浮動right
: 表示右浮動想要學好浮動, 必定要知道它的四大特性:
a. 浮動的元素是脫標(脫離標準文檔流)的, 標籤一旦設置浮動, 就可以並排, 而且再也不區分行內元素,塊級元素, 也就可以設置寬高了
d. 浮動的元素有收縮的效果, 即: 一個浮動元素, 若是沒有設置width
, 那麼就會自動收縮爲文字的寬度
注意: 關於浮動, 咱們要遵循一個原則: 永遠不要設置一個盒子單獨浮動.要浮動就一塊兒浮動; 有浮動就必定要清除浮動.
首先來觀察以下HTML和CSS代碼:
<div class="father"> <div class="box1"></div> <div class="box2"></div> <div class="box3"></div> </div> <div class="father2"></div>
.father{ width: 1126px; } .box1{ width: 200px; height: 500px; float: left; background-color: red; } .box2{ width: 300px; height: 200px; float: left; background-color: green; } .box3{ width: 400px; height: 100px; float: left; background-color: blue; } .father2{ width: 1126px; height: 600px; background-color: purple; }
從執行效果中發現: 若是不給父盒子設置一個高度, 那麼浮動子元素是不會填充父盒子的高度的, 此時.father2
的盒子就會跑到第一個位置上, 影響頁面佈局.
浮動元素的確能實現頁面元素的並排效果, 這既是它的優勢也是它的缺點. 因爲它同時也會形成頁面佈局的極大混亂, 因此咱們要清除浮動.
清除浮動的方法有不少種, 在這裏只介紹四種:
clear:both
屬性overflow:hidden
(經常使用)爲元素清除浮動的寫法以下:
給浮動元素的父盒子, 也就是不浮動的元素, 添加一個clearfix
類, 而後做以下設置:
.clearfix:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
overflow屬性規定當前內容溢出元素框時發生的事件.
值 | 描述 |
---|---|
visible | 默認值, 內容不會被修剪, 會呈如今元素框以外 |
hidden | 內容會被修剪, 超出元素框以外的部分不可見 |
scroll | 無論內容是否超出元素框都出現滾動條 |
auto | 若是內容超出元素框, 則瀏覽器會顯示滾動條以便查看其他內容 |
inherit | 規定繼承父元素的overflow屬性的值 |
這些事件逐漸演變成overflow:hidden
清除法, 其實它是一個BFC區域, 具體參見: http://www.javashuo.com/article/p-ezyacvwn-v.html
當給兩個標準文檔流下的兄弟盒子設置垂直方向上的margin
時, 那麼以較大的爲準, 咱們稱這種現象爲塌陷. 記住這種現象, 在佈局垂直方向盒子的時候要注意margin
的用法. 水平方向上沒有塌陷現象.
當咱們給標準文檔流下的兄弟盒子設置浮動以後, 就不會出現margin
塌陷的問題.
margin: 0 auto;
當一個<div>
元素設置margin: 0 auto;
時就會使盒子居中. 咱們知道margin: 0 auto;
表示上下外邊距距離爲0, 左右爲auto的距離, 那麼auto是什麼意思呢? 若設置margin: 0 auto;
, 咱們發現盒子儘量大的左右兩邊有很大的距離, 由於此時的盒子是居中的.
margin: 0 auto;
時, 水平居中盒子必須有width, 要有明確的width值margin: 0 auto;
失效margin: 0 auto;
使盒子居中,而不是使文本居中, 文字水平居中可使用text-align: center
margin屬性描述的是兄弟盒子的關係, 而padding屬性描述的是父子盒子的關係.
先看以下兩段代碼:
.father{ width: 300px; height: 300px; background-color: blue; } .son{ width: 100px; height: 100px; background-color: orange; margin-top: 30px; }
<div class="father"> <div class="son"></div> </div>
運行上面代碼, 發現兩個盒子總體下移了30px, 其實咱們只是想讓子盒子下移30px, 父盒子不要動,可是父盒子由於沒有設置border, 因此父盒子也掉下來了, 一旦給父盒子設置一個border就行了, 那麼問題來了, 咱們不可能在頁面中平白無故的去給盒子加一個border, 因此此時的解決辦法只有一個, 就是使用父盒子的padding, 讓子盒子向下走.
.father{ width: 300px; height: 270px; background-color: blue; padding: 30px } .son{ width: 100px; height: 100px; background-color: orange; }
阿里巴巴矢量圖標庫: http://www.iconfont.cn/
/*對齊方式*/ text-align: left|right|center|justify(兩端對齊,只適合英文);
/*文本顏色*/ color: 色值;
/*首行縮進, 建議使用單位em*/ text-indent: 2em;
/*文本修飾: 無|下劃線|上劃線|中劃線(刪除線)*/ text-decoration: none|underline|overline|line-through;
/*設置行高*/ line-height: 高度值;
font-weight: normal|bold|lighter|100~900|inhert; /*100~300沒有區別*/
font-family: 字體;
font-family:」華文彩雲」;
, 若是用戶電腦裏面沒有這個字體, 那麼就會變成宋體.font-family: "Times New Roman","微軟雅黑"
, 備選字體能夠有無數個, 默認顯示第一個, 沒有安裝第一個就顯示第二個, 以此類推, 都沒安裝就顯示宋體.Microsoft YaHei
, 宋體的英語別名是SimSun
font-size(字體大小)
,line-height(行高)
,font-family(字體類型)
合三爲一: font:12px(大小)/30px(行高) "Times New Roman","Microsoft YaHei","SimSun";
font: 12px/200% "宋體";
或者 font: 12px/2em "宋體";
等價於 font: 12px/24px "宋體";
font: 16px/48px "宋體";
等價於 font: 16px/300% "宋體";
或者 font: 16px/3em 宋體"";
顏色一共有三種表示方法: 單詞, rgb表示法, 十六進制表示法.
rgb(紅色 綠色 藍色)
三原色光學顯示器, 每一個像素都是由三原色的發光原件組成的, 靠明亮度不一樣調成不一樣的顏色.
用法: rgb(111,234,123);
, r, g, b的每一個值的取值範圍是0~255
#
開頭的值, 都是十六進制的用法: #a0a0a0;
#112233;
能夠簡寫成 #123;
用法: background-color: #0f0;
用法: background-image: url('paper.gif');
用法: background-repeat:repeat(默認)|repeat-x|repeat-y|no-repeat|inherit;
/*第一個值是水平位置,第二個值是垂直位置*/ background-position: x% y%|Xpx Ypx; /*第一個值若是是*/
CSS雪碧, 即CSS Sprite, 也有人叫它CSS精靈, 是一種CSS圖像合併技術, 該方法是將小圖標和背景圖像合併到一張圖片上, 而後利用CSS的背景定位來顯示須要顯示的圖片部分.
只有一張大的合併圖, 每一個小圖標節點如何顯示單獨的小圖標呢? 其實就是截取大圖一部分顯示, 而這部分就是一個小圖標.
咱們可使用background綜合屬性製做通天banner, 什麼是通天banner呢? 就是通常咱們電腦屏幕都是1439, 可是設計師給咱們的banner圖都會比這個大, 那麼咱們能夠以此屬性製做通天banner, 以下:
background: red url(images/banner.jpg) no-repeat center top;
定位3種: 相對定位, 絕對定位, 固定定位
注意: 以上特性能夠證實: 相對定位在頁面中沒有什麼太大的做用, 它會影響咱們的頁面佈局, 咱們不要使用相對定位來作壓蓋效果.
注意: 父絕子絕沒有實際意義, 作網站的時候不會出現父絕子絕, 由於絕對定位脫離標準文檔流, 影響頁面的佈局. 相反, "父相子絕"在咱們的頁面佈局中, 是經常使用的佈局方案, 由於父親設置相對定位, 不脫離標準文檔流, 子元素設置絕對定位, 僅僅的是在當前父輩元素內調整該元素的位置.
還要注意, 絕對定位的盒子無視父輩的padding.
做用: 頁面佈局常見的"父相子絕"很是重要, 必須掌握!
z-index
這個東西很是簡單, 它有如下四大特性, 只要記住了每一個特性, 頁面佈局時就不會找不到盒子的狀況了:
z-index
值表示誰壓着誰, 數值大的壓蓋住數值小的z-index
, 也就是說, 無論是相對定位,絕對定位仍是固定定位, 它們均可以使用z-index
, 而浮動元素不能使用z-index
z-index
值沒有單位, 就是一個正整數, 默認的z-index
值爲0, 若是你們都沒有z-index
值, 或者z-index
值同樣, 那麼誰寫在HTML後面, 誰就在上面壓着別人. 定位了的元素, 永遠壓住沒有定位的元素z-index
值較小, 兒子的z-index
再大也沒用能夠看成公式記下來:
position: absolute; left: 50%; margin-left: -width/2; /*即自身寬度的一半*/