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

CSS-in-JS 的庫是如何工作的?

開發 前端
CSS-in-JS 的庫是如何工作的?是什么讓 Material UI 選擇了 CSS-in-JS 的方式開發組件庫?這不禁引起了筆者的好奇,于是決定探索一番,實現一個自己的 CSS-in-JS 庫。

前言

筆者近期學習 Material UI 的過程中,發現 Material UI 的組件都是使用 CSS-in-JS 的方式編寫的,聯想到之前在社區里看到過不少批判 CSS-in-JS 的文章,對此有些驚訝。

CSS-in-JS 的庫是如何工作的?是什么讓 Material UI 選擇了 CSS-in-JS 的方式開發組件庫?

這不禁引起了筆者的好奇,于是決定探索一番,實現一個自己的 CSS-in-JS 庫。

調研

目前社區中流行的 CSS-in-JS 庫主要有兩款:

  •  emotion
  •  styled-components

兩者的 API 基本一致,鑒于 emotion 的源碼中 JavaScript、Flow、TypeScript 三種代碼混在一起,閱讀起來實在是為難筆者,因此果斷放棄了學習 emotion 的念頭。

那么就以 styled-components 為學習對象,看看它是如何工作的。

styled-components 核心能力

使用方式

打開 styled-components 官方文檔[1],點擊導航欄的 Documentation[2],找到 API Reference[3] 一欄,第一個展示的就是 styled-components 的核心 API——styled,用法相信了解 React 的同學或多或少接觸過:

const Button = styled.div`
background: palevioletred;
border-radius: 3px;
border: none;
color: white;
`;
const TomatoButton = styled(Button)`
background: tomato;
`;

通過在 React 組件中使用模板字符串編寫 CSS 的形式實現一個自帶樣式的 React 組件。

抽絲剝繭

clone styled-components 的 GitHub Repo[4] 到本地,安裝好依賴后用 VS Code 打開,會發現 styled-components 是一個 monorepo,核心包與 Repo 名稱相同:

直接從 src/index.ts 開始查看源碼:

默認導出的 styled API 是從 src/constructors/styled.tsx 導出的,那么繼續向上溯源。

src/constructors/styled.tsx 中的代碼非常簡單,去掉類型并精簡后的代碼如下:
import createStyledComponent from '../models/StyledComponent';
// HTML 標簽列表
import domElements from '../utils/domElements';
import constructWithOptions from './constructWithOptions';
// 構造基礎的 styled 方法
const baseStyled = (tag) =>
constructWithOptions(createStyledComponent, tag);
const styled = baseStyled;
// 實現 HTML 標簽的快捷調用方式
domElements.forEach(domElement => {
styled[domElement] = baseStyled(domElement);
});
export default styled;

從 styled API 的入口可以得知,上面使用方法[5]一節中,示例代碼:

const Button = styled.div`
background: palevioletred;
border-radius: 3px;
border: none;
color: white;
`;

實際上與以下代碼完全一致:

const Button = styled('div')`
background: palevioletred;
border-radius: 3px;
border: none;
color: white;
`;

styled API 為了方便使用封裝了一個快捷調用方式,能夠通過 styled[HTMLElement] 的方式快速創建基于 HTML 標簽的組件。

接下來,繼續向上溯源,找到與 styled API 有關的 baseStyled 的創建方式:

const baseStyled = (tag) =>
constructWithOptions(createStyledComponent, tag);

找到 constructWithOptions 方法所在的 src/constructors/constructWithOptions.ts,去掉類型并精簡后的代碼如下:

import css from './css';
export default function constructWithOptions(componentConstructor, tag, options) {
const templateFunction = (initialStyles, ...interpolations) =>
componentConstructor(tag, options, css(initialStyles, ...interpolations));
return templateFunction;
}

精簡后的代碼變得異常簡單,baseStyled 是由 constructWithOptions 函數工廠創建并返回的。constructWithOptions 函數工廠的核心其實是 templateFunction 方法,其調用了組件的構造方法 componentConstructor,返回了一個攜帶樣式的組件。

至此,即將進入 styled-components 的核心,一起抽絲剝繭一探究竟。

核心源碼

constructWithOptions 函數工廠調用的組件構造方法 componentConstructor 是從外部傳入的,而這個組件構造方法就是整個 styled-components 的核心所在。

