成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

響應式開發中合理選定CSS媒體查詢分割點

開發 前端
本文響應式開發中合理選定CSS媒體查詢分割點翻譯自David Gilbertson的The-100%-Correct-Way-To-Do-CSS-breakpoints一文。本文唔看上去有些拗口,不過其核心是在于給出合適的Media Query命名與編寫方式。

本文響應式開發中合理選定CSS媒體查詢分割點翻譯自David Gilbertson的The-100%-Correct-Way-To-Do-CSS-breakpoints一文。本文唔看上去有些拗口,不過其核心是在于給出合適的Media Query命名與編寫方式。

本文從屬于筆者的Web 前端入門與***實踐中的Web 響應式開發系列文章。   

[[176979]] 

在閱讀本文的時候,反而希望你能先忘卻關于CSS、Web開發那些你已經知道的東西,我們今天討論的并不是多么復雜深奧的內容,如果你覺得準備好了那我們可以從下面這個簡單的點圖開始: 

 

上面這些點分布的有些隨意,分分合合,有近有遠,我們的問題就是如何將這些點劃分入到五個組中。最簡單的,我們可以在那些相距較遠的兩個點之間設置為分隔區劃分到不同的組合中。 

 

 

上面這幾個圈都是我隨手畫出來的,你當然可以選擇其他的劃分方式,譬如將最右邊的兩個點劃分到一個分組中。其實這個問題并無所謂錯誤答案,不過如果你以如下方式劃分的話:  

 

 

看上去是不是覺得怪怪的?我問這個問題也不是無中生有,當我們需要為不同尺寸的屏幕設置不同的CSS樣式稿時,會有人喜歡按照最常見的尺寸作為分割點,即320px,768px與1024px。 

 

 

不知道你有沒有聽過或者說過下面這些話:中等屏幕的話是不是按照768px來劃分?還是應該把768px也劃分到中等屏幕的范圍內?不過這個尺寸是iPad橫屏狀態下的尺寸,應該算是大屏幕了吧?唔那大屏幕就是768px和以上尺寸咯?然后320px左右的是小屏幕?那319px算啥?區分螞蟻的嗎?本文的主旨即使討論如何選擇合適的分割點與分隔組。 

選擇合適的分隔點

你在幼兒園里就會畫上面的這些圓吧,我現在用矩形度量來詳細闡述下: 

 

 

我們在這里選擇了600px,900px,1200px以及1800px作為分割點,這些分隔組包含了最常見的14個機型:  

 

 

我們把這兩張圖合并下,可以得出下面這個更適合你的老板、設計師、開發者以及測試人員看的一張圖:  

 

 

 

用更直觀的方式命名你的分組

你愿意的話,也可以使用Papa-Bear與Baby-Bear來稱呼你選定的分割點。不過當你和設計師一起討論網站在不同屏幕上的展示效果時,肯定希望雙方都能夠在腦海中形成感性直觀的認知。如果你用平板豎屏尺寸來形容的話,那到底是iPad還是Surface呢?特別是現在這種手機越來越大,平板越來越小的情況,你很難用單純的平板或者手機來劃分尺寸。不過好消息是蘋果已經不做新產品了,他們只是不斷地將按鈕、耳機口從現在的產品中移除。這邊我也不好給出什么建議,只能說設計師和產品之間需要多多溝通。

聲明式的設置響應式布局

