CSS 權威指南 CSS實戰手冊 第四版(閱讀筆記)
阿新 • • 發佈:2017-08-07
you 逗號 visit content 下載 傳播 適用於 給定 輸入
-moz-opacity:0.5;
-khtml-opacity: 0.5; opacity: 0.5; 第七章 基本視覺格式化 基本框 CSS假設每個元素都有一個或多個矩形框,各個元素框中心有個內容區,這個內容區周圍有可選的內邊距、邊框、外邊距,為什麽是可選,因為它們的高度可以設置為0 內容區的背景(某種顏色或平鋪圖像)也會應用到內邊距 外邊距通常是透明的,因此可以看到父元素的背景 內邊距不能是負值,但是外邊距可以 邊框的顏色如果沒有設定,那麽將取元素內容區的前景色(如果一個段落的文本是白色,那麽該段落的所有邊框都是白色,除非顯式聲明了另一種邊框色) 邊框與內容和內邊距有相同的背景 邊框的寬度絕對不能為負 不同類型的元素(塊級元素、行內元素、浮動元素、定位元素)格式化時存在著差別,分別有各自不同的表現 包含塊 每個元素都相對於其包含塊擺放,包含塊就是元素的"布局上下文" 正常流 傳統HTML文檔中的文本布局就是從上到下從左向右顯式 非替換元素 如果元素的內容包含在文檔中,則稱之為非替換元素 替換元素 指用作為其他內容占位符的一個元素(IMG標簽、INPUT標簽等) 改變替換元素的寬度:元素的高度會隨之增加,如果一個替換元素的width不同於其固有寬度,那麽height值也會隨之比例變化,除非height顯式設置特定值,反之height也一樣 塊級元素 段落、標題DIV之類的元素,這些元素在正常流中,會在其框之前和之後生成“換行” 行內元素 span之類的元素,不會在之前或之後生成“行分隔符” 根元素 為文檔樹頂端的元素,HTML文檔中,就是元素html 水平格式化——塊級元素 CSS中元素的寬度是從左內邊距到右內邊距的距離 正常流中塊級元素框的水平部分總和就等於父元素的width 水平屬性——塊級元素 水平格式化的“7大屬性”margin-left border-left padding-left width padding-right border-right margin-right這些屬性與塊級框的水平布局有關 水平格式化的“7大屬性”只有三個屬性可以設置auto值(margin-left、margin-right、width),其余都必須設置特定的值 如果設置width、margin-left、margin-right中的某個值為auto,余下兩個屬性指定特定的值,那麽設置auto的屬性會確定所需要的長度來等於父類元素寬度 如果3個屬性都設置特定的值,即沒有任何一個屬性設置為auto那麽,用戶代理將把右外邊距重置為auto值“填補”所需的距離 如果設置margin-left與margin-right的值為auto並且顯式設置 width 那麽元素會設置為相等的長度,因此元素在父元素中居中 如果margin-left或者margin-right與width同時存在auto值,那麽外邊距取值會被減為0 通過指定負外邊距得到更寬的子元素,因為外邊距可以為負數,並且“7大屬性”相加總和一定是父元素的width 如果為了滿足內容元素總和比父類元素還寬,並且設置固定的margin-right值,由於元素水平屬性過分受限時有一個規則,要求重置右外邊距,這也會得到一個負右外邊距 垂直格式化——塊級元素 一個元素的默認高度由其內容決定 高度還會受到內容寬度的影響,段落越窄,相應就會越高,以便容納其中所有的內聯內容 CSS中,可以對任何塊級元素設置顯式高度 如果假設高度大於顯示內容所需高度,多余高度會產生一個視覺效果,好像有額外的內邊距一樣 如果架設高度小於顯式內容所需高度,瀏覽器會提供某種方法來查看所有內容,而不是增加元素框的高度,也許是加一個滾動條 垂直屬性——塊級元素 垂直格式化的“7大屬性”margin-top border-top padding-top height padding-bottom border-bottom margin-bottom這些屬性與塊級框的垂直布局有關 垂直格式化的“7大屬性”只有三個屬性可以設置auto值(margin-top、margin-bottom、height),其余都必須設置特定的值 垂直格式化的“7大屬性”的值等於元素包含塊的 height ,這往往是塊級元素父元素的 height 值(因為塊級元素的父元素幾乎都是塊級元素) 如果正常流中一個塊級元素的margin-top或margin-bottom設置為auto,它會自動計算為0,因此它沒有外邊距,同時也不能垂直居中 height 必須設置為 auto 或者是某種類型的非負值 如果一個塊級正常流元素的 height 設置為一個百分數,這個值則是包含塊的 height 的一個百分數 垂直屬性——塊級元素—— auto 高度 如果塊級正常流元素設置 height: auto 顯示時其高度將恰好足以包含其內聯內容的行盒,會在段落設置一個邊框,並認為沒有內邊距,下邊框在文本最後一行下面,上邊框在文本第一行的上面 如果塊級正常流元素的高度設置為 auto ,而且只有塊級子元素,其默認高度將是從最高塊級子元素的外邊框邊界到最低塊級元素外邊框邊界之間的距離,因此子元素的外邊距會“超出”包含這些子元素的元素(這種行為在下面進行解釋)。不過,如果塊級元素有上內邊距或下內邊距,或者有上邊框或者下邊框,其高度則是從最高子元素上外邊距邊界到最低子元素的下外邊距邊界之間的距離 在上例中,將邊框改為內邊距,對DIV高度的作用還是一樣:同樣把段落的外邊距包含在內 合並垂直外邊距 垂直格式化的另一個重要方面是垂直相鄰外邊距的合並,這種合並行為只應用於外邊距。 兩個外邊距中較小的一個會被較大的一個合並 基本的術語和概念 匿名文本 是指所有未包含在行內元素中的字符串,空格也是匿名文本的一部分,因為空格與其他字符一樣都是正常的字符 EM框 em框在字體中定義,也稱為字符框。實際的字形可能比EM框更高或更矮,font-size 的值確定了各個EM框的高度 內容區 內容區可以是元素中各字符的em 框串在一起構成的框,也可以是由元素中字符字形描述的框。在替換元素中,內容區就是元素的固有高度再加上可能有的外邊距、邊框或內邊距 行間距 行間距是 font-size 值和 line-height 值之差。這個差實際上要分為兩半,分別應用到內容區的頂部和底部。行間距只應用於非替換元素 行內框 這個框通過向內容區增加行間距來描述。對於非替換元素,元素行內框的高度剛好等於 line-height 的值。對於替換元素,元素行內框的高度則恰好等於內容區的高度,因為行間距不應用到替換元素 行框 這是包含該行中出現的行內框的最高點和最低點的最小框。換句話說行框的上邊界要位於最高行框的上邊界,而行框的底邊要放在最低行內框的下邊界
前言:
對於程序員,學習是無止境的,知識淘換非常快,能夠快速穩固掌握一門新技術,是一個程序員應該具備的素質.這裏將分析本人一點點不成熟的心得.
了解一門語言,了解它的概念非常重要,但是一些優秀的設計思想需要細心和大量實踐才能慢慢參悟,在這之前需要做的是能夠運用它來開發,那麽了解一些基礎特性非常有必要,通常這些特性是需要經驗積累,從各種坑中累計出來,但是還有一種看似很笨卻很有效的學習方法.那就是將別人的經驗記錄下來,有事沒事都拿出來看看,集合開發中的經驗,這會非常有效.
流式布局 http://blog.html.it/layoutgala/index.html 更多模板http://templated.co 布局工具http://www.pagecolumn.com 重置樣式http://Nicolas.github.io/normalize.css | https://github.com/necolas/normalize.css/ 編寫HTML時兼顧CSS 簡單的HTML對搜索引擎友好。不能在HTML中直接控制網頁的外觀,只能吧HTML當作結構化內容的工具,內容的外觀由CSS負責。 IE8不支持H5 不要使用table布局網頁,CSS能實現相同的效果,並簡單許多 不要濫用BR進行段落換行,瀏覽器會插入間隔,有時並不需要這種行為 HTML遵守一定的規則,例如 使用字體
- font-family: Arial, Helvetica, sans-serif Web瀏覽器首先會檢查電腦有沒有安裝Arial字體,如果沒有堅持Helvetica以此類推
- 襯線字體適合顯式大段文本,大多數人覺得襯線(字形筆畫末端的裝飾細節)能有效的把一個字母引向後一個字母,利於閱讀
-
- 常見的:Times、Times New Roman、Georgia
- 無襯線字體通常顯式標題與中文,外觀簡潔明了
-
- 常見的:Arial、Helvetica、Verdana
- @font-face指令,告訴瀏覽器字體的名稱和下載地址
-
- @font-face{
-
- font-family:"League Gothic";
- src:url(‘fonts/League)Gothic-web font.woff‘);
- }
- font-family屬性,指定Web字體的方式與指定電腦中已安裝字體的方式一樣
- 常用字號單位px、關鍵字、em、rem、%
- 使用像素 px
-
- 這種值與瀏覽器設置完全無關,在不同電腦與瀏覽器顯式的文字大小一致,最為常用
- 使用關鍵字、百分比、em
-
- 這三種設定字號的方式,其工作原理是在瀏覽器預設字號的基礎上增大或減少,也就是說,如果樣式表中沒有設定字號,Web瀏覽器會使用預設的字號,大多數瀏覽器非標題裏的文本字號是16像素,這是基準字號
- 關鍵字 CSS提供了七個字號關鍵字,這些關鍵字在基準字號的基礎上調整字號大小
-
- xx-small、x-small、small、medium、large、x-large、xx-large
- 百分比 百分數與關鍵字一樣,根據瀏覽器基準字號調整文本大小,不過精確度更高,如果基號是16px那麽100%就是16px
- em 與百分比原理相同,em一詞源於紙張印刷業 1em等價於100% 0.5em 等於 50%
- rem root em簡稱,字號的大小基於根元素而定(html)大多數情況基於基準字號而定,
-moz-opacity:0.5;
-khtml-opacity: 0.5; opacity: 0.5; 第七章 基本視覺格式化 基本框 CSS假設每個元素都有一個或多個矩形框,各個元素框中心有個內容區,這個內容區周圍有可選的內邊距、邊框、外邊距,為什麽是可選,因為它們的高度可以設置為0 內容區的背景(某種顏色或平鋪圖像)也會應用到內邊距 外邊距通常是透明的,因此可以看到父元素的背景 內邊距不能是負值,但是外邊距可以 邊框的顏色如果沒有設定,那麽將取元素內容區的前景色(如果一個段落的文本是白色,那麽該段落的所有邊框都是白色,除非顯式聲明了另一種邊框色) 邊框與內容和內邊距有相同的背景 邊框的寬度絕對不能為負 不同類型的元素(塊級元素、行內元素、浮動元素、定位元素)格式化時存在著差別,分別有各自不同的表現 包含塊 每個元素都相對於其包含塊擺放,包含塊就是元素的"布局上下文" 正常流 傳統HTML文檔中的文本布局就是從上到下從左向右顯式 非替換元素 如果元素的內容包含在文檔中,則稱之為非替換元素 替換元素 指用作為其他內容占位符的一個元素(IMG標簽、INPUT標簽等) 改變替換元素的寬度:元素的高度會隨之增加,如果一個替換元素的width不同於其固有寬度,那麽height值也會隨之比例變化,除非height顯式設置特定值,反之height也一樣 塊級元素 段落、標題DIV之類的元素,這些元素在正常流中,會在其框之前和之後生成“換行” 行內元素 span之類的元素,不會在之前或之後生成“行分隔符” 根元素 為文檔樹頂端的元素,HTML文檔中,就是元素html 水平格式化——塊級元素 CSS中元素的寬度是從左內邊距到右內邊距的距離 正常流中塊級元素框的水平部分總和就等於父元素的width 水平屬性——塊級元素 水平格式化的“7大屬性”margin-left border-left padding-left width padding-right border-right margin-right這些屬性與塊級框的水平布局有關 水平格式化的“7大屬性”只有三個屬性可以設置auto值(margin-left、margin-right、width),其余都必須設置特定的值 如果設置width、margin-left、margin-right中的某個值為auto,余下兩個屬性指定特定的值,那麽設置auto的屬性會確定所需要的長度來等於父類元素寬度 如果3個屬性都設置特定的值,即沒有任何一個屬性設置為auto那麽,用戶代理將把右外邊距重置為auto值“填補”所需的距離 如果設置margin-left與margin-right的值為auto並且顯式設置 width 那麽元素會設置為相等的長度,因此元素在父元素中居中 如果margin-left或者margin-right與width同時存在auto值,那麽外邊距取值會被減為0 通過指定負外邊距得到更寬的子元素,因為外邊距可以為負數,並且“7大屬性”相加總和一定是父元素的width 如果為了滿足內容元素總和比父類元素還寬,並且設置固定的margin-right值,由於元素水平屬性過分受限時有一個規則,要求重置右外邊距,這也會得到一個負右外邊距 垂直格式化——塊級元素 一個元素的默認高度由其內容決定 高度還會受到內容寬度的影響,段落越窄,相應就會越高,以便容納其中所有的內聯內容 CSS中,可以對任何塊級元素設置顯式高度 如果假設高度大於顯示內容所需高度,多余高度會產生一個視覺效果,好像有額外的內邊距一樣 如果架設高度小於顯式內容所需高度,瀏覽器會提供某種方法來查看所有內容,而不是增加元素框的高度,也許是加一個滾動條 垂直屬性——塊級元素 垂直格式化的“7大屬性”margin-top border-top padding-top height padding-bottom border-bottom margin-bottom這些屬性與塊級框的垂直布局有關 垂直格式化的“7大屬性”只有三個屬性可以設置auto值(margin-top、margin-bottom、height),其余都必須設置特定的值 垂直格式化的“7大屬性”的值等於元素包含塊的 height ,這往往是塊級元素父元素的 height 值(因為塊級元素的父元素幾乎都是塊級元素) 如果正常流中一個塊級元素的margin-top或margin-bottom設置為auto,它會自動計算為0,因此它沒有外邊距,同時也不能垂直居中 height 必須設置為 auto 或者是某種類型的非負值 如果一個塊級正常流元素的 height 設置為一個百分數,這個值則是包含塊的 height 的一個百分數 垂直屬性——塊級元素—— auto 高度 如果塊級正常流元素設置 height: auto 顯示時其高度將恰好足以包含其內聯內容的行盒,會在段落設置一個邊框,並認為沒有內邊距,下邊框在文本最後一行下面,上邊框在文本第一行的上面 如果塊級正常流元素的高度設置為 auto ,而且只有塊級子元素,其默認高度將是從最高塊級子元素的外邊框邊界到最低塊級元素外邊框邊界之間的距離,因此子元素的外邊距會“超出”包含這些子元素的元素(這種行為在下面進行解釋)。不過,如果塊級元素有上內邊距或下內邊距,或者有上邊框或者下邊框,其高度則是從最高子元素上外邊距邊界到最低子元素的下外邊距邊界之間的距離 在上例中,將邊框改為內邊距,對DIV高度的作用還是一樣:同樣把段落的外邊距包含在內 合並垂直外邊距 垂直格式化的另一個重要方面是垂直相鄰外邊距的合並,這種合並行為只應用於外邊距。 兩個外邊距中較小的一個會被較大的一個合並 基本的術語和概念 匿名文本 是指所有未包含在行內元素中的字符串,空格也是匿名文本的一部分,因為空格與其他字符一樣都是正常的字符 EM框 em框在字體中定義,也稱為字符框。實際的字形可能比EM框更高或更矮,font-size 的值確定了各個EM框的高度 內容區 內容區可以是元素中各字符的em 框串在一起構成的框,也可以是由元素中字符字形描述的框。在替換元素中,內容區就是元素的固有高度再加上可能有的外邊距、邊框或內邊距 行間距 行間距是 font-size 值和 line-height 值之差。這個差實際上要分為兩半,分別應用到內容區的頂部和底部。行間距只應用於非替換元素 行內框 這個框通過向內容區增加行間距來描述。對於非替換元素,元素行內框的高度剛好等於 line-height 的值。對於替換元素,元素行內框的高度則恰好等於內容區的高度,因為行間距不應用到替換元素 行框 這是包含該行中出現的行內框的最高點和最低點的最小框。換句話說行框的上邊界要位於最高行框的上邊界,而行框的底邊要放在最低行內框的下邊界
- 內容區類似於一個塊級元素的內容框
- 行內元素的背景應用於內容區及所有內邊距
- 行內元素的邊框要包圍內容區及所有內邊距和邊框
- 非替換元素的內邊距、邊框和外邊距對行內元素或其生成的框沒有垂直效果,也就是說,它們不會影響元素行內框的高度(也不會影響包含該元素的行框的高度)
- 替換元素的外邊距和邊框確實會影響該元素行內框的高度,相應的,也可能影響包含該元素的行框的高度
- top將元素行內框的頂端與包含該元素的行框的頂端對齊
- bottom將元素行內框的底端與包含該元素的行框的底端對齊
- text-top將元素行內框的頂端與父元素內容區的頂端對齊
- text-bottom將元素行內框的底端與父元素內容區的底端對齊
- middle將元素行內框的垂直中心與父元素基線上0.5ex處的一點對齊
- super將元素的內容區和行內框上移。上移的距離未指定,可能因用戶代理的不同而不同
- sub與super相同,只不過元素會下移而不是上移
- 是一個混合產物,塊級元素和行內元素的混合
- 行內塊元素作為一個行內框與其他元素和內容相關
- 它就像圖像一樣放在一個問本行中
- 行內塊元素會作為替換元素放在行中
- 行內塊元素的底端默認地位於文本行的基線上,而且內部沒有行分隔符
- 行內塊元素內部會像塊級元素一樣設置內容的格式
- 如果增加height屬性,比周圍內容高,這些屬性會使行高增加
- 應用於塊級元素和替換元素
- 無繼承性
- 百分數相對於包含塊的 height 計算
- 應用於所有元素
- 無繼承性
- 百分數相對於包含塊的 width 計算
- 無繼承性
- 應用於所有元素
- 會以某種方式將浮動元素從文檔的正常流中刪除,不過它還是會影響布局
- 一個元素浮動時,其他內容會“環繞”該元素
- 浮動元素周圍的外邊距不會合並,如果其它元素與此圖像相鄰(這表示水平相鄰和垂直相鄰),而且這些元素也有外邊距,那麽這些外邊距不會與浮動圖像的外邊距合並
- 元素比作有塑料邊的紙片,圖像周圍的塑料邊(外邊距)絕對不會與其他浮動元素周圍的塑料邊重疊
- 浮動一個非替換元素(包括塊級元素),則必須為該元素聲明一個width,否則瀏覽器可能使用最小值(也許CSS新規範有新的規定)
- 要得到正常的非浮動行為,必須有 none 雖然默認值就是不浮動
- 浮動元素會生成一個塊級框,不論這個元素本身是什麽(也許是行內元素)
- 浮動元素的左(或右)外邊界不能超出其包含塊的左(或右)內邊界
- 兩個或者多個浮動元素向一個方向浮動時,並不會覆蓋,依次擺放
- 左浮動元素的右邊界不會在其右邊右浮動元素的左外邊界的右邊
- 一個浮動元素的頂端不能比其父元素的內頂端更高
- 浮動元素的頂端也不可能比之前出現的浮動元素的頂端更高
- 如果浮動元素周圍有其它元素,那個元素的背景色和邊框會延伸到浮動元素的後面
- relative 元素框偏移某個距離,元素仍保持其未定位前的形狀,他原本所占的空間仍保留
- absolute 元素框從文檔流完全刪除,並相對於其包含塊定位,元素原先正常文檔流所占空間會關閉,元素定位後生成一個塊級框
- static 元素框正常生成,塊級元素生成一個矩形框,作為文檔流的一部分,行內元素則會創建一個或多個行框,置於其父元素中
- fixed 元素框的表現類將position設置為absolute,不過包含塊是視窗本身
- “根元素”的包含塊由用戶代理建立,根元素就是html有些瀏覽器會使用body作根元素,多數瀏覽器初始包含塊是一個視窗大小矩形
- 非根元素,如果其position是relative或static,包含塊則由最近的塊級框、表單元格或行內塊祖先框的內容邊界構成
- position值是absolute,包含塊設置為最近的position值不是static的祖先元素(可以是任何類型)
-
- 如果這個祖先是塊級元素,包含塊則設置為該元素的內邊距邊界,就是由邊框界定的區域
- 如果這個祖先是行內元素,包含塊則設置為該祖先元素的內容邊界
- 如果沒有祖先,元素的包含塊定義為初始包含塊
- 元素可以定位到其包含塊的外面,也就是說明“包含塊”一詞實際上應該是“定位上下文”
- top 描述了定位元素上外邊距邊界離其包含塊的頂端多遠。如果 top 為正值,會把定位元素的上外邊距邊界下移,若為負值,則會把定位元素的上外邊距移到其包含塊的頂端之上
- 偏移定位元素的外邊距邊界時,帶來的影響是元素的所有一切(包括外邊距、邊框、內邊距和內容)都會在定位的過程中移動
- 可以為定位元素設置外邊距、邊框、內邊距和內容,兵包含在偏移屬性定義的區域內
- 偏移屬性定義了距離包含塊相應邊的偏移
- 如果使用top、right、bottom、left來描述元素4個邊的放置位置,那麽元素的高度和寬度將由這些偏移隱含確定
- 如果使用top、right、bottom、left來描述元素4個邊的放置位置,那麽元素的高度和寬度對布局沒有任何作用,除非向元素增加了外邊距、邊框、內邊距
- 定位元素的 width 和 height 的默認值是 auto
- 浮動三欄布局,設置其寬度為百分數
- 設置max-width控制最大寬度
- CSS樣式命名以及屬性以用途為主,比如相同樣式的多組標簽可以用群組選擇器,同意控制方便管理
- 相關書籍 responsive web design
- 移動瀏覽器不會顯示100%大的頁面。如果這麽做,大多數高於屏幕的像素將放不下,一次只能看到頁面的一部分。其實手機瀏覽器會縮小網頁,以便在屏幕中能放得下,但是響應式網頁就是為了改善網頁在手機中的外觀,所以不希望被縮小,導致文本太小而難以閱讀
- 簡單方法就能覆蓋瀏覽器的這種行為 <meta name="viewport" content=" width=device-width" > viewport指代瀏覽器的顯示區域,device把瀏覽器設為手機寬度
- 圖片響應布局 img { max-width:100% } 這個樣式把圖像的最大寬度設為容器寬度的100%(這裏max-width與width有何區別?)解釋:max-width權重大於width 當遇到width幹擾時不會受影響
- 去掉浮動導航欄轉化行內塊級元素是居中顯示這些按鈕的唯一方式
- Skeleton提供基礎的柵格樣式外還有額外的CSS,用於裝飾按鈕、表單和表格
- 未完待續...
CSS 權威指南 CSS實戰手冊 第四版(閱讀筆記)