在上面的源碼里,baseStyled 是將 createStyledComponent 這個組件構造方法傳入 componentConstructor 后返回的 templateFunction,templateFunction 的參數就是通過模板字符串編寫的 CSS 樣式,最終會傳入組件構造方法 createStyledComponent 中。

文字描述非常混亂,畫個圖來梳理一下創建一個帶有樣式的組件的流程:

也就是說,當用戶使用 styled API 創建帶有樣式的組件時,本質上是在調用 createStyledComponent 這個組件構造函數。

createStyledComponent 的源碼在 src/models/StyledComponent.ts 中,由于源碼較為復雜,詳細閱讀需要移步 GitHub:

styled-components/StyledComponent.ts at main · styled-components/styled-components[6]

從源碼可以得知,createStyledComponent 的返回值是一個帶有樣式的組件 WrappedStyledComponent,在返回這個組件之前對其做了一些處理,大部分都是設置組件上的一些屬性,可以在查看源碼的時候暫時跳過。

從返回值向上溯源,發現 WrappedStyledComponent 是使用 React.forwardRef 創建的一個組件,這個組件調用了 useStyledComponentImpl 這個 Hook 并返回了 Hook 的返回值。

繼續從返回值向上溯源,發現 useStyledComponentImpl Hook 中的大部分代碼都是與我們了解 styled-components 是如何工作這件事情無關的代碼,都是可以在查看源碼的時候暫時跳過的部分,但是有一個 Hook 的名稱讓筆者覺得就是整個 styled-components 最核心的部分:

const generatedClassName = useInjectedStyle(
componentStyle,
isStatic,
context,
process.env.NODE_ENV !== 'production' ? forwardedComponent.warnTooManyClasses : undefined
);

在撰寫本文之前,筆者大致知道 CSS-in-JS 的庫是通過在運行時解析模板字符串并且動態創建 <style></style> 標簽將樣式插入頁面中實現的,從 useInjectedStyle Hook 的名稱來看,其行為就是動態創建 <style></style> 標簽并插入頁面中。

深入 useInjectedStyle,去掉類型并精簡后的代碼如下:

function useInjectedStyle(componentStyle, isStatic, resolvedAttrs, warnTooManyClasses) {
const styleSheet = useStyleSheet();
const stylis = useStylis();
const className = isStatic
? componentStyle.generateAndInjectStyles(EMPTY_OBJECT, styleSheet, stylis)
: componentStyle.generateAndInjectStyles(resolvedAttrs, styleSheet, stylis);
return className;
}

useInjectedStyle 調用了從參數傳入的 componentStyle 上的 generateAndInjectStyles 方法,將樣式傳入其中,返回了樣式對應的 className。

進一步查看 componentStyle,是在 createStyledComponent 中被實例化并傳入 useInjectedStyle 的:

const componentStyle = new ComponentStyle(
rules,
styledComponentId,
isTargetStyledComp ? styledComponentTarget.componentStyle : undefined
);

因此 componentStyle 上的 generateAndInjectStyles 實際上是 ComponentStyle 這個類的實例方法,對應的源碼比較長也比較復雜,詳細閱讀需要移步 GitHub,核心是對模板字符串進行解析,并將類名 hash 后返回 className:

styled-components/ComponentStyle.ts at main · styled-components/styled-components[7]

核心源碼至此就已經解析完成了,其余部分的源碼主要是為了提供更多基礎功能以外的 API,提高可用度。

solid-sc 實現

解析完 styled-components 的核心源碼后,回歸到 CSS-in-JS 出現的原因上,最重要的因素可能是 JSX 的出現,在前端領域里掀起了一股 All in JS 的浪潮,就此誕生了上文中提到的 CSS-in-JS 的庫。

那么,我們是否可以理解為 CSS-in-JS 與 JSX 屬于一個綁定關系?

無論這個問題的答案如何,至少能夠使用 JSX 語法的前端框架,都應該能夠使用 CSS-in-JS 的技術方案。

近期筆者也在研究學習 SolidJS,希望能夠參與到 SolidJS 的生態建設當中,注意到 SolidJS 社區中暫時還沒有能夠對標 emotion/styled-components 的 CSS-in-JS 庫,雖然已經有能夠滿足大部分需求的 Solid Styled Components 了:

https://github.com/solidjs/solid-styled-components[8]