聲明式的概念在前端很是流行,譬如著名的React就是典型的聲明式組件庫。聲明式編程應用到CSS中即是CSS應當定義What it wants,而不是How it should。我們上面討論過的一個關于分割點的容易混淆之處就是分割點同時代表了某個范圍。譬如$large:600px這種定義在large這個詞本身代表一個范圍值的時候就會混淆。因此在具體的某個組件或者標簽中,我們應該對其隱藏具體的尺寸設置,譬如:

  1. @mixin for-phone-only { 
  2.   @media (max-width: 599px) { @content; } 
  3. @mixin for-tablet-portrait-up { 
  4.   @media (min-width: 600px) { @content; } 
  5. @mixin for-tablet-portait-only { 
  6.   @media (min-width: 600px) and (max-width: 899px) { @content; } 
  7. @mixin for-tablet-landscape-up { 
  8.   @media (min-width: 900px) { @content; } 
  9. @mixin for-tablet-landscape-only { 
  10.   @media (min-width: 900px) and (max-width: 1199px) { @content; } 
  11. @mixin for-desktop-up { 
  12.   @media (min-width: 1200px) { @content; } 
  13. @mixin for-desktop-only { 
  14.   @media (min-width: 1200px) and (max-width: 1799px) { @content; } 
  15. @mixin for-big-desktop-up { 
  16.   @media (min-width: 1800px) { @content; } 
  17.  
  18. // usage 
  19. .my-box { 
  20.   padding: 10px; 
  21.    
  22.   @include for-desktop-up { 
  23.     padding: 20px; 
  24.   } 
  25.  

你會發現在上面的定義中我很推薦使用-up與-only后綴,在具體使用樣式的地方:

  1. .phone-only { 
  2.   @include for-phone-only { background: purple; } 
  3.  
  4. .tablet-portait-only { 
  5.   @include for-tablet-portait-only { background: purple; } 
  6.  
  7. .tablet-portrait-up { 
  8.   @include for-tablet-portrait-up { background: purple; } 
  9.  
  10. .tablet-landscape-only { 
  11.   @include for-tablet-landscape-only { background: purple; } 
  12.  
  13. .tablet-landscape-up { 
  14.   @include for-tablet-landscape-up { background: purple; } 
  15.  
  16. .desktop-only { 
  17.   @include for-desktop-only { background: purple; } 
  18.  
  19. .desktop-up { 
  20.   @include for-desktop-up { background: purple; } 
  21.  
  22. .big-desktop-up { 
  23.   @include for-big-desktop-up { background: purple; } 
  24.  

不過這種方式在需要大量自定義媒介查詢搭配的時候就顯得不是那么靈活,我們可以提供更加細粒度的控制方式:

  1. @mixin for-size($size) { 
  2.   @if $size == phone-only { 
  3.     @media (max-width: 599px) { @content; } 
  4.   } @else if $size == tablet-portrait-up { 
  5.     @media (min-width: 600px) { @content; } 
  6.   } @else if $size == tablet-portait-only { 
  7.     @media (min-width: 600px) and (max-width: 899px) { @content; } 
  8.   } @else if $size == tablet-landscape-up { 
  9.     @media (min-width: 900px) { @content; } 
  10.   } @else if $size == tablet-landscape-only { 
  11.     @media (min-width: 900px) and (max-width: 1199px) { @content; } 
  12.   } @else if $size == desktop-up { 
  13.     @media (min-width: 1200px) { @content; } 
  14.   } @else if $size == desktop-only { 
  15.     @media (min-width: 1200px) and (max-width: 1799px) { @content; } 
  16.   } @else if $size == big-desktop-up { 
  17.     @media (min-width: 1800px) { @content; } 
  18.   } 
  19.  
  20. // usage 
  21. .my-box { 
  22.   padding: 10px; 
  23.    
  24.   @include for-size(desktop-up) { 
  25.     padding: 20px; 
  26.   } 
  27.  

這種方式自然能夠達成預期的效果,不過如果某個粗心的開發者傳入了某個未預定義的范圍名,那么久尷尬了,因此我們還是建議不要傳入某個具體的尺寸,而是傳入某個范圍:

  1. @mixin for-size($range) { 
  2.   $phone-upper-boundary: 600px; 
  3.   $tablet-portrait-upper-boundary: 900px; 
  4.   $tablet-landscape-upper-boundary: 1200px; 
  5.   $desktop-upper-boundary: 1800px; 
  6.  
  7.   @if $range == phone-only { 
  8.     @media (max-width: #{$phone-upper-boundary - 1}) { @content; } 
  9.   } @else if $range == tablet-portrait-up { 
  10.     @media (min-width: $phone-upper-boundary) { @content; } 
  11.   } @else if $range == tablet-portait-only { 
  12.     @media (min-width: $phone-upper-boundary) and (max-width: #{$tablet-portrait-upper-boundary - 1}) { @content; } 
  13.   } @else if $range == tablet-landscape-up { 
  14.     @media (min-width: $tablet-landscape-upper-boundary) { @content; } 
  15.   } @else if $range == tablet-landscape-only { 
  16.     @media (min-width: $tablet-portrait-upper-boundary) and (max-width: $tablet-landscape-upper-boundary - 1px) { @content; } 
  17.   } @else if $range == desktop-up { 
  18.     @media (min-width: $tablet-landscape-upper-boundary) { @content; } 
  19.   } @else if $range == desktop-only { 
  20.     @media (min-width: $tablet-landscape-upper-boundary) and (max-width: $desktop-upper-boundary - 1px) { @content; } 
  21.   } @else if $range == big-desktop-up { 
  22.     @media (min-width: $desktop-upper-boundary) { @content; } 
  23.   } 
  24.  
  25. // usage 
  26. .my-box { 
  27.   padding: 10px; 
  28.    
  29.   @include for-size(desktop-up) { 
  30.     padding: 20px; 
  31.   } 
  32.  

 

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2012-12-10 10:58:02

IBMdW

2024-06-26 09:51:23

2013-11-01 09:38:38

響應試設計媒體查詢

2023-11-09 16:43:38

CSS Grid網頁布局

2020-09-11 09:26:55

媒體查詢HTMLCSS

2020-10-21 07:48:36

媒體查詢設計

2022-07-27 15:30:05

css容器查詢樣式查詢

2023-03-05 19:28:11

JavaScripCSS

2021-06-09 07:15:19

CSS容器查詢

2022-07-27 15:30:24

媒體查詢css

2014-08-05 14:49:39

Web響應式設計design

2017-07-13 11:44:20

Web開發CSSPC

2021-02-09 00:28:59

WebCSS開源

2012-01-16 09:37:04

jQuery

2023-09-01 09:19:40

CSS函數模式

2010-09-09 10:56:56

CSS

2012-02-13 09:30:51

響應式Web設計

2017-09-08 16:12:34

視口單位適配布局

2023-04-04 08:10:40

CSS字體元素

2012-12-17 15:19:13

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一区二区三区视频 | 国产日产精品一区二区三区四区 | 日韩在线成人 | 成人午夜精品一区二区三区 | 久视频在线观看 | 成人精品一区二区户外勾搭野战 | 久草久草久草 | 午夜精品久久 | 亚洲欧美日韩精品久久亚洲区 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 免费在线一区二区 | 日本不卡高清视频 | 999免费视频| 欧美在线视频二区 | 在线黄 | 久久99精品国产麻豆婷婷 | 手机av在线 | 欧美国产中文字幕 | 91精品在线观看入口 | 免费电影av| 久久精品一级 | 久草电影网 | 久久久久国产精品一区三寸 | 亚洲视频在线观看 | 中文字幕日韩欧美一区二区三区 | 国产a级黄色录像 | 一级片网址 | 亚洲精品久久久 | 天堂网中文字幕在线观看 | 黄片毛片免费观看 | 日本精品一区二区三区视频 | 在线免费观看日本视频 | 日韩有码在线播放 | 美女视频黄的免费 | 国产精品av久久久久久久久久 | 中文字幕一区二区三区四区五区 | 国产精品不卡一区 | 成人一区二区三区 | 成人免费视频网站在线观看 | 亚洲精品福利在线 | 亚洲国产精品成人综合久久久 |