精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Facebook 重構:拋棄 Sass / Less ,迎接原子化 CSS 時代

新聞
隨著 Facebook 和 Twitter 最近的產品部署,我認為一個新的趨勢正在緩慢增長:Atomic CSS-in-JS。

[[375506]]

隨著 Facebook 和 Twitter 最近的產品部署,我認為一個新的趨勢正在緩慢增長:Atomic CSS-in-JS。

在這篇文章中,我們將看到什么是Atomic CSS(原子 CSS),它如何與 Tailwind CSS 這種實用工具優先的樣式庫聯系起來,目前很多大公司在 React 代碼倉庫中使用它們。

由于我不是這方面的專家,所以我不會去深入探討它的利弊。我只是希望能幫助你了解它的大致內容。

先拋出一個令人開心的結論,新的 CSS 編寫和構建方式讓 Facebook 的主頁減少了 80% 的 CSS 體積。

什么是原子 CSS?

你可能聽說過各種 CSS 方法,如 BEM, OOCSS…

  1. <button class="button button--state-danger">Danger button</button> 

現在,人們真的很喜歡 Tailwind CSS[1] 和它的 實用工具優先(utility-first)[2] 的概念。這與 Functional CSS 和 Tachyon[3] 這個庫的理念非常接近。

  1. <button 
  2.   class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded" 
  3.   Button 
  4. </button> 

用海量的實用工具類(utility classes)組成的樣式表,讓我們可以在網頁里大顯身手。