但是只是會用不是筆者的追求,筆者更希望能夠嘗試自己實現一個,于是就有了 MVP 版本:

learning-styled-components/index.tsx at master · wjq990112/learning-styled-components[9]

不熟悉 SolidJS 的同學可以暫時將其當做 React 來閱讀,核心思路上文其實已經解析過了,本質上就是將組件上攜帶的樣式在運行時進行解析,給一個獨一無二的 className,然后將其塞到 <style> 標簽中。

MVP 版本中只有兩個函數:

const createClassName = (rules: TemplateStringsArray) => {
return () => {
className++;
const style = document.createElement('style');
style.dataset.sc = '';
style.textContent = `.sc-${className}{${rules[0]}}`.trim();
document.head.appendChild(style);
return `sc-${className}`;
};
};
const createStyledComponent: StyledComponentFactories = (
tag: keyof JSX.IntrinsicElements | Component
) => {
return (rules: TemplateStringsArray) => {
const StyledComponent: ParentComponent = (props) => {
const className = createClassName(rules);
const [local, others] = splitProps(props, ['children']);
return (
<Dynamic component={tag} class={className()} {...others}>
{local.children}
</Dynamic>
);
};
return StyledComponent;
};
};

兩個函數的職責也非常簡單,一個用于創建 <style> 標簽并給樣式生成一個唯一的 className,另一個用于創建經過樣式包裹的動態組件。

當然,MVP 版本要成為 SolidJS 社區中能夠對標 emotion/styled-components 的 CSS-in-JS 庫,還有非常多工作要做,比如:

  •  運行時解析不同方式傳入的 CSS 規則
  •  緩存相同組件的 className,相同組件復用樣式
  •  避免多次插入 <style> 標簽,多個組件樣式復用同一個
  •  &etc.

不過,至少開了個好頭,MVP 版本能夠跑通 styled-components 文檔中 Getting Started[10] 部分的示例:

learning-styled-components - StackBlitz[11]

MVP 版本的源代碼在 https://github.com/wjq990112/learning-styled-components 的 master 分支,如果后續時間和精力允許,會在其他分支上完善,或者單獨開一個 Repo,不管怎么樣,先挖個坑。

最后

在研究 styled-components 的過程中,我發現社區中對 CSS-in-JS 的技術方案意見非常兩極分化,喜歡的同學非常喜歡,討厭的同學也非常討厭。

筆者本人也在思考,為什么 CSS-in-JS 會這么流行,以至于 Material UI 也選擇了這樣的技術方案。

筆者認為可能有以下幾個原因:

  •  不需要 CSS 預處理器實現復雜的樣式組合
  •  不需要冗長的 CSS 規則約束 className
  •  構建產物中沒有 CSS 文件,不需要單獨引入組件樣式

但 CSS-in-JS 的技術方案弊端也比較明顯,畢竟需要在運行時解析樣式并動態插入到頁面中,而且 JS bundle 體積也會增大,加載過程會阻塞頁面渲染。

展望

目前社區內的樣式解決方案多以原子化 CSS 為主,原子化的形式能夠有效減小樣式體積,在編譯階段去掉沒有使用到的樣式,結合上文中提到的 CSS-in-JS 的技術方案的弊端,或許將 CSS-in-JS 運行時解析樣式的部分,放到編譯階段進行處理,生成由原子化的樣式組成的 CSS 文件,會是一個值得嘗試的優化方向。

責任編輯:龐桂玉 來源: 大淘寶前端技術
相關推薦

2021-02-11 09:01:32

CSS開發 SDK

2022-11-11 08:16:51

2022-11-28 08:50:13

2022-03-22 09:07:34

開發CSS技術

2023-11-01 08:36:07

CSSTailwind

2025-10-29 01:25:00

CSSJS靜態提取

2021-02-01 08:36:19

JS引擎V8

2023-01-31 16:43:31

?Node.js事件循環

2021-05-10 17:20:55

AIOps開發人員人工智能

2011-08-08 13:45:58

jQuery

2023-03-06 00:27:02

Kubernetesscheduler系統

2024-09-06 17:55:27

Springboot開發

2023-04-18 14:53:48

2010-08-02 16:56:03

ICMP協議

2023-04-18 15:09:50

2021-08-03 14:29:30

ARPANET互聯網協議TCP

2021-02-23 14:56:12

