国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

CSS Flexbox 可視化手冊

AdolphLWQ / 669人閱讀

摘要:應該把其中的每一行都視為多帶帶的彈性容器。這個空間被稱為正自由空間。這項工作是在文件中完成的,它負責跟蹤項目依賴及其版本。

翻譯:瘋狂的技術宅
原文:https://medium.com/swlh/css-f...

本文首發微信公眾號:jingchengyideng
歡迎關注,每天都給你推送新鮮的前端技術文章

介紹

Flexbox是 Flexible Box Module(彈性盒模型)的縮寫。 是一種可以輕松控制html元素之間的空間分布和對齊的布局模型。

Flexbox同一時間只能控制行或列中的一個維度。對于二維控制需要 CSS 網格布局。

首先給出如下模板:


  
1
2
3
4
5
6
7
8
9
10

以上 div 的默認行為遵循普通的html文檔流,將會從上到下、從左到右呈現,并采用整個 body 的寬度,因為其 display 屬性默認為block

彈性項目

display: flex 應用于 .container div 時,所有直接子div都變為 flex-items,并獲得新的行為

它們將顯示在同一行中,因為flex-direction默認為row

它們將會從左到右顯示

其中的項目不會自動伸展來適應整個寬度(主軸),為了做到這一點,它們會縮小。

項目會被拉伸以適合交叉軸(在此示例中為高度)。 如果這些項目的高度不一致,它們將會伸展到最高的那個高度

flex-basis 默認為 auto(項目寬度將由其內容決定)

flex-wrap 默認為nowrap(如果容器的寬度不足以適合這些項目,它們不會換行,而是會溢出)

出于可視化的目的,讓我們拉伸容器使其占據整個高度。

彈性容器

display:flex 使容器擴展至整個可用寬度。 這點與 display:inline-flex 相反,它使容器縮小到內容的寬度。

彈性方向

一旦被聲明為 flex 容器,就可以認為該元素具有兩個軸:主軸與交叉軸。 主軸由flex-direction屬性定義。 交叉軸垂直于前者。

flex-direction 屬性有四個值:rowrow-reversecolumncolumn-reverse

其默認值為row,它從左到右水平設置主軸,交叉軸從上到下垂直截取。 類似地, column 值從頂部到底部垂直設置主軸,從左到右設置交叉軸。 這兩個選項的相反屬性使主軸反轉180°。 交叉軸保持不變。

可以通過下圖觀察這些值的 flex-items 行為:

Flex Wrap

當容器中的空間不足以容納其中的彈性項目時,可以用 flex-wrap 來處理。

在默認情況下,flex-wrap 被設置為 nowrap,這意味著如果容器不能適應在其內的行中原始寬度的項目,則這些項目將會縮小來進行適應。 如果它們因為某種原因無法收縮,則會溢出容器。

把項目寬度設置為300px,nowrap 選項會輸出以下結果:

其中,每個項目都會縮小到大約 70px 來適合容器。

當屬性被更新為wrap時,現在項目的寬度實際上是原始值300px。 當第一行不足以容納300px時,則該項目將換行到新的一行,而不是溢出容器。 應該把其中的每一行都視為多帶帶的彈性容器。 一個容器中的空間分布不會影響到與其相鄰的其他容器。

但是為什么彈性項目會占據整個屏幕高度呢? 在第一部分中,容器高度設置為 100vh ,因此可用空間被平均分為四行,來適合 300px 項目的需要。 如果我們沒有設置 100vh,容器的高度則會遵循項目內容的高度,如下圖所示:

另一個選項是wrap-reverse,它會反轉交叉軸。 通過 flex-direction 屬性從上到下設置,wrap-reverse 將其轉換為從下到上。

通過使用 flex-direction:column 反轉主軸,不適應的元素會被換到另一列,剩余空間被均勻分割。

wrap-reverse 選項會沿著列方向將交叉軸從右向左反轉,產生以下輸出:

由于flexbox是單維度布局,所以在進行反轉時,項目從下到上進行排列(對于行方向),但保持左右結構,只改變了交叉軸。

彈性流

flex-directionflex-wrap 可以在一個屬性當中聲明:flex-flow:[direction][wrap]

.flex-container {
  flex-flow : column wrap;
}
項目之間的縫隙

讓我們回到row/wrap。 可以通過設置項目的 width:33.3333% 來填充整個容器:

但是如果你希望在子div 之間有一個間隙,它們就不會按照你想的那樣換行:

這個小麻煩這可以通過 CSS 函數 calc() 來解決:

.flex-item {
  width: calc(33.33333% - 40px);
  margin: 20px;
}

為了消除容器邊緣的空間,可以在容器上使用負邊距:

.flex-container {
  margin: -20px;
}

排序

order 屬性允許更改出現的可視排序項目。排序被分配給組。 默認情況下所有的彈性項目都設置為 order: 0,這意味著所有項目都屬于同一組,并且它們將按照原始順序定位。 在兩個或多個組的情況下,組會相對于它們的整數值進行排序。

在下面的例子中,有三個 ordinal groups-1, 01,按此順序進行排列。

.box-3 { order: 1; }
.box-7 { order: 1; }
.box-8 { order: -1; }

此屬性可視地重新分配項目,但在交互時保持其原始源位置,例如使用Tab鍵遍歷它們。 如果物品訂購對可訪問性有影響,則可以考慮這一點。 flex-direction 也是如此。

對齊


(此圖反復上傳總是出錯,請大家移步原文查看)

在Flexbox中,沿著軸的項目對齊和空間分布可以受到四個屬性的控制:

justify-content: 對齊主軸中的所有項目

align-items: 對齊交叉軸中的所有項目

align-self: 對齊交叉軸中的單個項目

align-content: 控制交叉軸上柔性線之間的空間

justify-content

適用于容器,justify-content 處理項目在主軸上的對齊方式。六個最常用的選項包括: flex-startflex-endcenterspace-aroundspace-betweenspace-evenlyflex-start是默認值。.

align-items

也適用于容器, align-items 屬性處理交叉軸方向上的對齊。它的默認值是 stretch 其它的選項是 flex-startflex-endcenterbaseline

stretch 選項使所有項目伸展到容器高度(如果設置)或最高項目的高度[5]。 第一張圖片顯示容器高度設置為 100vh,未設置第二個高度。

align-content

這是作用在 flex 容器的四個屬性中的最后一個,align-content 在交叉軸中的彈性線之間分配空格。 作為后者,它的初始值是 stretchjustify-content,它接受以下選項: flex-start, flex-end, center, space-around, space-between, space-evenly

align-self

align-items 屬性實際上通過在容器內的所有 flex 項目上設置 align-self 來實現。 通過多帶帶設置 align-self,可以覆蓋全局值。 它接受與align-items和"auto"相同的值[5]。

auto 選項通過 align-itemsalign-self 重置為容器全局定義的值。

調整 Flexbox 的大小

項目的尺寸和伸展性可以通過三種屬性來控制: flex-growflex-shrinkflex-basis。 這三個都作用于主軸。

flex-grow:如果有額外的空間,每個項目應該如何放大

flex-shrink:如果沒有足夠的空間,應該如何縮小每個項目

flex-basis:在設置上述兩個屬性之前,該項目的大小應該是多少

flex-grow

由此屬性設置的 flex grow factor (彈性增長因子)用來處理項目大小相對于彼此的比率。

默認值為 0,這意味著如果還有可用空間,就把它放在最后一個項目之后。

在上面的例子中,direction 被設置為 row,每個彈性項目的 width 被設置為 60px。 由于容器寬是 980px,所以剩余的可用空間為 680px。 這個空間被稱為positive free space (正自由空間)。

如果將 flex-grow 設置為1,正可用空間量會在彈性項目之間平均分配。 每個項目的寬度將會增加 136px,總寬度為196px

