CSS 設計指南(第3版) 初讀筆記

第1章 HTML標記與文檔結構

關于<title>標簽:搜索引擎會給<title>標簽中的文字內容賦予很高的權重。而且這些文字也會作為網頁標題出現在搜索結果列表中。

無論你想了解哪個HTML元素,第一個要問的問題都應該是:它是塊元素,還是行內元素?

Firefox Web Developer組件。

通過HTML標記來構建DOM,然后在頁面初次加載和用戶與頁面交互時,使用CSS來修改DOM。

?

第2章 CSS工作原理

CSS注釋使用/* */,HTML注釋使用<!--? -->

為文檔添加樣式的三種方法:有三種方法可以把CSS添加到網頁中,分別是寫在元素標簽里(也叫行內樣式)、寫在<style>標簽里(也叫嵌入樣式)和寫在單獨的CSS樣式表中(也叫鏈接樣式)。

行內樣式的作用范圍非常有限。行內樣式只能影響它所在的標簽,而且總會覆蓋嵌入樣式和鏈接樣式。

嵌入樣式的作用范圍只限于當前頁面。頁面樣式會覆蓋外部樣式表中的樣式,但會被行內樣式覆蓋。

ID可以用來在頁內導航鏈接。如果鏈接的href屬性里只有一個#,那么點擊鏈接會返回頁面頂部。

不要亂用類,嘗試使用繼承和上下文選擇符~

一個冒號(:)表示偽類,兩個冒號(::)表示CSS3新增的偽元素.

2.6 偽類

偽類分為兩種:

  • UI偽類會在HTML元素處于某個狀態時,為該元素應用CSS樣式。
  • 結構化偽類會在標記中存在某種結構上的關系時,為相應元素應用CSS樣式。

UI偽類::link :visited :hover :active :focus :target

結構化偽類: :first-child :last-child :nth-child

:first-child 代表一組同胞元素中的第一個元素,而:last-child則代表最后一個;

2.7 偽元素

::first-letter? ::first-line? ::before? ::after

?

css提供了三種機制:繼承、層疊和特指,來確定哪條規則"勝出"并最終被應用。

2.8 繼承

css中很多屬性是可以繼承的,其中相當一部分都跟文本有關,比如顏色、字體、字號。然而,也有很多CSS屬性不能繼承,因為繼承這些屬性沒有意義。這些不能繼承的屬性主要涉及元素盒子的定位和顯示方式,比如邊框、外邊距、內邊距。

?

第3章 定位元素

所謂盒模型,就是瀏覽器為頁面中的每個HTML元素生成的矩形盒子。這些盒子們都要按照可見版式模型(visual formatting model)在頁面上排布。可見的頁面版式主要由三個屬性控制: position屬性、display屬性和float屬性。其中,position屬性控制頁面子元素間的位置關系,display屬性控制元素是堆疊、并排,還是根本不在頁面上出現,float屬性提供控制的方式,以便把元素組成多欄布局。

3.1 盒模型

上右下左(順時針)。

如果那個值沒有寫,那就使用對邊的值。

邊框(border)有3個相關屬性。寬度(border-width)、樣式(border-style)和顏色(border-color).

中和外邊距和內邊距:推薦大家把下面這條規則作為樣式表的第一條規則:* { margin:0, padding: 0; },不同瀏覽器默認地內邊距和外邊距不一樣,特別是對表單和列表等復合元素。在這種情況下,用前面那條規則"中和"默認值,然后在根據需要添加,則會在各瀏覽器上獲得一致的效果。

