HTML與CSS前端開發精品課學習筆記

Web前端開發精品課讀書筆記
[toc]

HTML與CSS進階教程

小知識

  • 最新HTML標準文檔說明簡化, 大小寫不敏感, 屬性可以不加引號,部分屬性屬性值可以忽略.
  • div和span
  • id和class的使用:選擇器的使用
  • 瀏覽器的小標題的使用: <head>中使用<title></title><link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" 的方式使用.

語義化

  • 標題語義化
  • 圖片語義化 alt title.
    • figure figcaption代替<div><img .. /><span></span></div>方式實現 圖片+ 圖注的方式, 更好的語義化.
  • 表格語義化
  • 表單語義化 <label for ..>表達,給相應的<input type = "checkbox" ..>, 增加標簽.
  • 使用fieldsetlegend標簽. 后者是表單組標簽, 實現類似"書簽"效果.
  • 其他標簽. <br /> <strong><em><del><ins><img> 分別表達換行, 加強, 斜行,刪除線,插入線,圖片等方式. 其中<img>是否使用背景圖片替代, 看是否要當做內容被索引, 被查找, 如果不需要, 就用背景圖片.

CSS進階

基礎支持

  • 單位: px % em rem 分別代表像素,百分比,相對于當前元素大小,相對于"根元素"大小

    • %
      • width height font-size分別對應父元素相同屬性值進行計算
      • line-height百分比相對于父元素的font-size計算.
      • vertical-align相對于當前元素line-height計算.
  • 特性

    • 繼承性. 對于<a>元素有默認特性,會影響繼承產生的效果.
  • 選擇器

    • M N {} 后代選擇器,包括孫子所有的后代
    • M>N {} 子代選擇器,只包括兒子輩的選擇器
    • M~N {} 兄弟選擇器. 同級的N元素
    • M+N {} 相鄰選擇器. 同級的N元素

書寫規范

命名規范

  • 必要時采用父級class前綴法,column column-title column-content這種這方式.
  • 用駝峰命名topMain,中劃線法,如上.

書寫規范

優先級順序:

  • 布局,文檔流 display position float clear
  • 自身盒子屬性 width height margin boder padding overflow
  • 文本描述屬性 font line-height text-align text-indent vertial-align
  • 裝飾屬性 color background-color opacity cursor
  • 其他屬性 content list-style quotes

注釋

  • 采用/* */方式, 如果不想被壓縮,使用/*! 版權所有 */ 保留注釋不被壓縮,不然壓縮CSS時就會干掉這些.

CSS Reset

  • 使用* {marging:0 padding:0} 完成頁面默認樣式的清除,這種效率不過, 有css reset樣式清除表. 不過高級設計是不清楚樣式的.

CSS盒子模型

  • conent內容區可以使用overflow:hidden方式來指明溢出怎么辦.
  • border:none對比border:0 不需要渲染,不占用內存.但是IE6 7 不支持border:none,沒有舊瀏覽器,就不作兼容.
  • padding用于有背景圖的, 設置文字偏移

外邊距疊加

  • 只有margin-top margin-bottom之間會發生疊加,而margin-left margin-right不會
  • 只有block inline-block會發生, 因為inline元素margin-top margin-bottom屬性設置無效.
  • 同級元素,底和頂疊加; 父子元素, 頂和頂,底和底疊加; 如果沒有子元素或文字的元素如<br /><hr />空元素, 會讓與其接壤的所有元素發生外邊距疊加.

負margin技術

  • 普通文檔流下: margin-top margin-left為負數會讓自身移動去覆蓋其他位置; margin-bottom margin-right為負數會讓后續元素移動,覆蓋原有元素
  • 浮動元素:注意流動的方向即可.
  • 相應技巧:
    • 圖文混排,水平底部不對齊: vertical-align:text-bottom改變默認的baseline-bottom方式外, margin{0 3px -3px 0}方式也可以.
    • 自適應兩列布局:
    • 垂直居中. 設置父元素position:relative, 設置子元素position:absolute;top:50%;left:50%;margin-left:width值一半的負值; margin-top:height值一半的負值 . 萬能的方法,適用于block inline inline-block三種元素.
    • tab選項卡可以margin-top:-1px 消除下邊框顯示問題.
    • 子元素為float:left;``float:right 浮動, 而父元素沒有設置高度height會導致父元素高度坍陷. 對父元素div設置overflow:hidden清除浮動,可以使高度不會坍陷.

display屬性

塊元素和行內元素

塊元素

