Css - 學習筆記(一)響應式布局

最近在做 react 移動端開發,重新開始接觸到叫高級的Css使用,為了加深自己的記憶,整理一些學習筆記,供日后查閱。

Media Queries

Media 這個東西讓看到它嚇了我一跳,真真的了不起,它讓我可以給不同大小的瀏覽器定制不同的效果,以及針對不同設備設定不同布局。

今天在做移動端css效果時,發現一個問題,在做一個個性化Tab標簽時,發現在iphone5,iphone6,ipad上,我需要讓他展示不同的效果,用js可以實現這樣的效果,但是感覺css和js耦合起來的編程方式讓我很不舒服。

于是我想到了使用 Media 來達到我想要的效果,使用它的時候感覺很奇妙,真的很有趣。

使用

  • screen 是媒體類型里的一種,CSS2.1定義了10種媒體類型
  • and 被稱為關鍵字,其他關鍵字還包括 not(排除某種設備),only(限定某種設備)
  • (min-width: 400px) 就是媒體特性,其被放置在一對圓括號中。完整的特性參看 相關的Media features部分
<link rel="stylesheet" type="text/css" href="styleA.css" media="screen and (min-width: 400px)">

可以通過 link 標簽的 media 屬性,來根據不用的像素加載需要的css,但是在項目前期高頻修改的前提下,使用這樣的方式,增加了維護的成本(個人原因,喜歡把東西細化,但是在不斷分化、細化后發現,在需求不太確定的項目前期做這樣的事情,增的是在作死...)

min-width和max-width的含義

max-width表示最大寬度,也就是說在不超過該寬度下的情況下執行。所以@media only screen and (max-width: 1024px) {}表示的含義是:當瀏覽器的寬度小于1024像素的時候,花括號里面的CSS樣式其作用

@media only screen and (max-width: 1024px) {
    body { background-color: blue;}
}

詳細介紹

@media only screen and (min-width: 320px)

  • not: not 是用來排除掉某些特定的設備的,比如 @media not print(非打印設備)
  • only: 用來定某種特別的媒體類型。對于支持 Media Queries 的移動設備來說,如果存在 only 關鍵字,移動設備的Web瀏覽器會忽略 only 關鍵字并直接根據后面的表達式應用樣式文件。對于不支持 Media Queries 的設備但能夠讀取 Media Type 類型的Web瀏覽器,遇到 only 關鍵字時會忽略這個樣式文件。
  • all: 所有設備,這個應該經常看到
media_type 設備類型說明
all 所有設備
aural 聽覺設備
braille 點字觸覺設備
handled 便攜設備,如手機、平板電腦
print 打印預覽圖等
projection 投影設備
screen 顯示器、筆記本、移動端等設備
tty 如打字機或終端等設備
tv 電視機等設備類型
embossed 盲文打印機

瀏覽器支持

并非所有的瀏覽器都支持Media Queries

Media Queries是CSS3對于Media Type的一個擴展,所以不支持Media Queries的瀏覽器,應該仍然要識別Media Type,但是IE只是簡單的忽略了樣式。only 關鍵字可能顯得有些多余,對支持Media Queries的瀏覽器來說確實是這樣,因為加不加 only 沒有影響。only的作用,很多時候是用來對那些不支持Media Queries但是卻讀取Media Type的設備隱藏樣式表的。比如:

<link rel="stylesheet" type="text/css" href="example.css" media="only screen and (color)">
  • 支持Media Queries的設備,正確應用樣式,就仿佛only不存在
  • 不支持Media Queries但正確讀取Media Type的設備,由于先讀取到only而不是screen,將忽略這個樣式
  • 不支持Media Queries的IE不論是否有only,都忽略樣式

完整的支持情況羅列

流浪器 是否支持
IE6 不支持
IE7 不支持
IE8 不支持
IE9 支持
Chrome5 支持
Opera10 支持
Firefox3.6 支持
Safari4 支持

自適應網頁設計

允許網頁寬度自動調整

首先,在網頁代碼的頭部,加入一行viewport元標簽。

<meta name="viewport" content="width=device-width, initial-scale=1" />

viewport是網頁默認的寬度和高度,上面這行代碼的意思是,網頁寬度默認等于屏幕寬度(width=device-width),原始縮放比例(initial-scale=1)為1.0,即網頁初始大小占屏幕面積的100%。

正常的web開發均可使用,這是常規的 meta 標簽,如果不使用該標簽寫出來的頁面效果,在手機屏幕上看會被縮小到默認像素,影響在手機上的使用。

所有主流瀏覽器都支持這個設置,包括IE9。對于那些老式瀏覽器(主要是IE6、7、8),需要使用css3-mediaqueries.js。

<!--[if lt IE 9]>
  <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
<![endif]-->

不使用絕對寬度

由于網頁會根據屏幕寬度調整布局,所以不能使用絕對寬度的布局,也不能使用具有絕對寬度的元素。

具體說,CSS代碼不能指定像素寬度:

width:xxx px;

只能指定百分比寬度:

width: xx%;

或者

width:auto;

相對大小的字體

字體也不能使用絕對大小(px),而只能使用相對大小(em)。

body {
  font: normal 100% Helvetica, Arial, sans-serif;
}

上面的代碼指定,字體大小是頁面默認大小的100%,即16像素。

h1 {
  font-size: 1.5em;
}

然后,h1的大小是默認大小的1.5倍,即24像素(24/16=1.5)。

small {
  font-size: 0.875em;
}

流動布局(fluid grid)

"流動布局"的含義是,各個區塊的位置都是浮動的,不是固定不變的。

.main {
  float: right;
  width: 70%;
}
.leftBar {
  float: left;
  width: 25%;
}

float的好處是,如果寬度太小,放不下兩個元素,后面的元素會自動滾動到前面元素的下方,不會在水平方向overflow(溢出),避免了水平滾動條的出現。

圖片的自適應

img { max-width: 100%;}

參考文章

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內容

  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    wzhiq896閱讀 1,785評論 0 2
  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    love2013閱讀 2,326評論 0 11
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,779評論 1 92
  • 響應式布局原理第一步:Meta標簽大多數移動瀏覽器將HTML頁面放大為寬的視圖(viewport)以符合屏幕分辨率...
    EndEvent閱讀 516評論 0 2
  • 筆記參考自《響應式Web設計:HTML5和CSS3實踐》,2013年出版內容說不上最新。如下是全書的章的目錄:第 ...
    于曉魚閱讀 944評論 0 1