通過將 flex-grow: 2 應用到第三個項目,它會得到比其它項目多出兩倍的可用正自由空間,即286px,其他項目仍為173px

下圖顯示了把項目的 flex-grow 屬性值設置為其內容對應的數字時的情形。

flex-shrink

當沒有足夠的可用空間來容納所有容器時,用 flex-shrink 處理項目大小。 它通過縮小這些項目來劃分它們之間的 negative free space (負自由空間)。

下圖顯示的是寬度為 980px 的容器,它容納了5個寬度為 300px的物品。 由于沒有空間容納所需的總寬度 1500px,所以默認的flex shrink factor(彈性收縮系數)的值為1,這樣會使每個項目的寬度均勻縮小到196px

通過將第三項的比率設置為2,它縮小為其余項目大小的二分之一。

本節的最后一張圖顯示了將每個項目的內容值對應的數字設定為 flex-shrink 的值時的情形。

flex-basis

flex-basis 是在實際設置可用空間之前,檢查每個項目本來應具有的大小的屬性。 默認值為 auto,項寬度由 width 屬性顯式設置,或者取其內容寬度。 它也接受像素值。

下面的動圖顯示了一個800px寬的容器和五個設置為 flex-basis:160px 的彈性項目。 這告訴瀏覽器:如果在理想狀態下,有足夠的空間來放置所有的項目,就遵循它們的160px寬度,并且沒有正/負可用空間;如果沒有足夠的空間的話,那么 flex-shrink 默認為1,所有項目均勻收縮; 如果有額外的空間,flex-grow 默認為0,并且剩余的空間放在最后一個項目之后。

下一個動圖展示了把項目1設置為flex-shrink:10,項目4設置為flex-grow:10。對于負自由空間,項目1的寬度減少10倍。 對于正空閑空間,第4項的寬度是其他空間的10倍。

flex-basis 也接受值 content,此時無論其寬度是否被設置,計算自由空間時所考慮的寬度依據是項目中的內容。

flex

flex 屬性是按順序排列的 flex-growflex-shrinkflex-basis 的簡寫,它接受以下預定義值:

initial:重置為 flexbox 的默認值,等同于 flex: 0 1 auto

auto:flex-items能夠根據需要增長/縮小,等同于 flex: 1 1 auto

none:固定項目,等同于 flex: 0 0 auto

flex: 1:flex-items 具有伸縮的能力,flex-basis 設置為零,等同于 flex: 1 1 0

Autoprefixer

對于跨瀏覽器的兼容性問題,設置具有具有必要前綴的屬性是非常重要的,以確保能夠支持所有瀏覽器。

手動自動為每個屬性添加前綴可能是一項非常繁瑣的任務,也使樣式很難維護。使用 Gulp 能夠替你自動執行這些任務。

為了能夠使用Gulp,我們必須將它作為依賴添加到項目當中。 這項工作是在 package.json 文件中完成的,它負責跟蹤項目依賴及其版本。 在終端中輸入下列命令來創建文件:

nmp init

系統將提示你輸入項目信息,可以一直按回車鍵直到完成。 輸出的文件內容將是這樣的:

{
  "name": "project-name",
  "version": "1.0.0",
  "description": "Project description",
  "main": "index.js",
  "scripts": { "test": "echo "Error: no test specified" && exit 1" },
  "author": "Author Name",
  "license": "ISC"
}

全局安裝gulp:

npm install gulp -g

安裝 gulp 和 gulp-autoprefixer 作為項目依賴項:

npm install gulp --save-dev
npm install gulp-autoprefixer --save-dev

它們將會出現在 package.json 文件中的 devDependencies 下。

創建一個gulpfile.js文件:

touch gulpfile.js

添加以下內容:

// gulpfile.js

var gulp = require("gulp");
var autoprefixer = require("gulp-autoprefixer");
var options = { browsers: ["last 2 versions"], cascade: false };