數據庫存儲索引

2020-04-21 14:00:25

HTMLCSSJS

2022-09-16 00:11:45

PyTorch神經網絡存儲

2017-11-17 09:13:31

Java注解
點贊
收藏

51CTO技術棧公眾號

国产91精品久久久| 一区二区三区四区在线播放 | a一级免费视频| 麻豆视频久久| 色婷婷一区二区三区四区| 一区二区三区四区五区精品| 亚洲国产www| 日本亚洲三级在线| 久久免费视频在线观看| 性欧美精品男男| 北条麻妃在线一区二区免费播放| 在线观看国产91| 成年人视频网站免费| aⅴ在线视频男人的天堂| 国产成人精品网址| 国产精品免费久久久久影院| 国产福利拍拍拍| 国产精品99在线观看| 国产视频亚洲视频| 国偷自产av一区二区三区麻豆| 精品肉辣文txt下载| 天天色 色综合| 小说区视频区图片区| 黄色小视频在线观看| 国产69精品久久777的优势| 91精品久久久久久久久久久久久| 欧美日韩一二三四区| 欧美午夜一区| 久久天天躁日日躁| 日本猛少妇色xxxxx免费网站| 日韩精选在线| 精品国产精品网麻豆系列| 亚洲精品在线视频播放| 成人免费毛片嘿嘿连载视频…| 欧美丝袜第一区| 美女扒开大腿让男人桶| 丝袜美女在线观看| 一区二区在线观看视频| 中文字幕一区二区三区乱码| 97在线观看免费观看高清 | 亚洲综合电影| 午夜成人免费电影| 久久精品xxx| 日韩三级电影视频| 亚洲综合另类小说| 超薄肉色丝袜足j调教99| 麻豆tv在线| 中文字幕一区二区三区不卡在线| 亚洲成人a**址| av在线免费观看网站| 久久久久久久久久电影| 欧美日韩精品不卡| 国产高清免费av在线| 国产色婷婷亚洲99精品小说| 欧美性大战久久久久| 国产精品免费播放| 欧美高清在线视频| 宅男在线精品国产免费观看| 国内精品久久久久国产| 亚洲另类在线视频| 91亚洲精品国产| 99色在线观看| 色婷婷av一区| 亚洲娇小娇小娇小| 亚洲3区在线| 精品999久久久| 国产又爽又黄无码无遮挡在线观看| 免费成人高清在线视频theav| 伊人久久大香线蕉av一区二区| 人成免费在线视频| 欧美粗暴jizz性欧美20| 91极品视频在线| 福利网址在线观看| 久久精品国产免费看久久精品| 91亚洲精品在线| 蜜臀av免费在线观看| 91香蕉视频污| 亚洲成人精品电影在线观看| 超碰在线最新| 欧美日韩在线视频一区二区| 国产一二三区av| 日韩欧美一级| 亚洲人线精品午夜| 天天操夜夜操av| 99精品国产在热久久| 国产成人精品免高潮在线观看| 中文人妻熟女乱又乱精品| 国产一区在线观看视频| 久久99精品久久久久久水蜜桃 | 91小视频网站| gogo人体一区| 国产亚洲精品成人av久久ww| 欧美三级在线免费观看| 久久久久久夜| 91综合免费在线| 日本免费一区二区三区最新| 日韩久久一区二区| 各处沟厕大尺度偷拍女厕嘘嘘| 久久av影院| 亚洲精品99久久久久中文字幕| 欧洲美熟女乱又伦| 影音先锋久久资源网| 国产精品免费福利| 亚洲欧美综合一区二区| 亚洲欧美一区二区三区孕妇| 国产成人a亚洲精v品无码| 精品国产三区在线| 视频在线亚洲| 欧美精品一区二区久久婷婷| 嘿嘿视频在线观看| 一本久久综合| 91久久极品少妇xxxxⅹ软件| √新版天堂资源在线资源| 激情av一区二区| 992tv人人草| 日韩精品dvd| 日本欧美中文字幕| 成人午夜视频一区二区播放| 最新日韩av在线| 午夜激情在线观看视频| 日韩mv欧美mv国产网站| 欧美日韩成人免费| 国产精品高潮呻吟久久久| 久久天堂av综合合色蜜桃网| av无码久久久久久不卡网站| 精品国产第一国产综合精品| 色婷婷久久av| 亚洲图片中文字幕| 国产精品沙发午睡系列990531| 国产日产欧美视频| 久久aimee| 久久青草福利网站| 成人免费视频国产免费麻豆| 一区二区三区免费在线观看| 性鲍视频在线观看| 999国产精品视频| 国产精品视频网址| 91在线观看| 欧美人体做爰大胆视频| 国产精品理论在线| 免费观看日韩电影| 亚洲精品一区二区三区樱花| 亚洲天堂1区| 中文字幕久精品免费视频| 国产精品成人久久久| 国产亚洲成av人在线观看导航 | 精品久久久久久综合日本欧美| 日本中文字幕免费在线观看| 国产精品综合一区二区三区| 久久久久久久久影视| 国产aⅴ精品一区二区四区| 欧美成人第一页| 亚洲精品久久久久久久久久| 一级中文字幕一区二区| 国产女人18毛片水真多18| 亚洲国产99| 麻豆91蜜桃| 精品久久毛片| 久久99国产精品久久久久久久久| 蜜桃在线一区二区| 欧美午夜激情视频| 国产精品久久久视频| 国产综合色在线| 日韩成人手机在线| 天天躁日日躁狠狠躁欧美| 欧美在线xxx| 国产在线三区| 日韩欧美一区在线| 日本在线观看视频网站| 91尤物视频在线观看| 日韩一级理论片| 国产精品久久久久久麻豆一区软件| 91免费国产视频| a毛片不卡免费看片| 亚洲人成电影网站色xx| 国产乱码精品一区二区| 最新热久久免费视频| 欧美一级片黄色| 免费看欧美女人艹b| 99久久久精品视频| 精品国产精品国产偷麻豆| 91精品视频专区| 僵尸再翻生在线观看免费国语| 正在播放亚洲1区| 国产91绿帽单男绿奴| 在线视频欧美精品| 欧美日韩在线视频免费| 久久久欧美精品sm网站| 午夜免费福利网站| 亚洲综合社区| 在线观看av的网址| 国产精品嫩模av在线| 91成人免费视频| 国产v综合v| 久久久久久国产精品三级玉女聊斋| 国产一区精品| 精品黑人一区二区三区久久| 中文字幕观看视频| 黄色精品一区二区| 国产精品成人免费观看| 亚洲国产激情av| xxxxxx黄色| 国内精品久久久久影院薰衣草 | 欧美在线在线| 国产精品电影网| av中文在线资源库| 久久久999成人| 国产高清免费在线播放| 亚洲精品成人久久电影| 国产麻豆一精品一男同| 欧美亚洲一区二区三区四区| 国产成人精品一区二三区| 一区二区三区在线视频观看| 亚洲精品国产精品国自| 久久综合色8888| 扒开伸进免费视频| 韩国成人福利片在线播放| 激情视频综合网| 国产日韩欧美一区| 僵尸世界大战2 在线播放| 91精品一区二区三区综合在线爱| 亚洲国产精品久久久久久女王| 夜夜躁狠狠躁日日躁2021日韩| 成人3d动漫一区二区三区91| 二区三区精品| 91在线视频导航| 久久精品xxxxx| 国产精品极品美女在线观看免费| 亚洲美女炮图| 51精品国产黑色丝袜高跟鞋| 黄色在线看片| 欧美激情免费观看| 日韩av激情| 美女视频黄免费的亚洲男人天堂| 久操视频在线播放| 日韩视频―中文字幕| 五月天婷婷在线视频| 中文字幕视频在线免费欧美日韩综合在线看| av女名字大全列表| 亚洲摸下面视频| 男操女在线观看| 亚洲欧洲av一区二区| 久久久久久久影视| 在线免费观看羞羞视频一区二区| 国产乱视频在线观看| 中文精品99久久国产香蕉| 91啦中文在线| 久久天天躁狠狠躁夜夜av| 黄av在线免费观看| 欧美国产精品va在线观看| 波多野结衣中文字幕久久| 高清一区二区三区四区五区| 国产理论在线| 国产成人精品av在线| 成人黄色图片网站| 91久久久亚洲精品| 91精品尤物| 久久久av水蜜桃| av资源久久| 最新中文字幕久久| 尹人成人综合网| avav在线看| 日本伊人精品一区二区三区观看方式| 国产原创精品在线| 国产精品一区二区黑丝| 国产精品久久久久久久无码| 26uuu色噜噜精品一区二区| 卡一卡二卡三在线观看| 亚洲素人一区二区| 久久精品欧美一区二区| 日本韩国一区二区| 国产精品国产三级国产aⅴ| 亚洲成年人影院在线| 免费在线观看一级毛片| 久久九九国产精品怡红院| 高潮在线视频| 国产色婷婷国产综合在线理论片a| 午夜精品在线| 欧洲亚洲一区二区三区四区五区| 国产精品毛片一区二区在线看| 精品国偷自产一区二区三区| 久久久久久夜| 91人妻一区二区三区| 久久久久久久综合色一本| 91久久久久久久久久久久久久 | 国产欧美日韩三级| 久久精品一区二区三区四区五区 | 亚洲精品无amm毛片| 亚洲欧美另类人妖| 在线中文免费视频| 国产成人综合亚洲| www.神马久久| 亚洲精品在线免费看| 亚洲永久在线| 国产亚洲色婷婷久久| 久久婷婷成人综合色| 久艹视频在线观看| 欧美丝袜丝nylons| 亚洲AV第二区国产精品| 久久躁日日躁aaaaxxxx| 欧美三区四区| 久久香蕉综合色| 欧美理论在线| 欧美第一页浮力影院| 91在线码无精品| 久久久久久av无码免费网站| 欧美色手机在线观看| 午夜视频免费在线| 欧美国产在线电影| 欧美视频精品| 日本一区二区三区免费观看| 国产精品毛片一区二区三区| 亚洲精品一二三四| 亚洲日本在线视频观看| 国产精品51麻豆cm传媒| 精品视频www| а√在线中文网新版地址在线| 1卡2卡3卡精品视频| 色天天久久综合婷婷女18| 日韩中文字幕二区| av中文字幕不卡| 黄色激情视频在线观看| 91精品国产91综合久久蜜臀| 日本www在线观看视频| 国产不卡在线观看| 九热爱视频精品视频| heyzo亚洲| 成人av在线资源网站| 日本少妇激情舌吻| 精品国产伦一区二区三区观看体验| 18+视频在线观看| 51成人做爰www免费看网站| 99精品在线观看| 五月婷婷之婷婷| 中文字幕一区二区三区精华液| 中文字幕一区二区人妻| 在线精品视频视频中文字幕| 国产精品蜜月aⅴ在线| 亚洲天堂电影网| 黄一区二区三区| 日韩欧美123区| 日韩午夜av电影| 欧美性猛片xxxxx免费中国 | 中文字幕欧美视频| 亚洲精品一二三区| www.精品视频| 久久久噜久噜久久综合| 久久综合另类图片小说| 黄色免费福利视频| 久久久亚洲午夜电影| 看黄色一级大片| 中文字幕无线精品亚洲乱码一区 | 久久久久国产视频| 欧美精品国产白浆久久久久| 免费黄色日本网站| 国产亚洲精品免费| 国产精品国产av| 欧美激情第三页| 婷婷精品在线| 亚洲一区二区三区四区五区xx| 国产精品夫妻自拍| 亚洲av无码乱码国产精品久久 | 久久在线中文字幕| 99在线精品观看| 免费av中文字幕| 久久久久99精品久久久久| 一区中文字幕| 欧美 日韩 国产一区| 国产精品福利在线播放| 亚洲精品国产一区二| 欧美亚洲激情视频| 99久久www免费| 天天躁日日躁狠狠躁av| 在线观看中文字幕不卡| 成人影欧美片| 久久久久久久久久久久久久久久av | av在线不卡顿| 无码人妻丰满熟妇区毛片蜜桃精品| 精品国产户外野外| 日本中文字幕在线视频| 国产精品区二区三区日本| 石原莉奈在线亚洲二区| 黄视频网站免费看| 日韩精品免费在线播放| 四虎精品在线观看| 成人中文字幕在线播放| 中文字幕亚洲电影| 天天影院图片亚洲| 91老司机在线| 日本亚洲视频在线| 国产精彩视频在线| xvideos亚洲| 亚州av一区| 欧美成人精品一区二区综合免费| 91久久奴性调教| a'aaa级片在线观看| 一区二区精品在线观看| 97久久超碰国产精品| 国产麻豆免费观看| 国产精品亚洲网站|