reset.css [http://meyerweb.com/eric/tools/css/reset/]

?3.1.5 外邊距的單位

根據經驗,為文本元素設置外邊距時通常需要混合使用不同的單位。比如說,一個段落的左右外邊距可以使用像素,以便該段文本始終與包含元素邊界保持固定的間距,不受字號變大或變小的影響。而對于上下外邊距,以em為單位則可以讓段間距隨字號變化而相應增大或減小。比如:

p { font-size:1em; margin:.75em 30px; }

?

3.2 盒子有多大

如果不設置塊級元素的width屬性,那么這個屬性的默認值是auto,結果會讓元素的寬度擴展到與父元素同寬。

盒模型結論一:沒有(就是沒有設置width)寬度的元素始終會擴展到填滿其父元素的寬度為止。添加水平邊框、內邊距和外邊距,會導致內容寬度減少,減少量等于水平邊框、內邊距和外邊距之和。

盒模型結論二:為設定了寬度的盒子添加邊框、內邊距和外邊距,會導致盒子擴展得更寬。實際上,盒子的width屬性設定的只是盒子內容區的寬度,而非盒子要占據的水平寬度。

總之,你要記住一點:設定了元素的width屬性后,再給元素添加邊框、內邊距和外邊距。

?

3.3.1 浮動

float屬性是創建多欄布局的最佳途徑。

在你浮動一張圖片或其他元素時,你是在要求瀏覽器把它往上方推,直到它碰到父元素的內邊界。

浮動非圖片元素時,必須給他設定寬度,否則后果難以預料。圖片無所謂,因為它本身有默認的寬度。

包含浮動元素的方法:

1. 為父元素添加overflow:hidden,以強制它包圍浮動元素。

實際上,overflow:hidden聲明的真正用途是防止包含元素被超大內容撐大。應用overflow:hidden之后,包含元素依然保持其設定的寬度,而超大的子內容則會被內容剪切掉。除此之外,overflow:hidden還有一個作用,即它能可靠地迫使父元素包含其浮動的子元素。

overflow元素定義在包含的內容對于指定的尺寸太大的情況下元素應該怎么樣。在默認情況下,內容會溢出到框外,進入相鄰的空間。應用值為hidden或auto的overflow屬性有一個有用的副作用,這會自動地清理包含的任何浮動元素。因此這是一種有用的元素清理方法,不需要添加額外的標記。這個方法并不適合所有情況,因為設置框的overflow屬性會影響它的表現。更具體地說,這種方法在某種情況下會產生滾動條或截斷內容。 ————《精通CSS: 高級Web標準解決方案(第二版)》

2. 同時浮動父元素。

浮動父元素后,不管其子元素是否浮動,他都會緊緊地包圍住他的子元素。

3. 添加非浮動的清理元素

第三種強制父元素包含其浮動子元素的辦法,就是給父元素的最后添加一個非浮動的子元素,然后清除該子元素。(clearfix規則)

?

3.4.5 定位上下文

只有將元素的position屬性設置為relative、absolute或fixed,這個元素的top

、right、bottom和left屬性才會起作用。

事實上,只要把元素的外邊距和內邊距設定好,多數情況下只用靜態定位就足以實現頁面布局了。很多剛開始接觸CSS的初學者都會錯誤地設定position屬性,最終才發現從文檔流中挪出來的這些元素一點也不好控制。因此,除非真需要那么做,否則不要輕易修改元素默認地position屬性。

絕對定位的元素要有一個相對定位的父元素。

把元素的display設置為none,該元素及所有包含在其中的元素,都不會在頁面中顯示。他們原先占據的所有空間也都會被“回收”,就好像相關標記根本不存在一樣。與此相對的是visibility屬性,把元素的visibility設定為hidden,元素會隱藏,但它占據的頁面空間仍然“虛位以待”。

?

3.6 背景

CSS中,每個元素盒子都可以想象成由兩個圖層組成。元素的前景層包含內容(如文本或圖片)和邊框,元素的背景層包含背景圖片和背景顏色,背景圖片疊加在背景顏色之上。

對塊元素設置width,并設置margin-top: auto; ?margin-bottom: auto; ? ? ?可以使塊元素居中對齊。?

3.6.5 背景位置

默認情況下,背景圖片會以元素左上角為起點,沿水平和垂直方向重復出現,最終填滿整個背景區域。正是因為以元素左上角為原點,所以元素盒子底部和右側的圖案都只顯示了一部分。

設定背景位置時可以使用三種值:關鍵字、百分比、絕對或相對單位的數值。

關鍵字指的順序不重要,left bottom 和 bottom left 意思相同。為了設定的值在所有瀏覽器中都有效,最好不要混用關鍵字值和數字值。

使用數值(比如 40% 30%)時,第一個值表示水平位置,第二個值表示垂直位置。要是只設定一個值,則將其用來設定水平位置,而垂直位置會被設為center。

?

4.2 文本屬性

以下是幾個最有用的CSS文本屬性:

  • text-indent
  • letter-spacing
  • word-spacing
  • text-decoration
  • text-align
  • line-height
  • text-transform
  • vertical-align

?

5.1 布局高度與布局寬度

1. 布局高度

多數情況下,布局中任何元素的高度都是不必設定的。

為什么正常情況下都應該保持元素height屬性的默認值auto不變呢? 很簡單,只有這樣元素才能隨自己包含內容的增加而在垂直方向上擴展。這樣擴展的元素會把下方的元素向下推,而布局也能隨著內容數量的增減而垂直伸縮。假如你明確設定了元素的高度,那么超出的內容要么被剪掉,要么會跑到容器之外——取決于元素overflow元素的設定。

?

一般原則:控制布局寬度,而讓內容決定布局高度。

固定寬度布局的大小不會隨用戶調整瀏覽器窗口大小而變化,960像素是最常見的。

?

5.2 ?三欄-固定寬度布局

1. 表現性標記<div>  

處理欄及內部div的關鍵在于,浮動欄并設定欄寬,但不給任何內容元素設定寬度。要讓內容元素擴展以填充它們的父元素——內部div。這樣,只要簡單地設定內部div的外邊距和內邊距,就可以讓它們以及它們包含的內容與欄邊界保持一定距離。

2. 子-星選擇符

someSelector > * 就會只選擇someSelector所代表元素的所有子元素,而非后代元素。這正好適用于選擇器容器內部的所有頂部元素,然后設定它們的外邊距。

3. 使用box-sizing: border-box

box-sizing的取值:

  • content-box: 寬度和高度分別應用到元素的內容框,在寬度和高度之外繪制元素的內邊距和邊框。
  • border-box: 為元素指定的任何內邊距和邊框都將在已設定的寬度和高度內繪制,通過從已設定的寬度和高度分別減去邊框和內邊距才能得到內容的寬度和高度。

但是,IE6和IE7不支持box-sizing屬性。不過,有一個專門解決這個問題的膩子腳本(polyfill),名叫borderBoxModel.js。

?

經過試驗我發現,不僅給浮動的欄,甚至給所有元素都應用這個不同的盒縮放模型都是沒有問題的,我在CSS里會添加這一條規則:

* { box-sizing: border-box; }

如此一下,頁面中的盒模型就全都符合邏輯了。換句話說,每個盒子的寬度并不是內容區的寬度,而是一經設定就不可變的真正的盒子寬度。

?

預防過大的元素

1. 限制圖片的寬度不超過其父元素。

.inner img { max-width:100% } 

2. 給每個欄添加overflow:hidden聲明。這條聲明不會縮小圖片以適應父元素,而會將它(以及任何過大元素)超出容器邊界的部分剪切掉。

?

5.3 三欄-中欄流動布局

min-width: 該屬性值會對元素的寬度設置一個最小限制。因此,元素可以比指定值寬,但不能比其窄。

1. 用負外邊距實現

2. 用CSS3單元格實現

?

6.3 彈出層

  • <figure>標簽規定獨立的流內容(圖像、圖表、照片、代碼等等)。
  • 使用<figcaption>元素為figure添加標題(caption),<figcaption>元素應該被置于"figure"元素的第一個或最后一個子元素的位置。

思路:先隱藏彈出層,然后在鼠標懸停時再顯示它。 同時涉及到堆疊上下文和z-index;

?

用CSS創造三角形

?

代碼如下:

div {border: 12px solid;border-color: transparent red transparent transparent;height: 0px;width: 0px;
}    

?

7.1 規劃頁面結構

記住兩條:代碼結構要符合邏輯,規劃組織要考慮層次。

?

居中沒有固定寬度的元素

在display屬性的值中,inline-block具有一些特殊的混合行為。正如它的名字所暗示的,它既有塊級元素的特點,也有行內元素的行為。從塊級元素的角度說,可以為它設定外邊距和內邊距,也可以通過它簡便而有效地包圍其他塊級元素。從行內元素的角度看,他會收縮自己包裹的內容,而不是擴展填充父元素。換句話說,inline-block元素的寬度始終等于其內容的寬度。這種元素還有一個特點,就是可以包圍浮動元素。不過,這種元素也有一個問題,即不能給它的外邊距設定auto值,而這恰恰又是在更大的容器內居中元素的最簡單方法。

解決方案就是為要居中元素的父元素(這里的nav)應用text-align: center,為要居中的元素(這里的ul)設定display: inline-block,讓它包圍列表項。這樣設定就可以得到我們想要的結果:沒有固定寬度的元素也能在其父元素內居中。

?

1. opacity屬性設置元素的不透明級別;

?

transition屬性

transition屬性是一個簡寫屬性,用于設置四個過渡屬性:

  • transition-property
  • transition-duration
  • transition-timing-function
  • transition-delay

transition-property屬性的取值: none,all,property

transition-timing-function屬性的取值: linear,ease,ease-in,ease-out,ease-in-out...

?

垂直居中

如果你想在一個固定高度的元素內垂直居中一行文本,可以把這一行文本的line-height設定為該元素的高度。假設元素高度為300px,可以這樣寫:

text-align: center;     /* 水平居中 */
line-height: 300px;   /* 垂直居中:行高=容器高度 */

如果想垂直居中其他元素,比如圖片,可以將容器的display屬性設定為table-row,再設定(只對單元格有效的)vertical-align屬性為middle,比如:

display: table-cell;        /* 借用表格的行為 */
vertical-align: middle;   /* 垂直居中 */
text-align: center;        /* 水平居中 */

?

CSS3 變換

CSS3為變換規定了兩個屬性:transform和transform-origin。

transform屬性能夠調用函數,調用不同的變換函數可以實現不同形式的變換,而通過傳入參數值可以控制變換的結果。通過transform屬性調用變換函數的語法如下:

transform: 函數名(數值或x、y值);

transform-origin屬性設置元素圍繞其變換的原點。默認情況下,這個點是元素垂直和水平方向的中心點。可以使用transform-origin屬性及位置關鍵字(left、center、right、top和bottom等)另行設定原點。

?

響應式設計的要素

響應式設計包含三個重要的方面。

  • 媒體查詢:是一種CSS語法,可以根據瀏覽器的特性,一般是屏幕或瀏覽器容器寬度提供CSS規則;
  • 流式布局:是使用em或百分比等相對單位設定頁面總體寬度,讓布局能夠隨屏幕大小而縮放;
  • 彈性圖片:是使用相對單位確保圖片再大也不會超過其容器;

?

8.2 媒體查詢

媒體查詢是CSS代碼的容器,其中的CSS只在某些條件(比如,當前頁面要被打印或者要顯示在某種類型或尺寸的屏幕上)具備時才會應用。媒體查詢可以用兩種方式來寫:@media規則和<link>標簽的media屬性。

?

轉載于:https://www.cnblogs.com/linxd/p/4383405.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273324.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273324.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273324.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win7安裝python開發環境,運行python

在win7上安裝python的開發環境是非常簡單的事情 Step1&#xff1a;下載python安裝文件 url&#xff1a;https://www.python.org/download 去這里找到你想要下載的文件 Step2&#xff1a;安裝 windows上當然是傻瓜式安裝了&#xff0c;你還在糾結什么呢 Step3&#xff1a;…

HC-05藍牙模塊基本使用

1.進入AT模式 EN輸入高電平按住按鍵不放,然后上電,進入AT模式,不過AT指令只能輸入一次,下次再輸入AT需要重新進入 2.串口波特率設為38400,進行AT模式下的指令操作 3.基本AT指令 ATORGL   恢復出廠設置 ATNAME newName  修改藍牙名字 ATROLE0/1/2  0:從模式 1:主模式 2:回…

Objective-C中的@property和@synthesize用法

代表“Objective-C”的標志&#xff0c;證明您正在使用Objective-C語言 Objective-C語言關鍵詞&#xff0c;property與synthesize配對使用。 功能&#xff1a;讓編譯好器自動編寫一個與數據成員同名的方法聲明來省去讀寫方法的聲明。 如&#xff1a; 1、在頭文件中&#xff1a;…

c++11編碼規范 NULL還是nullptr

0和nullptr/NULL 至于指針&#xff08;地址值&#xff09;&#xff0c;根據實際選擇用0、NULL還是nullptr。對使用了C11特性的項目&#xff0c;選用nullptr&#xff1b;對于C03項目&#xff0c;推薦NULL&#xff0c;因為它像是一個指針轉載于:https://www.cnblogs.com/JD85/p/4…

Android用戶界面程序設計示例

[例1]按鈕和Toast彈出對話框 1 [例2] TextView文本框 &#xff08;1&#xff09; 3 [例3]TextView文本框 &#xff08;2&#xff09; 4 [例4]編輯框EditText 4 [例5]單選RadioButton 6 [例6]Toast的用法簡介 8 [例7]多選checkbox 12 [例8]菜單Menu 14 …

innerText,outerText,innerHTML,outerHTML區別

document.body.innerHTML&#xff1b; innerText&#xff0c;outerText&#xff0c;innerHTML&#xff0c;outerHTML資料outerHTML&#xff1a;標簽對象外部的HTML文本(包括該標簽) innerHTML&#xff1a;標簽對象內部的HTML文本(不包括該標簽) innerText: 標簽對象內部的…

Ubuntu安裝adobe字體

Ubuntu的字體目錄存放在/usr/share/fonts目錄下&#xff0c;可以看到該目錄下有4個目錄&#xff0c; 12$ ls /usr/share/fonts/cmap truetype type1 X11我們在truetype目錄下新建一個adobe的目錄來存放需要安裝的Adobe中文字體&#xff0c;并把已經下載好的字體復制到該目錄…

Spring Thread Pool 線程池的應用

Spring and Java Thread example 掃掃關注“茶爸爸”微信公眾號堅持最初的執著&#xff0c;從不曾有半點懈怠&#xff0c;為優秀而努力&#xff0c;為證明自己而活。Download it – Spring-Thread-Example.zip (22 KB)轉自&#xff1a;http://www.mkyong.com/spring/spring-and…

數據庫操作類型簡介

SQL語言大體上可以分為四大類&#xff1a; 數據查詢語言&#xff08;DQL&#xff09;&#xff0c;數據操縱語言&#xff08;DML&#xff09;&#xff0c;數據定義語言&#xff08;DDL&#xff09;&#xff0c;數據控制語言&#xff08;DCL&#xff09;。 1. 數據查詢語言DQL數…

Emule使用Upnp,解決Lowid和port not reachable的問題

路由器上鉤選開啟Upnp Emule->選擇->擴展選項->Upnp&#xff0c; 服務器&#xff1a;【從URL更新】http://upd.emule-security.org/server.met轉載于:https://www.cnblogs.com/zhyong/p/4422139.html

Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 題目描述很簡單&#xff0c;就是尋找一個字符串的最大回文。 1.暴力搜索 窮舉所有的可能…

Integer 中的緩存類IntegerCache

2014年去某公司筆試的時候遇到這么一道題&#xff1a; public class Test {public static void main(String[] args) {Integer int1 Integer.valueOf("100");Integer int2 Integer.valueOf("100");System.out.println(int1 int2);} } 問打印的結果的多少…

Android動畫及滑動事件沖突解決(轉載)

原文鏈接&#xff1a;http://blog.csdn.net/singwhatiwanna/article/details/38168103 Android開發中動畫和事件處理是程序員邁向高手的必經之路&#xff0c;也是重點和難點。 此篇轉載文章思路清晰&#xff0c;結構合理&#xff0c;用圖文混合的方式完美的講解了動畫和事件沖突…

在main函數前后執行的函數之 C語言

在gcc中&#xff0c;可以使用attribute關鍵字&#xff0c;聲明constructor和destructor&#xff0c;來指定了函數在main之前或之后運行,代碼如下&#xff1a; 1 #include <stdio.h>2 3 __attribute((constructor)) void before_main()4 {5 printf("%s/n",_…

VSTO開發,轉帖

http://www.cnblogs.com/oneivan/p/4243574.html轉載于:https://www.cnblogs.com/xianerwonder/p/4432595.html

PowerDesigner的漢化破解安裝到逆向工程(ORACLE)

一、軟件安裝 1、下載軟件并安裝安裝16.5漢化版下載地址&#xff1a;真正的漢化-PowerDesigner 16.5 漢化&#xff08;包含安裝文件和漢化文件&#xff09; 破解包下載地址&#xff1a;PowerDesigner V16.5 安裝文件 及 破解文件 &#xff08;包含安裝文件和破解文件&#xff0…

JAVA開發隨記

想到一點寫一點&#xff0c;遇到一點補充一點。 1、成員變量 在定義成員變量時盡量不要直接賦值&#xff0c;最好是在初始化信息的時候進行賦值操作。如果需要在屬性定義的時候進行賦值&#xff0c;那么請用final修飾該屬性。錯誤實例 class A extends B {/** 到期日距離當前…

PHP反射ReflectionClass、ReflectionMethod 入門教程

PHP反射ReflectionClass、ReflectionMethod 入門教程 作者&#xff1a;SNSGOU 發布于&#xff1a;2014-03-16 16:44:00 分類&#xff1a;PHP 瀏覽(6145) PHP5 具有完整的反射API&#xff0c;添加對類、接口、函數、方法和擴展進行反向工程的能力。 反射是什么&#xff…

Oracle開發常用知識

一、利用游標實現循環嵌套 在對oracle數據進行操作時我們會經常碰到循環甚至循環嵌套的情況。這個時候游標的作用就體現出來了。 DECLAREvId NUMBER(19);vDate DATE;--a表游標定義CURSOR a_cursor ISSELECT DISTINCT o.employeeId FROM operations o WHERE o.employeeId IS N…

條件控制(if ) ( case)

一&#xff1a;IF應用格式 (1)                  (2)                (3) IF 條件 THEN           IF 條件 THEN            IF 條件1 THEN --代碼塊               --代碼塊          …