自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

拿到 UI 時(shí),前端人該如何思考?

開發(fā) 前端
經(jīng)常有人私信我,小智這個(gè)設(shè)計(jì)圖用 CSS 要怎么布局呀,這個(gè)按鈕要怎么畫的。所以今天,在這篇文章我們來介紹一些新的布局的方法,希望對智米們有些用處。

[[359416]]

經(jīng)常有人私信我,小智這個(gè)設(shè)計(jì)圖用 CSS 要怎么布局呀,這個(gè)按鈕要怎么畫的。所以今天,在這篇文章我們來介紹一些新的布局的方法,希望對智米們有些用處。

把設(shè)計(jì)細(xì)節(jié)放在一邊

我通常做的第一件事就是把設(shè)計(jì)細(xì)節(jié)放在一邊。我想先知道這次設(shè)計(jì)主要包括哪些部分,然后在關(guān)注每個(gè)部分的細(xì)節(jié)??紤]以下UI:

 

在上面UI中,有以下特點(diǎn):

  • Header/Navigation
  • 中間內(nèi)容 部分
  • 底部的 How it works 部分

接著,我們先把這三個(gè)主要部分抽象出來:

 

抽象后,我們可以看到主要的部分,主宋就可以幫助我們考慮如何布局組件,而不用考慮每個(gè)組件的細(xì)節(jié)。

我是這樣想的:

  • Full-width header:頭部的導(dǎo)航欄
  • Centered Content:中間內(nèi)容水平居中,注意,這個(gè)一般需要設(shè)置最大寬度 max-width。
  • How it works:這是一個(gè)4列的布局,整個(gè)部分都被限制在一個(gè)包裝器中。

接著,把上面三個(gè)部分用代碼表示出來:

  1. <header></header> 
  2.  
  3. <section class="hero"
  4.   <!-- A div to constraint the content --> 
  5.   <div class="hero__content"></div> 
  6. </section
  7.  
  8. <div class="wrapper"
  9.   <!-- 4-columns layout --> 
  10.   <section class="grid-4"></section
  11. </div> 

 

 

 