原子 CSS 就像是實用工具優先(utility-first)CSS 的一個極端版本: 所有 CSS 類都有一個唯一的 CSS 規則。原子 CSS 最初是由 Thierry Koblentz (Yahoo!)在 2013 年挑戰 CSS 最佳實踐[4]時使用的。

  1. /* 原子 CSS */ 
  2. .bw-2x { 
  3.   border-width: 2px; 
  4. .bss { 
  5.   border-style: solid; 
  6. .sans { 
  7.   font-style: sans-serif; 
  8. .p-1x { 
  9.   padding: 10px; 
  10. /* 不是原子 CSS 因為這個類包含了兩個規則 */ 
  11. .p-1x-sans { 
  12.   padding: 10px; 
  13.   font-style: sans-serif; 

使用實用工具/原子 CSS,我們可以把結構層和表示層結合起來:當我們需要改變按鈕顏色時,我們直接修改 HTML,而不是 CSS!

這種緊密耦合在現代 CSS-in-JS 的 React 代碼庫中也得到了承認,但似乎 是 CSS 世界里最先對傳統的關注點分離有一些異議。

CSS 權重也不是什么問題,因為我們使用的是最簡單的類選擇器。

我們現在通過 html 標簽來添加樣式,發現了一些有趣的事兒:

我們增加新功能的時候,樣式表的增長減緩了。

我們可以到處移動 html 標簽,并且能確保樣式也同樣生效。

我們可以刪除新特性,并且確保樣式也同時被刪掉了。

可以肯定的缺點是,html 有點臃腫。對于服務器渲染的 web 應用程序來說可能是個缺點,但是類名中的高冗余使得 gzip 可以壓縮得很好。同時它可以很好地處理之前重復的 css 規則。

一旦你的實用工具/原子 CSS 準備好了,它將不會有太大的變化或增長??梢愿行У鼐彺嫠?你可以將它附加到 vendor.css 中,重新部署的時候它也不會失效)。它還具有相當好的可移植性,可以在任意其他應用程序中使用。

實用工具/原子 CSS 的限制

實用工具/原子 CSS 看起來很有趣,但它們也帶來了一些挑戰。

人們通常手工編寫實用工具/原子 CSS,精心制定命名約定。但是很難保證這個約定易于使用、保持一致性,而且不會隨著時間的推移而變得臃腫。

這個 CSS 可以團隊協作開發并保持一致性嗎?它受巴士因子[5]的影響嗎?

巴士系數是軟件開發中關于軟件專案成員之間訊息與能力集中、未被共享的衡量指標,也有些人稱作“貨車因子”、“卡車因子”(lottery factor/truck factor)。一個專案或計劃至少失去若干關鍵成員的參與(“被巴士撞了”,指代職業和生活方式變動、婚育、意外傷亡等任意導致缺席的緣由)即導致專案陷入混亂、癱瘓而無法存續時,這些成員的數量即為巴士系數。

你還需要預先開發好一個不錯的實用工具/原子樣式表,然后才能開始開發新功能。

如果實用工具/原子 CSS 是由別人制作的,你將不得不首先學習類命名約定(即使你知道 CSS 的一切)。這種約定是有主觀性的,很可能你不喜歡它。

有時,你需要一些額外的 CSS,而實用工具/原子 CSS 并不提供這些 CSS。沒有約定好的方法來提供這些一次性樣式。

Tailwind 趕來支援

Tailwind 使用的方法是非常便捷的,并且解決了上述一些問題。

它通過 Utility-First 的理念來解決 CSS 的一些缺點,通過抽象出一組類名 -> 原子功能的集合,來避免你為每個 div 都寫一個專有的 class,然后整個網站重復寫很多重復的樣式。

傳統卡片樣式寫法:

 

Tailwind 卡片樣式寫法:

 

它并不是真的為所有網站提供一些唯一的實用工具 CSS,取而代之的是,它提供了一些公用的命名約定。通過一個配置文件[6],你可以為你的網站生成一套專屬的實用工具 CSS。

ssh 注:這里原作者沒有深入介紹,為什么說是一套命名約定呢而不是生成一些定死的 CSS 呢?

舉幾個例子讓大家感受一些,Tailwind 提供了一套強大的構建系統,比如默認情況下它提供了一些響應式的斷點值:

  1. // tailwind.config.js 
  2. module.exports = { 
  3.   theme: { 
  4.     screens: { 
  5.       'sm''640px'
  6.       // => @media (min-width: 640px) { ... } 
  7.  
  8.       'md''768px'
  9.       // => @media (min-width: 768px) { ... } 
  10.  
  11.       'lg''1024px'
  12.       // => @media (min-width: 1024px) { ... } 
  13.  
  14.       'xl''1280px'
  15.       // => @media (min-width: 1280px) { ... } 
  16.     } 
  17.   } 

你可以隨時在配置文件中更改這些斷點,比如你所需要的小屏幕 sm 可能指的是更小的 320px,那么你想要在小屏幕時候采用 flex 布局,還是照常寫 sm:flex,遵循同樣的約定,只是這個 sm 已經被你修改成適合于項目需求的值了。

在比如說,Tailwind 里的 spacing 掌管了 margin、padding、width 等各個屬性里的代表空間占用的值,默認是采用了 rem 單位,當你在配置里這樣覆寫后:

  1. // tailwind.config.js 
  2. module.exports = { 
  3.   theme: { 
  4.     spacing: { 
  5.       '1''8px'
  6.       '2''12px'
  7.       '3''16px'
  8.       '4''24px'
  9.       '5''32px'
  10.       '6''48px'
  11.     } 
  12.   } 

你再去寫 h-6(height), m-2(margin), mb-4(margin-bottom),后面數字的意義就被你改變了。

也許從桌面端換到移動端項目,這個 6 代表的含義變成了 6rem,但是這套約定卻深深的印在你的腦海里,成為你知識的一部分了。

Tailwind 的知識可以遷移到其他應用程序,即使它們使用的類名并不完全相同。這讓我想起了 React 的「一次學習,到處編寫」理念。

我看到一些用戶反饋說,Tailwind 提供的類名能覆蓋他們 90% - 95% 的需求。這個覆蓋面似乎已經足夠廣了,并不需要經常寫一次性的 CSS 了。

此時,你可能想知道為什么要使用原子 CSS 而不是 Tailwind CSS?強制執行原子 CSS 規則的一個規則,一個類名,有什么好處?你最終會得到更大的 html 標簽和更煩人的命名約定嗎?Tailwind 已經有了足夠多的原子類了啊。

那么,我們是否應該放棄原子 CSS 的想法,而僅僅使用 Tailwind CSS?

Tailwind 是一個優秀的解決方案,但仍然有一些問題沒有解決:

  • 需要學習一套主觀的命名約定
  • CSS 規則插入順序仍然很重要
  • 未使用的規則可以輕松刪除嗎?
  • 我們如何處理剩下的一次性樣式?

與 Tailwind 相比,手寫原子 CSS 可能不是最方便的。

和 CSS-in-JS 比較

CSS-in-JS 和實用工具/原子 CSS 有密切關系。這兩種方法都提倡使用標簽進行樣式化。以某種方式試圖模仿內聯樣式,這讓它們有了很多相似的特性(比如在移動某些功能的時候更有信心)。

Christopher Chedeau[7] 一直致力于推廣 React 生態系統中 CSS-in-JS 理念。在很多次演講中,他都解釋了 CSS 的問題:

 

  1. 全局命名空間
  2. 依賴
  3. 無用代碼消除
  4. 代碼壓縮
  5. 共享常量
  6. 非確定性(Non-Deterministic)解析
  7. 隔離

實用工具/原子 CSS 也解決了其中的一些問題,但也確實沒法解決所有問題(特別是樣式的非確定性解析)。

如果它們有很多相似之處,那我們能否同時使用它們呢?

探索原子 CSS-in-JS

原子 CSS-in-JS 可以被視為是“自動化的原子 CSS”:

  • 你不再需要創建一個 class 類名約定
  • 通用樣式和一次性樣式的處理方式是一樣的
  • 能夠提取頁面所需要的的關鍵 CSS,并進行代碼拆分
  • 有機會修復 JS 中 CSS 規則插入順序的問題

我想強調兩個特定的解決方案,它們最近推動了兩個大規模的原子 CSS-in-JS 的部署使用,來源于以下兩個演講。

  • React-Native-Web at Twitter (更多細節在Nicolas Gallagher 的演講[8])。
  • Stylex at Facebook (更多細節在Frank Yan 的演講[9])。

也可以看看這些庫:

  • Styletron
  • Fela
  • Style-Sheet
  • cxs
  • otion
  • css-zero
  • ui-box
  • style9
  • stitches
  • catom

React-Native-Web

React-Native-Web 是一個非常有趣的庫,讓瀏覽器也可以渲染 React-Native 原語。不過我們這里并不討論跨平臺開發(演講里有更多細節)。

作為 web 開發人員,你只需要理解 React-Native-Web 是一個常規的 CSS-in-JS 庫,它自帶一些原始的 React 組件。所有你寫 View 組件的地方,都可以用 div 替換。

React-Native-Web 的作者是 Nicolas Gallagher,他致力于開發 Twitter 移動版。他們逐漸把它部署到移動設備上,不太確定具體時間,大概在 2017/2018 年左右。

從那以后,很多公司都在用它(美國職業足球大聯盟、Flipkart、Uber、紐約時報……),但最重要的一次部署,則是由 Paul Armstrong 領導的團隊在 2019 年推出的新的 Twitter 桌面應用。

 

Stylex

Stylex 是一個新的 CSS-in-JS 庫,Facebook 團隊為了 2020 年的 Facebook 應用重構而開發它。未來可能會開源,有可能用另一個名字。

值得一提的是,React-Native-Web 的作者 Nicolas Gallagher 被 Facebook 招安。所以里面出現一些熟悉的概念一點也不奇怪。

我的所有信息都來自演講 :),還需要等待更多的細節。

可擴展性

不出所料,在 Atomic CSS 的加成下,Twitter 和 Facebook 的 CSS體積都大幅減少了,現在它的增長遵循的是對數曲線。不過,簡單的應用則會多了一些 初始體積


 

 

Facebook 分享了具體數字:

  • 舊的網站僅僅首頁就用了 413Kb 的 CSS
  • 新的網站整個站點只用了 74Kb,包括暗黑模式

 

源碼和輸出

這兩個庫的 API 看起來很相似,但也很難說,因為我們對 Stylex 了解不多。

值得強調的是,React-Native-Web 會擴展 CSS 語法糖,比如 margin: 0,會被輸出為 4 個方向的 margin 原子規則。

以一個組件為例,來看看舊版傳統 CSS 和新版原子 CSS 輸出的區別。

  1. <Component1 classNames="class1" /> <Component2 classNames="class2" /> 
  2. .class1 { 
  3.   background-color: mediumseagreen; 
  4.   cursordefault
  5.   margin-left: 0px; 
  6. .class2 { 
  7.   background-color: thistle; 
  8.   cursordefault
  9.   jusify-content: flex-start; 
  10.   margin-left: 0px; 

可以看出這兩個樣式中 cursor 和 margin-left 是一模一樣的,但它在輸出中都會占體積。

再來看看原子 CSS 的輸出:

  1. <Component1 classNames="classA classC classD" /> 
  2. <Component2 classNames="classA classB classD classE" /> 
  3. class a { 
  4.   cursordefault
  5. class b { 
  6.   background-color: mediumseagreen; 
  7. class C { 
  8.   background-color: thistle; 
  9. class D { 
  10.   margin-left: 0px; 
  11. class E { 
  12.   jusify-content: flex-start; 

可以看出,雖然標簽上的類名變多了,但是 CSS 的輸出體積會隨著功能的增多而減緩增長,因為出現過一次的 CSS Rule 就不會再重復出現了。

生產環境驗證

我們看看 Twitter 上的標簽是什么樣子的:

 

現在,讓我們來看看新 Facebook:

 

很多人可能會被嚇到,但是其實它很好用,而且保持了 可訪問性[10]。

在 Chrome 里檢查樣式可能有點難,但 devtools 里就看得很清楚了:

 

CSS 規則順序

與手寫的工具/原子 CSS 不同,JS 庫能讓樣式不依賴于 CSS 規則的插入順序。

在規則沖突的情況下,生效的不是標簽上 class attribute 中的最后一個類,而是樣式表中最后插入的規則。

 

以這張圖為例,我們期望的是書寫在后的 blue 類覆蓋前面的類,但實際上 CSS 會以樣式表中的順序來決定優先級,最后我們看到的是紅色的文字。

在實際場景中,這些庫避免在同一個元素上寫入多個規則沖突的類。它們會確保標簽上書寫在最后的類名生效。其他的被覆蓋的類名則被規律掉,甚至壓根不會出現在 DOM 上。

  1. const styles = pseudoLib.create({ 
  2.   red: {color: "red"}, 
  3.   blue: {color: "blue"}, 
  4. }); 
  5.  
  6. // 只會輸出 blue 相關的 CSS 
  7. <div style={[styles.red, styles.blue]}> 
  8.   Always blue! 
  9. </div> 
  10.  
  11. // 只會輸出 red 相關的 CSS 
  12. <div style={[styles.blue, styles.red]}> 
  13.   Always red! 
  14. </div> 

 

注意:只有使用最嚴格的原子 CSS 庫才能實現這種可預測的行為。

如果一個類里有多個 CSS 規則,并且只有其中的一個 CSS 規則被覆蓋,那么 CSS-in-JS 庫沒辦法進行相關的過濾,這也是原子 CSS 的優勢之一。

如果一個類只有一個簡單的 CSS 規則,如 margin: 0,而覆蓋的是 marginTop: 10。像 margin: 0 這樣的簡寫語法被擴展為 4 個不同的原子類,這個庫就能更加輕松的過濾掉不該出現在 DOM 上的類名。

仍然喜歡 Tailwind?

只要你熟悉所有的 Tailwind 命名約定,你就可以很高效的完成 UI 編寫。一旦你熟悉了這個設定,就很難回到手寫每個 CSS 規則的時代了,就像你寫 CSS-in-JS 那樣。

沒什么能阻止你在原子 CSS-in-JS 的框架上建立你自己的抽象 CSS 規則,Styled-system[11]就能在 CSS-in-JS 庫里完成一些類似的事情。它基于一些約定創造出一些原子規則,在 emotion 中使用它試試:

  1. import styled from '@emotion/styled'
  2. import { typography, space, color } from 'styled-system'
  3.  
  4. const Box = styled('div')(typography, space, color); 

等效于:

  1. <Box 
  2.   fontSize={4} 
  3.   fontWeight="bold" 
  4.   p={3} 
  5.   mb={[4, 5]} 
  6.   color="white" 
  7.   bg="primary" 
  8.   Hello 
  9. </Box> 

甚至有可能在 JS 里復用一些 Tailwind 的命名約定,如果你喜歡的話。

先看些 Tailwind 的代碼:

  1. <div className="absolute inset-0 p-4 bg-blue-500" /> 

 

 

 

我們在谷歌上隨便找一個方案,比如我剛剛發現 react-native-web-tailwindcss[12]:

  1. import { t } from 'react-native-tailwindcss'
  2.  
  3. <View style={[t.absolute, t.inset0, t.p4, t.bgBlue500]} />; 

就生產力的角度而言,并沒有太大的不同。甚至可以用 TS 來避免錯別字。

結論

這就是我要說的關于原子 CSS-in-JS 所有內容。

我從來沒有在任何大型生產部署中使用過原子 CSS、原子 CSS-in-JS 或 Tailwind。我可能在某些方面是錯的,請隨時糾正我。

我覺得在 React 生態系統中,原子 CSS-in-JS 是一個非常值得關注的趨勢,我希望你能從這篇文章中學到一些有用的東西。

感謝閱讀。

參考資料

[1]Tailwind CSS: https://tailwindcss.com/

[2]實用工具優先(utility-first): https://tailwindcss.com/docs/utility-first

[3]Tachyon: https://github.com/tachyons-css/tachyons

[4]挑戰 CSS 最佳實踐: https://www.smashingmagazine.com/2013/10/challenging-css-best-practices-atomic-approach/

[5]巴士因子: https://zh.wikipedia.org/wiki/%E5%B7%B4%E5%A3%AB%E5%9B%A0%E5%AD%90

[6]配置文件: https://tailwindcss.com/docs/configuration

[7]Christopher Chedeau: https://twitter.com/vjeux

[8]Nicolas Gallagher 的演講: https://www.youtube.com/watch?v=tFFn39lLO-U

[9]Frank Yan 的演講: https://www.youtube.com/watch?v=9JZHodNR184

[10]可訪問性: https://github.com/necolas/react-native-web/blob/master/packages/docs/src/guides/accessibility.stories.mdx

[11]Styled-system: https://styled-system.com/

[12]react-native-web-tailwindcss: https://www.npmjs.com/package/react-native-web-tailwindcss

本文轉載自微信公眾號「前端從進階到入院」,可以通過以下二維碼關注。轉載本文請聯系前端從進階到入院公眾號。

 

責任編輯:武曉燕 來源: 前端從進階到入院
相關推薦

2013-08-20 18:18:55

CSS模塊化Normalize.c

2013-02-18 11:12:49

LESSSASSStylus

2012-08-02 09:18:05

LESSSassCSS

2011-08-05 16:40:56

Informatica大數據

2022-09-23 09:02:16

數字化轉型AIOps

2016-08-26 12:45:31

華為廣域網敏捷廣域

2015-07-14 11:01:39

CSS科技公司

2022-01-12 14:05:58

Sass代編譯器 css

2012-10-16 16:48:28

萬兆銅纜綜合布線

2013-08-29 11:21:05

大數據

2016-10-19 22:16:30

云計算云技術

2017-02-16 16:12:09

2012-10-17 17:08:09

布線以太網虛擬化技術

2020-12-01 07:01:41

CSS工具重構

2014-08-11 13:50:10

交通大數據浪潮

2011-06-28 14:22:22

H3C數據中心虛擬化

2024-04-12 08:32:03

JSAI機器學習

2023-12-13 12:41:59

原生CSS元素
點贊
收藏

51CTO技術棧公眾號

免费日韩视频在线观看| 久久精品国产一区二区三区日韩| 神马久久精品综合| 一区二区亚洲视频| 一本大道av伊人久久综合| 五月天丁香综合久久国产| 99草在线视频| 久久青草久久| 欧美人交a欧美精品| 自拍视频一区二区| 24小时成人在线视频| 亚洲成年人影院| 水蜜桃一区二区三区| 亚洲精品一级片| 日韩高清在线不卡| 97色在线播放视频| 蜜臀av午夜精品久久| 伊甸园亚洲一区| 日韩精品一区二区三区视频在线观看| wwwxxx黄色片| 91色在线看| 中文字幕综合网| 青青草原成人| 丁香六月色婷婷| 国精产品一区一区三区mba桃花| 午夜精品视频网站| 久久精品黄色片| 日韩免费av| 亚洲毛茸茸少妇高潮呻吟| 免费人成视频在线播放| 国产成+人+综合+亚洲欧美| 精品久久久久久久久久国产| 毛片在线视频观看| 色综合久久影院| 国产亚洲精品久| 精品乱码一区二区三区| 精品国自产拍在线观看| 久久精品国产999大香线蕉| 日本成人精品在线| 日韩欧美中文字幕一区二区| 欧美在线观看天堂一区二区三区| 日韩中文字幕视频在线| 中文字幕免费在线看线人动作大片| 国内精品国产成人国产三级粉色| 欧美一级在线视频| 亚洲综合欧美在线| 国产一区二区精品调教| 欧美伊人久久久久久久久影院 | 亚洲一区国产精品| 国产又粗又大又爽视频| 久久99精品久久久久| 国产精品久久久久久av福利软件| 亚洲视频 欧美视频| 麻豆精品网站| 国产黑人绿帽在线第一区| 中文字幕视频网| 乱人伦精品视频在线观看| 欧美诱惑福利视频| 亚洲国产成人无码av在线| 午夜在线精品| 国产精品美乳在线观看| 中文字幕视频在线播放| 极品美女销魂一区二区三区| 成人欧美一区二区三区黑人| av中文字幕观看| 国产乱码精品1区2区3区| 91久久精品一区二区别| 丰满少妇在线观看bd| 99久久久无码国产精品| 久久综合九色欧美狠狠| 国产一区二区三区福利| 国产精品成人免费精品自在线观看| 亚洲一区二区三区精品在线观看| 国产精品久久久久久福利| 一区二区三区在线观看国产| 久久艹国产精品| 在线观看欧美日韩电影| 欧洲一区二区三区在线| 青青草原国产在线视频| 无人区乱码一区二区三区| 亚洲国产精品yw在线观看| 五级黄高潮片90分钟视频| 成人激情诱惑| 色综合视频网站| 99久久久久久久久| 韩国理伦片一区二区三区在线播放| 亚洲va久久久噜噜噜久久天堂| 亚洲欧美国产高清va在线播放| 91视视频在线观看入口直接观看www | 一级黄色a毛片| 国产精品一级黄| 女人一区二区三区| 黄色网页在线播放| 午夜私人影院久久久久| 亚洲高清在线免费观看| 秋霞影院一区| 亚洲视频精品在线| 婷婷在线精品视频| 久久亚洲精品伦理| 91免费看网站| 在线免费看av| 黄色一区二区在线观看| 国产成人在线综合| 首页亚洲中字| 久久99久国产精品黄毛片入口 | 欧美日韩激情一区二区| 国产精品入口麻豆| 久久亚洲专区| 欧美在线性爱视频| 亚洲va欧美va| 国产精品国产三级国产三级人妇| 日本中文字幕网址| 精品国产亚洲一区二区在线观看| 亚洲网站视频福利| 日韩欧美视频在线免费观看| 九色综合狠狠综合久久| 欧美视频小说| 98色花堂精品视频在线观看| 欧美一级在线观看| 一二三四在线观看视频| 久久精品卡一| 精品人伦一区二区三区| 欧洲性视频在线播放| 欧美日高清视频| 亚洲精品国产一区黑色丝袜| 亚洲日本国产| 超碰97国产在线| 超碰caoporn久久| 欧美视频三区在线播放| 中文字幕被公侵犯的漂亮人妻| 亚洲清纯自拍| 国产日韩精品推荐| 色yeye免费人成网站在线观看| 欧美日韩亚洲国产综合| 精品少妇人妻一区二区黑料社区| 亚洲国产午夜| 高清一区二区三区视频| 中文字幕在线观看网站| 5858s免费视频成人| 国产亚洲精品久久久久久豆腐| 久久国产免费| 女女同性女同一区二区三区91| 色老头在线一区二区三区| 精品国产3级a| 国产无精乱码一区二区三区| 高清视频一区二区| 成人在线观看毛片| 中文字幕区一区二区三| 欧美大码xxxx| 六月丁香综合网| 亚洲国产综合色| 一女三黑人理论片在线| 亚洲另类视频| 欧美一二三四五区| 日韩一区二区三区免费视频| 色妞欧美日韩在线| 国产精品一区二区人人爽| 日韩码欧中文字| 波多野结衣电影免费观看| 欧美激情第二页| 国产专区一区二区三区| 中日韩脚交footjobhd| 亚洲美腿欧美激情另类| 在线免费观看av网址| 中文av字幕一区| www激情五月| 精品9999| 日本视频一区二区不卡| 国产情侣一区二区三区| 中文字幕亚洲欧美日韩在线不卡| 一区二区精品视频在线观看| 亚洲美女区一区| 日韩av无码一区二区三区不卡| 99在线精品视频在线观看| 色一情一乱一伦一区二区三欧美| 日韩免费在线电影| 欧美交受高潮1| 免费一级在线观看播放网址| 欧美色手机在线观看| 1024手机在线视频| 91丨porny丨国产| 午夜啪啪小视频| 亚洲国产裸拍裸体视频在线观看乱了中文| 麻豆传媒一区二区| 日韩免费在线电影| 国语对白做受69| av在线天堂播放| 亚洲成人精品视频在线观看| 中文天堂在线资源| 亚洲综合色成人| 青娱乐国产视频| 大桥未久av一区二区三区中文| 亚洲色图38p| 欧美午夜影院| 天天综合狠狠精品| 成人午夜网址| 国产精品专区h在线观看| 青春草在线免费视频| 在线看福利67194| 色屁屁草草影院ccyycom| 精品视频123区在线观看| 欧美日韩中文视频| 国产精品国产三级国产普通话蜜臀 | 97色婷婷成人综合在线观看| 国内精品一区二区三区| 幼a在线观看| 日韩久久精品成人| www.看毛片| 欧美日韩在线综合| 日本在线小视频| 亚洲精品免费在线观看| 日本丰满少妇裸体自慰| 激情五月激情综合网| 日本毛片在线免费观看| 午夜电影亚洲| 尤物国产精品| jvid福利在线一区二区| 激情伦成人综合小说| 欧美成人精品午夜一区二区| 国产精品视频99| 成人短视频app| 高清一区二区三区日本久| 国产乱色在线观看| 综合网中文字幕| 麻豆国产在线播放| 亚洲精品v天堂中文字幕| 朝桐光av在线一区二区三区| 欧美日韩国产综合视频在线观看| 中文字幕一区在线播放| 亚洲午夜久久久久中文字幕久| 免费国产羞羞网站美图| 国产精品久久久久久福利一牛影视| 波多野结衣a v在线| 99精品视频中文字幕| 亚洲美女精品视频| 国产mv日韩mv欧美| 欧美一级免费在线| 狠狠色综合日日| 91网址在线观看精品| 国产在线播放一区| 中文字幕精品一区二区三区在线| 蜜臀精品一区二区三区在线观看 | www.亚洲激情| 一本久久精品一区二区| 亚洲天堂av片| 色综合久久综合| 国产精品一区无码| 日本丶国产丶欧美色综合| 国产成人无码一区二区在线播放| 婷婷综合久久一区二区三区| 日韩在线观看第一页| 精品久久久久久| 久草视频一区二区| 在线免费av一区| 亚洲一级特黄毛片| 69堂国产成人免费视频| www.av黄色| 亚洲成人中文字幕| 毛片网站在线| 最新国产精品拍自在线播放| 美女黄视频在线观看| 欧美成人在线免费| missav|免费高清av在线看| 97视频在线观看视频免费视频 | 波多野结衣先锋影音| 91免费精品国自产拍在线不卡| 国产精品揄拍100视频| 国产清纯白嫩初高生在线观看91 | 舐め犯し波多野结衣在线观看| 国产三级欧美三级日产三级99 | 国产精品免费久久久久影院| 日韩一区二区三区四区五区 | 亚洲精品国产成人久久av盗摄| 激情四射综合网| 精品国产31久久久久久| av手机天堂网| 91精品综合久久久久久| 欧美视频xxx| 亚洲网站在线观看| 黄网站在线播放| 性色av一区二区三区| 欧美free嫩15| 99久热re在线精品996热视频 | 亚洲精品理论电影| 岛国最新视频免费在线观看| 另类少妇人与禽zozz0性伦| 51精品视频| 国产精品中文字幕在线观看| 99re8这里有精品热视频免费 | 91久久精品在线| 久久香蕉精品香蕉| 一本久道久久综合狠狠爱亚洲精品| 欧美有码视频| 亚洲一区二区三区四区五区xx| 国产一区二区成人久久免费影院| 亚洲av片不卡无码久久| 亚洲天堂av一区| 69视频免费在线观看| 欧美一级淫片007| 久热av在线| 久久久久久久香蕉网| 日韩成人在线电影| 久久青青草原一区二区| 欧美影院一区| 日本中文字幕高清| av在线不卡电影| 国产精品久久久精品四季影院| 91久久精品国产91性色tv| 丰满岳乱妇国产精品一区| 中文字幕欧美日韩精品| 国产免费拔擦拔擦8x在线播放| 91亚洲精品视频| 国产成人调教视频在线观看| 成人一区二区免费视频| 激情五月播播久久久精品| 国产在线综合视频| 图片区小说区国产精品视频| 国产wwwwwww| 日韩视频亚洲视频| 九九热线视频只有这里最精品| 国产精品嫩草在线观看| 一本到12不卡视频在线dvd| 丰满少妇在线观看| 99久久精品国产一区二区三区 | 国内综合精品午夜久久资源| 激情 小说 亚洲 图片: 伦| 91视频在线看| 色婷婷av国产精品| 亚洲国产天堂久久综合| 国产极品人妖在线观看| av成人综合网| 欧美理论在线| 免费观看黄网站| 亚洲私人黄色宅男| 国产又粗又猛又黄| 日韩中文字幕免费视频| 国产激情欧美| 亚洲黄色成人久久久| 日本视频一区二区三区| 少妇无套高潮一二三区| 在线观看亚洲专区| 国产一级在线| 国产精品激情av电影在线观看| 亚洲婷婷影院| 熟女人妇 成熟妇女系列视频| 91麻豆免费看| 天天爱天天做天天爽| 亚洲欧美日韩图片| 一区一区三区| 青娱乐一区二区| 日韩av在线免费观看不卡| 人妻视频一区二区| 欧美体内she精视频| 国产裸舞福利在线视频合集| 国产成人精品一区二区| 成人免费a**址| 日本中文字幕精品—区二区| 中文字幕亚洲区| 99热这里只有精品9| 欧美日韩xxx| 欧美jizz19性欧美| 黄色片视频在线播放| 中文一区二区在线观看| 一区二区三区免费观看视频| 不卡中文字幕av| 国产成人精品福利| 免费在线激情视频| 国产亚洲欧美中文| 97超碰中文字幕| 欧美激情亚洲国产| 婷婷亚洲精品| 日本超碰在线观看| 一二三区精品福利视频| 亚洲人成色777777精品音频| 国产精品久久久久久久7电影 | 美女999久久久精品视频| 超碰在线一区| 亚洲精品视频导航| 亚洲男女毛片无遮挡| 手机av在线免费观看| 国产精品久久久久久婷婷天堂| 亚洲乱码精品| 国产艳俗歌舞表演hd| 精品视频在线视频| 丝袜在线视频| 日韩欧美精品一区二区三区经典| 国产综合久久久久影院| 亚洲第一精品在线观看| 色婷婷**av毛片一区| 51社区在线成人免费视频| 亚洲欧美另类动漫| 一区二区三区**美女毛片| 韩国三级在线观看久| 91av一区二区三区| 日韩电影在线看| 豆国产97在线 | 亚洲| 中文字幕视频在线免费欧美日韩综合在线看 | 日韩视频一区二区| 美女福利一区二区| 中文字幕日韩精品无码内射|