行內元素

  • strong em s u a span代表強調,斜杠,刪除線,下劃線,超鏈接,文檔內的行級元素.
  • 不可包含塊元素,造成無法預知的后果, 可以包括其他行元素.
  • 無法定義height width高度和寬度.
  • 可定義margin-left margin-right,無法定義margin-top margin-bottom.

display 改變屬性

inline-block可以定義width height屬性, 可以與其他行內元素在同一行, 包括img input2種.

display:nonevisibility:hidden

  • 前者不會占據位置,后者占據位置而不顯示. 而慎用前者,因為搜索引擎會忽略.

display:table-cell

  • 定義垂直和居中對齊. 對父元素設置display:table-cell,然后對父元素,子元素設置vertical-align:center垂直居中.
  • 自適應的等高布局, 會自適應高度撐開并由最高的盒子決定, 等高
    ```lasso`
    <div ... style= "display:table-row">
    <div style="display:table-cell;"> <img /><div>
    <div style="display:table-cell;"><span></span></div>
    </div>

- **自動平均** 劃分元素

父元素: {display:table;}
子元素: {display:table-cell;}


#### 去除`inline-block`元素之間間距
語法:

父元素 {font-size:0;}


## 文本效果
- 大小寫, 首行縮進,文本大小寫,文本水平垂直對齊,行高,字距,詞距.
### `text-indent`首行縮進
- 正常用法, 首行縮進`2em`, 高級用法設置`<h1>`元素背景元素, 相應文本設置為`text-indent:-9999px`不顯示, 對搜索引擎也友好.

### `text-align`設置
- 可以設置居中,左, 右, 兩端對齊等.
- 對文本, `inline inline-block`元素生效. 所以對`<img>`元素也生效. 可以對`<div display:inline-block></div` 完成設置生效.優雅辦法如下
- `{text-align:center} {margin: 0 auto;}`區別. 前者生效以說,父元素中定義, 后者當前元素定義. 后者只對塊元素生效.

### `line-height`設置
- 技巧1: 設置單行文字居中對齊. 方法: 設置`height line-height`值相同.
- `em %`取值,參考父元素`font-size`屬性設置行號.
- 數字. **CSS唯一一個用數字無單位設置單位** 代表相對于當前元素`font-size`乘以這個數字. 

### `vertical-align`定義周圍元素對當前元素的定位方式. 參考行盒子. 頂線,中線,基線,底線. 4大線.
#### 取值方式
- `vertical-align:-2px`參考當前元素基線向下偏移 `2px`
- `vertical-align:50%`. 如果當前元素繼承`line-height:20px`, 那么等同于`vertical-align:10px`,當前元素向上偏移`10px`
- 關鍵字: `top middle baseline bottom`


#### 應用技巧
- `inline inline-block`元素,**周圍元素**對**當前元素**垂直對齊方式.
- 塊元素, 不生效.
- `table-cell`元素生效,但是屬性需要定義在**當前元素**上.

## 表單效果
### `radio checkbox`垂直方向不對齊不美觀的問題
- 使用`{vertical-align:-2px}`等方式微調, 既可達到滿意效果.
### `text-area`效果
- 固定大小, 禁止拖動,瀏覽器兼容同樣外觀

{width:100px; height:80px; overflow:auto; resize:nono}


### 表單對齊
- 清除`p`浮動. `p {overflow:hidden;}`
- `form` 寬度固定. 左欄固定寬度和若干右欄. 左欄`text-align:right`右對齊
- 右欄所有盒子長度相等.
- 左欄+右欄所有盒子長度 = 行寬

## 浮動布局
### 浮動會讓元素變成`block`元素, 可以定義`width height margin padding`屬性了. 會脫離正常文檔流, 后續的元素會不缺. 例如`<img>`元素右邊部分會讓后續的文字填充出來.
### 浮動影響
- 對自身影響. 轉換成塊元素`block` 同上.
- 對父元素影響. 如果父元素沒有高度或高度不夠, 會造成塌陷. 解決問題: 定義高度大于子元素, 或者也定位為浮動. 或清除浮動.
- 對兄弟元素影響. 都是浮動就一起浮動. 如果不是就會脫離文檔流, 而覆蓋后續元素占據的位置
- 對子元素影響. 自適應包裹子元素.
### 清除浮動 避免浮動影響,如覆蓋
- `clear:both` 對浮動元素后續元素應用, 譬如增加一個空`<div>`元素
- `overflow:hidden` 對父元素使用, 會導致顯示不全的問題.
- `.clearfix{*zoom:1;} .clearfix::after{clear:both;content:'';display:block;height:0;visibility:hidden;}` 清楚浮動不會有問題. 