因?yàn)槲覀冇幸粋€(gè)4列的部分,這里我使用 CSS網(wǎng)格:

  1. .wrapper { 
  2.   margin-left: auto; 
  3.   margin-right: auto; 
  4.   padding-left: 1rem; 
  5.   padding-right: 1rem; 
  6.   max-width: 1140px; 
  7.  
  8. .hero__content { 
  9.   max-width: 700px; 
  10.   margin-left: auto; 
  11.   margin-right: auto; 
  12.  
  13. .grid-4 { 
  14.   display: grid; 
  15.   grid-template-columns: repeat(4, 1fr); 

拿到 UI 時(shí),我們不是馬上就開始行動,而是要觀察整體的構(gòu)成,先實(shí)現(xiàn)每塊的構(gòu)成,然后再去深入構(gòu)成的實(shí)現(xiàn)。

文章頁面

在本例中,我們有一個(gè)文章頁面布局。這是UI,它包含:

  • 頭部
  • 圖片
  • 文章標(biāo)題
  • 文章內(nèi)容
  • 側(cè)邊欄(旁邊)

我們再一次把它抽象成主要的幾個(gè)部分:

 

抽象主要包括幾個(gè)部分:

  • 網(wǎng)站的頭部寬度是 100%
  • 標(biāo)題:包含文章標(biāo)題和說明,其內(nèi)容左對齊,要設(shè)置最大寬度
  • 兩列布局,包含main和sidebar元素。
  • 文章內(nèi)容,水平居中并有最大寬度。

文章-頁面標(biāo)題

 

這里不需要什么布局方法。一個(gè)簡單的max-width就可以了,當(dāng)然還需要加些 padding,增加一些舒適距離。

  1. .page-header { 
  2.   max-width: 50rem; 
  3.   padding: 2rem 1rem; 

文章- Main 和 Sidebar

 

main 元素是視口的整個(gè)寬度減去側(cè)邊欄的寬度。通常,側(cè)邊欄應(yīng)具有固定的寬度。為此,使用CSS網(wǎng)格是完美的。

  1. .page-wrapper { 
  2.   display: grid; 
  3.   grid-template-columns: 1fr; 
  4.  
  5. @media (min-width: 800px) { 
  6.   grid-template-columns: 1fr 250px; 

對于文章的內(nèi)部內(nèi)容,應(yīng)該將其限制在一個(gè)包裝器中。

  1. .inner-content { 
  2.   max-width: 50rem; 
  3.   margin-left: auto; 
  4.   margin-right: auto; 
  5.   padding-left: 1rem; 
  6.   padding-right: 1rem; 

有些整體的布局后,我們來看具體的細(xì)節(jié)。

深入細(xì)節(jié)

How It Works 部分

在本文的第一個(gè)示例中,我們來看一下 How It Works 部分 的細(xì)節(jié)實(shí)現(xiàn)。

 

  • 這里的步驟一,二,三,有沒有可能會增加或者減少的情況,如果有,我們應(yīng)該如何處理?
  • 我們是否需要列的高度相等,特別是當(dāng)一個(gè)卡片有一個(gè)很長的文本?

標(biāo)題

我們是否需要該部分標(biāo)題留在一邊?還是在某些情況下應(yīng)采用全寬?

響應(yīng)式設(shè)計(jì)

當(dāng)網(wǎng)頁寬度縮小時(shí),我們需要做響應(yīng)式嗎?如果有, 那觸發(fā)的條件是什么?

這些是我們開發(fā)可能會遇到的問題,你覺得怎么樣?作為一名前端開發(fā)人員,我們應(yīng)該考慮這樣的邊緣情況,而不僅僅按 UI 照貓畫虎這樣簡單。

 

由于本文著重于思考過程,所以無法詳細(xì)介紹一個(gè)個(gè)有可能出現(xiàn)的情況。

在上面的模型的第一個(gè)和第三個(gè)版本中,步驟數(shù)分別是3和2。我們可以使CSS動態(tài)化來處理嗎?可以。

HTML

  1. <div class="wrapper"
  2.   <section class="steps"
  3.     <div> 
  4.       <h2>How it works</h2> 
  5.       <p>Easy and simple steps</p> 
  6.     </div> 
  7.     <div class="layout"
  8.       <div class="layout__item"
  9.         <article class="card"></article> 
  10.       </div> 
  11.       <div class="layout__item"
  12.         <article class="card"></article> 
  13.       </div> 
  14.       <div class="layout__item"
  15.         <article class="card"></article> 
  16.       </div> 
  17.     </div> 
  18.   </section
  19. </div> 

 

CSS

  1. .steps { 
  2.   display: grid; 
  3.   grid-template-columns: 1fr; 
  4.   grid-gap: 1rem; 
  5.  
  6. @media (min-width: 700px) { 
  7.   .steps { 
  8.     grid-template-columns: 250px 1fr; 
  9.   } 
  10.  
  11. .layout { 
  12.   display: grid; 
  13.   grid-template-columns: 1fr; 
  14.   grid-gap: 1rem; 
  15.  
  16. @media (min-width: 200px) { 
  17.   .layout { 
  18.     grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); 
  19.   } 

我使用了CSS grid minmax()和auto-fit關(guān)鍵字。這在卡片數(shù)量可以增加或減少的情況下很有用。

 

內(nèi)容部分

 

圖片

  • 圖片應(yīng)如何呈現(xiàn)?它是每天變化的還是應(yīng)該從CMS更新?
  • 是使用HTML 還是CSS background?
  • 圖片的預(yù)期長寬比是多少?
  • 我們是否需要根據(jù)視口大小使用多個(gè)圖像大小?
  • 圖片的部分是否可能會換成視頻?

高度

內(nèi)容最小高度是多少?

內(nèi)容長度

我們需要設(shè)置標(biāo)題和描述的最大長度嗎?如果是,設(shè)計(jì)期望處理的最小值和最大值是多少?

元素之間的間距

如何處理垂直間距?

內(nèi)容中心

如何水平和垂直居中內(nèi)容?已知我們只知道寬度,而高度是未知的。

限制內(nèi)容

為了提高可讀性,最好限制內(nèi)容。理想的寬度是多少?

響應(yīng)式設(shè)計(jì)

我們需要根據(jù)視窗寬度改變字體大小嗎?如果是,我們應(yīng)該使用基于px的單位,視口單位,或CSS clamp()函數(shù)?

根據(jù)我們所做的項(xiàng)目的性質(zhì),我們應(yīng)該找到這些問題的答案,這將幫助我們確定組件的構(gòu)建方式。

有時(shí),很難回答每個(gè)問題,但是問得越多,獲得良好的無錯(cuò)誤結(jié)果的可能性就越大。

在本部分中,我將解決子元素之間的間距。我喜歡使用flow-space實(shí)用程序。我是從Andy Bell的Piccalil博客中學(xué)到的。目的是在直接同級元素之間提供間距。

 

html

  1. <section class="hero"
  2.   <!-- A div to constraint the content --> 
  3.   <div class="hero__content flow"
  4.     <h2>Food is amazing</h2> 
  5.     <p>Learn how to cook amazing meals with easy and simple to follow steps</p> 
  6.     <a href="/learn">Learn now</a> 
  7.   </div> 
  8. </section

 

css

  1. .flow > * + * { 
  2.   margin-top: var(--flow-space, 1em); 

 

最后的想法如前面所見,實(shí)現(xiàn)組件的過程不僅要使其與 UI 完全匹配,還要考慮邊緣情況。希望智米從本文中學(xué)到至少一件事。

本文轉(zhuǎn)載自微信公眾號「大遷世界」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系大遷世界公眾號。

 

責(zé)任編輯:武曉燕 來源: 大遷世界
相關(guān)推薦

2015-11-09 10:29:05

設(shè)計(jì)師前端

2025-03-07 11:26:52

2025-03-06 12:44:45

2022-12-23 10:36:04

前端React

2014-02-11 17:46:31

創(chuàng)業(yè)

2010-06-04 10:46:18

同事上司

2015-04-27 09:41:35

前端質(zhì)量質(zhì)量保障

2021-09-26 11:32:39

模型數(shù)據(jù)分析

2020-12-30 09:00:00

安全工具攻擊

2017-11-23 15:06:14

前端數(shù)據(jù)庫開發(fā)

2015-10-29 11:35:53

零基礎(chǔ)前端設(shè)計(jì)

2015-10-26 10:32:01

前端優(yōu)化工程化

2009-09-16 13:29:30

BSM

2010-12-29 09:51:29

前端基礎(chǔ)框架

2015-06-17 15:21:28

2019-04-08 09:01:20

程序員技能開發(fā)者

2025-02-28 09:34:11

前端參數(shù)方式

2022-07-21 09:00:00

容器云原生安全

2019-07-12 09:03:19

軟件虛擬機(jī)IBM

2014-10-22 10:50:14

Web前端
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號