gulp.task("styles", function() {
  return gulp.src("./styles.css")
             .pipe(autoprefixer(options))
             .pipe(gulp.dest("build"));
});

gulp 會從 styles.css 中提取內容并通過 gulp-autoprefixer 傳遞它。 處理結果會保存在build文件夾下。

參考

What the Flexbox Course

Basic concepts of flexbox?—?25/03/2018

Mastering Wrapping of Flex Items?—?26/03/2018

Ordering Flex Items?—?26/03/2018

Aligning Items in a Flex Container?—?26/03/2018

StackOverflow?—?27/03/2018

Controlling Ratios of Flex Items Along the Main Axis?—?28/03/2018

Gulp

Gulp Autoprefixer

本文首發微信公眾號:jingchengyideng

歡迎掃描二維碼關注公眾號,每天都給你推送新鮮的前端技術文章

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/117323.html

相關文章

  • 13個幫你提高開發效率的現代CSS框架

    摘要:官網是圍繞構建的,是一個免費的開源框架。官網在壓縮后僅為,以移動優先的理念為中心。官網被稱為輕量級響應式現代化,是一個基于的框架。通過添加主題或自定義組件能夠幫你進一步開發個性化的。官網有時框架可以包含僅對其原始開發人員有意義的類名。 翻譯:瘋狂的技術宅原文:https://1stwebdesigner.com/mo... 本文首發微信公眾號:前端先鋒歡迎關注,每天都給你推送新鮮的...

    xumenger 評論0 收藏0
  • 前端每周清單半年盤點之 CSS

    摘要:前端每周清單專注前端領域內容,以對外文資料的搜集為主,幫助開發者了解一周前端熱點分為新聞熱點開發教程工程實踐深度閱讀開源項目巔峰人生等欄目。它能夠為我們提供類似于預處理器命名空間等多方面的輔助。 前端每周清單專注前端領域內容,以對外文資料的搜集為主,幫助開發者了解一周前端熱點;分為新聞熱點、開發教程、工程實踐、深度閱讀、開源項目、巔峰人生等欄目。歡迎關注【前端之巔】微信公眾號(ID:f...

    RaoMeng 評論0 收藏0
  • 【前端工程師手冊】關于flexbox的why、what和how

    摘要:如何使用首先梳理一下,將屬性分為兩類作用在容器元素上的有個,其實容器元素上還有一個設置的屬性作用在子元素上的有個當時設置布局之后,子元素的的屬性將會失效。 why——為什么使用flex 長久以來,網頁布局是一個比較難搞的地方,各種前端前輩嘔心瀝血總結了各種奇淫巧技,比如利用float和position來實現居中、兩欄、三欄等等布局。然而css并不存在一個官方的布局方案,終于一種新的布局...

    meteor199 評論0 收藏0
  • 在 JavaScript 中優雅的提取循環內的數據

    摘要:翻譯瘋狂的技術宅原文在本文中,我們將介紹兩種提取循環內數據的方法內部迭代和外部迭代。它是循環和遞歸的組合遞歸調用在行。 翻譯:瘋狂的技術宅 原文:http://2ality.com/2018/04/ext... 在本文中,我們將介紹兩種提取循環內數據的方法:內部迭代和外部迭代。 循環 舉個例子,假設有一個函數 logFiles(): const fs = require(fs); c...

    Alliot 評論0 收藏0
  • JavaScript 閉包指南

    摘要:要使用閉包,需要在另一個函數中創建一個函數,這種函數被稱為嵌套函數。只有名為閉包的功能才能對此進行訪問。結論閉包是外部函數中的變量集合,它提供對內部函數作用域的訪問以保護全局命名空間。 翻譯:瘋狂的技術宅https://medium.freecodecamp.o... 本文首發微信公眾號:前端先鋒歡迎關注,每天都給你推送新鮮的前端技術文章 閉包是函數創建時作用域內所有變量的集合。...

    MobService 評論0 收藏0

發表評論

0條評論

AdolphLWQ

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<