## 定位布局
- `static  relative absolute fixed`四大布局.  前二者遵循正常文檔流, 后二者脫離文檔流布局.
#### 重要技巧
- 對父元素,祖先元素定義`position:relative`, 然后當前元素定義`position:absolute`定位, `top bottom left right`屬性來定位.
- `position:absolute`對導致元素變為`block`元素, 而且相對于往上追溯,第一個`relative absolute fixed`定位來實行定位. 
- `{z-index:1 inherit auto}` 相應堆疊順序. 除了定位`static`時不生效, 所有布局均生效.

## CSS圖形
### 三角形
- `{border-width:20px; border-style:solid; border-color:red transparent transparent transparent;}` 三角形就出來了.
- 如果需要邊框的, 需要2個配合. 內三角要小1px, 具體略
### 圓角
- `border-radius:1px 1px 1px 1px`
### 圓 橢圓(略)

## 性能優化
- 四大發: 簡寫 工具壓縮 選擇器
### 簡寫

border: 1px solid red;
border-bottom:none; //定義另外三條,而除去這條

background:url(baidu.com) no-repeat 80px 40px . 代表定位的80 40

font:"微軟雅黑" 12px/1.5em bold //font-size和line-height值之間需要加入/,這點需要注意.

color:#000 == #000000


- 結尾分號;可不留, url()引號可不留,屬性為0可無單位,0.開頭可省略,利用組合選擇器合并,差異部分單獨定義,利用繼承父元素定義多個而子元素不用再定義.

### 工具壓縮
- YUI等

### 選擇器
- 選擇器從右往左進行. 理論上,更精確的寫在右邊.
- 少用后代`div span`選擇器, 可以多用`div>span`子選擇器替代. 同樣的`~ +`兄弟和相鄰選擇器必要時使用.

## CSS技巧
### 水平居中
- 文本, `inline inline-block`元素設置水平居中沒有問題. 
- 塊元素.使用`margin:0 auto`水平居中. 需要注意的是如果本身沒有寬度,塊元素會默認占全部, 所以有時候`width:80%`來完成顯示 , 并不是全部不居中.

### 垂直居中
#### 文本垂直居中
- 單行文本: 設置`line-height height`相同
- 多行文本: `父元素{display:table-cell; vertical-align:middle;} 子元素{display:inline-block}` 把所有的文字用`span`包括起來然后使用`inline-`方式完成垂直居中
#### 元素垂直居中
- 塊元素. 萬能方法,使用了`position:absolute`所以會把元素都變成`block`元素, 所以其他元素如`inline inline-block table-cell`等都可以使用萬能方式. 注意如果水平, 垂直居中單獨可控, 去掉`left margin-left` 和 `top margin-top`單獨設置即可.

父元素{display:relative}
子元素{display:absolute; top:50%; left:50%; margin-top:'height值的一半'; margin-left:'widht一半的值'}


- 行內元素

父元素{display:table-cell; vertical-align:middle;}
子元素{vertical-align:middle;}


#### CSS Sprite
- 合并小圖標成一個大的圖標.
- ICON Font技術. 訪問阿里小圖標和文字一樣簡單.

### BFC IFC
- 好復雜. 不嚴謹做法: block,inline-block創建BFC, 而table等參與BFC. 這個以后再理解.
#### 用法
- A,B兩元素外邊距疊加. 此時對B括起來`<div style="overflow:hidden">B?</div>`創建一個BFC, 避免外邊距疊加.
- 父元素塌陷一樣的問題. 給父元素增加`overflow:hidden`之后讓子元素在一個BFC內了,高度就會參考浮動元素而進行計算.
- 自適應兩欄布局, 清除浮動. `#content{overflow:hidden}`同樣讓環繞在圖片周圍的文字,自己創立BFC, 從而實現兩欄布局而不是環繞布局.
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,783評論 1 92
  • CSS格式化排版 1、字體 我們可以使用css樣式為網頁中的文字設置字體、字號、顏色等樣式屬性。下面我們來看一個例...
    張文靖同學閱讀 1,301評論 0 3
  • Html 標簽 斜體 粗體 單獨的樣式 引用文本 長文本引用 換行 空格 分割線 地址信息 單行代碼 多行代碼 無...
    SunnySky_閱讀 563評論 0 5
  • 一 外部式css樣式 (也可稱為外聯式)就是把css代碼寫一個單獨的外部文件中,這個css樣式文件以“.css...
    KunMitnic閱讀 955評論 0 1
  • 潮湖高曲拾舟去, 五斗官賈錦繡裳。 老貓柴狗杏花肆, 南山秋雨夜來香。
    閑燈兒閱讀 123評論 0 5