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

現代 CSS 高階技巧,不規則邊框解決方案

開發 前端
在這一篇中,我們將繼續探索,嘗試使用 CSS Painting API,去實現過往 CSS 中非常難以實現的一個點,那就是如何繪制不規則圖形的邊框。

本文是 CSS Houdini 之 CSS Painting API 系列第四篇。

  • 現代 CSS 之高階圖片漸隱消失術[1]
  • 現代 CSS 高階技巧,像 Canvas 一樣自由繪圖構建樣式![2]
  • 現代 CSS 高階技巧,完美的波浪進度條效果![3]

在上三篇中,我們詳細介紹了 CSS Painting API 是如何一步一步,實現自定義圖案甚至實現動畫效果的!

在這一篇中,我們將繼續探索,嘗試使用 CSS Painting API,去實現過往 CSS 中非常難以實現的一個點,那就是如何繪制不規則圖形的邊框。

CSS Painting API

再簡單快速的過一下,什么是 CSS Painting API。

CSS Painting API 是 CSS Houdini 的一部分。而 Houdini 是一組底層 API,它們公開了 CSS 引擎的各個部分,從而使開發人員能夠通過加入瀏覽器渲染引擎的樣式和布局過程來擴展 CSS。Houdini 是一組 API,它們使開發人員可以直接訪問 CSS 對象模型[4] (CSSOM),使開發人員可以編寫瀏覽器可以解析為 CSS 的代碼,從而創建新的 CSS 功能,而無需等待它們在瀏覽器中本地實現。

CSS Paint API 目前的版本是 CSS Painting API Level 1[5]。它也被稱為 CSS Custom Paint 或者 Houdini's Paint Worklet。

我們可以把它理解為 JS In CSS,利用 JavaScript Canvas 畫布的強大能力,實現過往 CSS 無法實現的功能。

過往 CSS 實現不規則圖形的邊框方式

CSS 實現不規則圖形的邊框,一直是 CSS 的一個難點之一。在過往,雖然我們有很多方式利用 Hack 出不規則圖形的邊框,我在之前的多篇文章中有反復提及過:

我們來看看這樣一個圖形:

圖片

利用 CSS 實現這樣一個圖形是相對簡單的,可以利用 mask 或者 background 中的漸變實現,像是這樣:

<div class="arrow-button"></div>
.arrow-button {
position: relative;
width: 180px;
height: 64px;
background: #f49714;

&::after {
content: "";
position: absolute;
width: 32px;
height: 64px;
top: 0;
right: -32px;
background:
linear-gradient(-45deg, transparent 0, transparent 22px, #f49714 22px, #f49714 100%),
linear-gradient(-135deg, transparent 0, transparent 22px, #f49714 22px, #f49714 100%);
background-size: 32px 32px;
background-repeat: no-repeat;
background-position: 0 bottom, 0 top;
}
}

但是,如果,要實現這個圖形,但是只有一層邊框,利用 CSS 就不那么好實現了,像是這樣:

圖片

在過往,有兩種相對還不錯的方式,去實現這樣一個不規則圖形的邊框:

  1. 借助 filter,利用多重drop-shadow()。
  2. 借助 SVG 濾鏡實現。

我們快速回顧一下這兩個方法。

借助 filter,利用多重 drop-shadow() 實現不規則邊框

還是上面的圖形,我們利用多重 drop-shadow(),可以大致的得到它的邊框效果。代碼如下:

div {
position: relative;
width: 180px;
height: 64px;
background: #fff;

&::after {
content: "";
position: absolute;
width: 32px;
height: 64px;
top: 0;
right: -32px;
background:
linear-gradient(-45deg, transparent 0, transparent 22px, #fff 22px, #fff 100%),
linear-gradient(-135deg, transparent 0, transparent 22px, #fff 22px, #fff 100%);
background-size: 32px 32px;
background-repeat: no-repeat;
background-position: 0 bottom, 0 top;
}
}
div {
filter:
drop-shadow(0px 0px .5px #000)
drop-shadow(0px 0px .5px #000)
drop-shadow(0px 0px .5px #000);
}

可以看到,這里我們通過疊加 3 層 drop-shadow(),來實現不規則圖形的邊框,雖然 drop-shadow() 是用于生成陰影的,但是多層值很小的陰影疊加下,竟然有了類似于邊框的效果:

圖片

借助 SVG 濾鏡實現實現不規則邊框

另外一種方式,需要掌握比較深的 SVG 濾鏡知識。通過實現一種特殊的 SVG 濾鏡,再通過 CSS 的 filter 引入,實現不規則邊框。

看看代碼:

<div></div>

<svg width="0" height="0">
<filter id="outline">
<feMorphology in="SourceAlpha" result="DILATED" operator="dilate" radius="1"></feMorphology>
<feMerge>
<feMergeNode in="DILATED" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
</svg>
div {
position: relative;
width: 180px;
height: 64px;
background: #fff;

&::after {
content: "";
position: absolute;
width: 32px;
height: 64px;
top: 0;
right: -32px;
background:
linear-gradient(-45deg, transparent 0, transparent 22px, #fff 22px, #fff 100%),
linear-gradient(-135deg, transparent 0, transparent 22px, #fff 22px, #fff 100%);
background-size: 32px 32px;
background-repeat: no-repeat;
background-position: 0 bottom, 0 top;
}
}
div {
filter: url(#outline);
}

簡單淺析一下這段 SVG 濾鏡代碼:

  1. <feMorphology in="SourceAlpha" result="DILATED" operator="dilate" radius="1"></feMorphology> 將原圖的不透明部分作為輸入,采用了 dilate 擴張模式且程度為 radius="1",生成了一個比原圖大 1px 的黑色圖塊。
  2. 使用 feMerge 將黑色圖塊和原圖疊加在一起。
  3. 可以通過控制濾鏡中的 radius="1" 來控制邊框的大小。

這樣,也可以實現不規則圖形的邊框效果:

圖片

CodePen Demo -- 3 ways to achieve unregular border[8]。

利用 CSS Painting API 實現不規則邊框

那么,到了今天,利用 CSS Painting API ,我們有了一種更為直接的方式,更好的解決這個問題。

還是上面的圖形,我們利用 clip-path 來實現一下。

<div></div>
div {
position: relative;
width: 200px;
height: 64px;
background: #f49714;
clip-path: polygon(85% 0%, 100% 50%, 85% 100%, 0% 100%, 0% 0%;);
}

我們可以得到這樣一個圖形:

圖片

當然,本文的主角是 CSS Painting API,既然我們有 clip-path 的參數,其實完全也可以利用 CSS Painting API 的 borderDraw 來繪制這個圖形。

我們嘗試一下,改造我們的代碼:

<div></div>
<script>
if (CSS.paintWorklet) {
CSS.paintWorklet.addModule('/CSSHoudini.js');
}
</script>
div {
position: relative;
width: 200px;
height: 64px;
background: paint(borderDraw);
--clipPath: 85% 0%, 100% 50%, 85% 100%, 0% 100%, 0% 0%;);
}

這里,我們將原本的 clip-path 的具體路徑參數,定義為了一個 CSS 變量 --clipPath,傳入我們要實現的 borderDraw 方法中。整個圖形效果,就是要利用 background: paint(borderDraw) 繪制出來。

接下來,看看,我們需要實現 borderDraw。核心的點在于,我們通過拿到 --clipPath 參數,解析它,然后通過循環函數利用畫布把這個圖形繪制出來。

// CSSHoudini.js 文件
registerPaint(
"borderDraw",
class {
static get inputProperties() {
return ["--clipPath"];
}

paint(ctx, size, properties) {
const { width, height } = size;
const clipPath = properties.get("--clipPath");
const paths = clipPath.toString().split(",");
const parseClipPath = function (obj) {
const x = obj[0];
const y = obj[1];
let fx = 0,
fy = 0;
if (x.indexOf("%") > -1) {
fx = (parseFloat(x) / 100) * width;
} else if (x.indexOf("px") > -1) {
fx = parseFloat(x);
}
if (y.indexOf("%") > -1) {
fy = (parseFloat(y) / 100) * height;
} else if (y.indexOf("px") > -1) {
fy = parseFloat(y);
}
return [fx, fy];
};

var p = parseClipPath(paths[0].trim().split(" "));
ctx.beginPath();
ctx.moveTo(p[0], p[1]);
for (var i = 1; i < paths.length; i++) {
p = parseClipPath(paths[i].trim().split(" "));
ctx.lineTo(p[0], p[1]);
}
ctx.closePath();
ctx.fill();
}
}
);

簡單解釋一下上述的代碼,注意其中最難理解的 parseClipPath() 方法的解釋。

  1. 首先我們,通過properties.get("--clipPath"),我們能夠拿到傳入的 --clipPath 參數。
  2. 通過spilt() 方法,將 --clipPath 分成一段段,也就是我們的圖形實際的繪制步驟。
  3. 這里有一點非常重要,也就是parseClipPath() 方法,由于我們的 -clipPath 的每一段可能是 100% 50% 這樣的構造,但是實際在繪圖的過程中,我們需要的實際坐標的絕對值,譬如在一個 100 x 100 的畫布上,我們需要將 50% 50% 的百分比坐標,轉化為實際的 50 50 這樣的絕對值。
  4. 在理解了parseClipPath() 后,剩下的就都非常好理解了,我們通過 ctx.beginPath()、ctx.move、ctx.lineTo 以及 ctx.closePath() 將整個 --clipPath 的圖形繪制出來。
  5. 最后,利用ctx.fill() 給圖形上色。

這樣,我們就得到了這樣一個圖形:

圖片

都拿到了完整的圖形了,那么我們只給這個圖形繪制邊框,不上色,不就得到了它的邊框效果了嗎?

簡單改造一些 JavaScript 代碼的最后部分:

// CSSHoudini.js 文件
registerPaint(
"borderDraw",
class {
static get inputProperties() {
return ["--clipPath"];
}
paint(ctx, size, properties) {
// ...
ctx.closePath();
// ctx.fill();
ctx.lineWidth = 1;
ctx.strokeStyle = "#000";
ctx.stroke();
}
}
);

這樣,我們就得到了圖形的邊框效果:

圖片

僅僅利用 background 繪制的缺陷

但是,僅僅利用 [bacg](background: paint(borderDraw "bacg")) 來繪制邊框效果,會有一些問題。

上述的圖形,我們僅僅賦予了 1px 的邊框,如果我們把邊框改成 5px 呢?看看會發生什么?

// CSSHoudini.js 文件
registerPaint(
"borderDraw",
class {
static get inputProperties() {
return ["--clipPath"];
}
paint(ctx, size, properties) {
// ...
ctx.lineWidth = 5;
ctx.strokeStyle = "#000";
ctx.stroke();
}
}
);

此時,整個圖形會變成:

圖片

可以看到,沒有展示完整的 5px 的邊框,這是由于整個畫布只有元素的高寬大小,而上述的代碼中,元素的邊框有一部分繪制到了畫布之外,因此,整個圖形并非我們期待的效果。

因此,我們需要換一種思路解決這個問題,繼續改造一下我們的代碼,僅僅需要改造 CSS 代碼即可:

div {
position: relative;
width: 200px;
height: 64px;
margin: auto;
clip-path: polygon(var(--clipPath));
--clipPath: 85% 0%, 100% 50%, 85% 100%, 0% 100%, 0% 0%;

&::before {
content:"";
position:absolute;
inset: 0;
mask: paint(borderDraw);
background: #000;
}
}

這里,我們的元素本身,還是利用了 clip-path: polygon(var(--clipPath)) 剪切了自身,同時,我們借助了一個偽元素,利用這個偽元素去實現具體的邊框效果。

這里其實用了一種內外切割的思想,去實現的邊框效果:

  1. 利用父元素的clip-path: polygon(var(--clipPath)) 剪切掉外圍的圖形。
  2. 利用給偽元素的 mask 作用實際的paint(borderDraw) 方法,把圖形的內部鏤空,只保留邊框部分。

還是設置 ctx.lineWidth = 5,再看看效果:

圖片

看上去不錯,但是實際上,雖然設置了 5px 的邊框寬度,但是實際上,上圖的邊框寬度只有 2.5px 的,這是由于另外一點一半邊框實際上被切割掉了。

因此,我們如果需要實現 5px 的效果,實際上需要 ctx.lineWidth =10。

當然,我們可以通過一個 CSS 變量來控制邊框的大小:

div {
position: relative;
width: 200px;
height: 64px;
margin: auto;
clip-path: polygon(var(--clipPath));
--clipPath: 85% 0%, 100% 50%, 85% 100%, 0% 100%, 0% 0%;
--borderWidth: 5;

&::before {
content:"";
position:absolute;
inset: 0;
mask: paint(borderDraw);
background: #000;
}
}

在實際的 borderDraw 函數中,我們將傳入的 --borderWidth 參數,乘以 2 使用就好:


registerPaint(
"borderDraw",
class {
static get inputProperties() {
return ["--clipPath", "--borderWidth"];
}
paint(ctx, size, properties) {
const borderWidth = properties.get("--borderWidth");
// ...
ctx.lineWidth = borderWidth * 2;
ctx.strokeStyle = "#000";
ctx.stroke();
}
}
);

這樣,我們每次都能得到我們想要的邊框長度:

圖片

CodePen Demo -- CSS Hudini & Unregular Custom Border[9]。

到這里,整個實現就完成了,整個過程其實有多處非常關鍵的點,會有一點點難以理解,具體可能需要自己實際調試一遍找到實現的原理。

具體應用

在掌握了上述的方法后,我們就可以利用這個方式,實現各類不規則圖形的邊框效果,我們只需要傳入對于的 ??clip-path?? 參數以及我們想要的邊框長度即可。

好,這樣,我們就能實現各類不同的不規則圖形的邊框效果了。

像是這樣:

div {
position: relative;
width: 200px;
height: 200px;
clip-path: polygon(var(--clipPath));
--clipPath: 0% 15%, 15% 15%, 15% 0%, 85% 0%, 85% 15%, 100% 15%, 100% 85%, 85% 85%, 85% 100%, 15% 100%, 15% 85%, 0% 85%;
--borderWidrh: 1;
--color: #000;

&::before {
content:"";
position:absolute;
inset: 0;
mask: paint(borderDraw);
background: var(--color);
}
}

div:nth-child(2) {
--clipPath: 50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%;
--borderWidrh: 2;
--color: #ffcc00;
}
div:nth-child(3) {
--clipPath: 90% 58%90% 58%, 69% 51%, 69% 51%, 50% 21%, 50% 21%, 39% 39%, 39% 39%, 15% 26%, 15% 26%, 15% 55%, 15% 55%, 31% 87%, 31% 87%, 14% 84%, 14% 84%, 44% 96%, 44% 96%, 59% 96%, 59% 96%, 75% 90%, 75% 90%, 71% 83%, 71% 83%, 69% 73%, 69% 73%, 88% 73%, 88% 73%, 89% 87%, 89% 87%, 94% 73%, 94% 73%;
--borderWidrh: 1;
--color: deeppink;
}
div:nth-child(4) {
--clipPath: 0% 0%, 100% 0%, 100% 75%, 75% 75%, 75% 100%, 50% 75%, 0% 75%;
--borderWidrh: 1;
--color: yellowgreen;
}
div:nth-child(5) {
--clipPath: 20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%;
--borderWidrh: 3;
--color: #c7b311;
}

得到不同圖形的邊框效果:

圖片

CodePen Demo -- CSS Hudini & Unregular Custom Border[10]。

又或者是基于它們,去實現各類按鈕效果,這種效果在以往使用 CSS 是非常非常難實現的:

圖片

它們的核心原理都是一樣的,甚至加上 Hover 效果,也是非常的輕松:

圖片

完整的代碼,你可以戳這里:CodePen Demo -- https://codepen.io/Chokcoco/pen/ExRLqdO[11]。

至此,我們再一次利用 CSS Painting API 實現了我們過往 CSS 完全無法實現的效果。這個也就是 CSS Houdini 的魅力,是 JS In CSS 的魅力。

兼容性?

好吧,其實上一篇文章也談到了兼容問題,因為可能有很多看到本篇文章并沒有去翻看前兩篇文章的同學。那么,CSS Painting API 的兼容性到底如何呢?

CanIUse - registerPaint[12] 數據如下(截止至 2022-11-23):

圖片

Chrome 和 Edge 基于 Chromium[13] 內核的瀏覽器很早就已經支持,而主流瀏覽器中,Firefox 和 Safari 目前還不支持。

CSS Houdini 雖然強大,目前看來要想大規模上生產環境,仍需一段時間的等待。讓我們給時間一點時間!

最后

好了,本文到此結束,希望本文對你有所幫助 :)

參考資料

[1]現代 CSS 之高階圖片漸隱消失術: https://juejin.cn/post/7167160342101884935?。

[2]現代 CSS 高階技巧,像 Canvas 一樣自由繪圖構建樣式!: https://juejin.cn/post/7168984450230353950?。

[3]現代 CSS 高階技巧,完美的波浪進度條效果!: https://juejin.cn/post/7170868201645932551?。

[4]CSS 對象模型: https://developer.mozilla.org/zh-CN/docs/Web/API/CSS_Object_Model?。

[5]CSS Painting API Level 1: https://drafts.css-houdini.org/css-paint-api/#paintworkletglobalscope?。

[6]有意思!不規則邊框的生成方案: https://github.com/chokcoco/iCSS/issues/106?。

[7]CSS 奇技淫巧 | 巧妙實現文字二次加粗再加邊框: https://github.com/chokcoco/iCSS/issues/145?。

[8]CodePen Demo -- 3 ways to achieve unregular border: https://codepen.io/Chokcoco/pen/oNyyNQd?。

[9]CodePen Demo -- CSS Hudini & Unregular Custom Border: https://codepen.io/Chokcoco/pen/MWXXYgJ?。

[10]CodePen Demo -- CSS Hudini & Unregular Custom Border: https://codepen.io/Chokcoco/pen/KKeROeX?。

[11]CodePen Demo -- https://codepen.io/Chokcoco/pen/ExRLqdO: https://codepen.io/Chokcoco/pen/ExRLqdO?。

[12]CanIUse - registerPaint: https://caniuse.com/?search=registerPaint?。

[13]Chromium: https://www.google.com.hk/search?newwindow=1&rlz=1C5GCEM_enCN988CN988&q=Chromium&spell=1&sa=X&ved=2ahUKEwi3he2ensL7AhVaSmwGHdnzBxgQkeECKAB6BAgoEAE?。

責任編輯:姜華 來源: iCSS前端趣聞
相關推薦

2022-04-07 07:31:30

CSSCSS Reset前端

2023-09-11 07:11:04

CSSNesting

2022-04-19 06:27:13

CSS數學函數calc

2021-03-30 07:47:46

SVG 濾鏡 CSS技巧

2022-04-28 07:00:09

min()max()clamp()

2010-09-14 10:34:17

DIV CSS

2010-09-08 17:20:42

CSS

2022-12-13 07:41:43

CSSCSS Houdi

2021-02-22 18:08:38

農業物聯網IOT

2023-05-15 08:18:21

CSS技巧代碼

2023-12-13 11:37:32

2009-12-25 10:20:28

WPF窗口

2010-09-06 14:46:25

CSSXHTML

2010-09-16 09:26:57

CSS display

2015-07-17 13:31:20

按鈕單獨控制

2010-08-31 16:09:04

DIV+CSS

2010-09-06 13:51:38

CSS失效CSS

2010-08-26 14:00:28

CSSmargin

2009-08-03 18:06:28

JS性能問題

2010-09-01 10:49:57

CSS水平居中垂直居中
點贊
收藏

51CTO技術棧公眾號

首页综合国产亚洲丝袜| 高清不卡一区| 久久久国产精华| 欧美最顶级丰满的aⅴ艳星| 久久福利小视频| 岛国av免费在线观看| 91免费看`日韩一区二区| 日本精品免费观看| 亚洲熟女毛茸茸| 国产一区二区| 天涯成人国产亚洲精品一区av| 久久99精品久久久久子伦| 亚洲av无码精品一区二区| 第一会所亚洲原创| 欧美成人一级视频| 国产日产欧美视频| 尤物在线视频| youjizz久久| 国产精品免费一区豆花| 欧美日韩免费做爰视频| 羞羞答答一区二区| 欧美精品777| 日韩a∨精品日韩在线观看| 国产在线一二三| 国产麻豆午夜三级精品| 69久久夜色精品国产69乱青草| 国产精品www爽爽爽| 91综合久久爱com| 色噜噜狠狠一区二区三区果冻| a级黄色片网站| 日韩a在线观看| 精品一区二区在线免费观看| 国模吧一区二区三区| 五月婷婷婷婷婷| 欧美成a人免费观看久久| 欧美日韩国产在线观看| www国产精品内射老熟女| 国产激情在线观看| 国产午夜精品久久久久久久| 国产精品jizz视频| 国产一区二区三区中文字幕 | 日韩av电影免费播放| 国产免费一区二区三区免费视频| 免费日韩视频| 欧美激情xxxxx| 91无套直看片红桃在线观看| 亚洲老女人视频免费| 欧美成人激情免费网| 免费在线观看污网站| 精品肉辣文txt下载| 欧美日韩在线视频观看| 日韩一级片免费视频| 黄黄的网站在线观看| 国产精品久久久久三级| 日本不卡一区二区三区视频| 天堂在线一二区| 国产成人免费av在线| 国产精品27p| 三级视频在线观看| 香蕉国产精品偷在线观看不卡| 欧美激情国产日韩精品一区18| 五月天色婷婷丁香| 国产精品久久观看| 色综久久综合桃花网| 久久久久久久毛片| 欧美在线色图| 国产香蕉97碰碰久久人人| 成人影视免费观看| 亚洲三级网页| 亚洲毛片一区二区| 毛片网站免费观看| 国产成人短视频在线观看| 亚洲图片制服诱惑| 91成人在线免费视频| 亚洲欧美日本伦理| 国产一级揄自揄精品视频| 成人在线一级片| 精品国产午夜| 中文国产成人精品久久一| 国产黄色片在线| 奇米影视亚洲| www.久久色.com| 外国一级黄色片| 欧美日韩精选| 91精品国产91久久久久福利| 国产中文字幕视频| 日本不卡的三区四区五区| 国产日韩欧美视频在线| 国产高清精品软件丝瓜软件| 成人午夜精品在线| 欧美日韩综合精品| 日本免费中文字幕在线| 一区二区三区欧美日韩| 少妇av一区二区三区无码| 亚洲mmav| 91精品国产综合久久国产大片| 无码人妻一区二区三区在线视频| 欧美变态网站| 在线播放国产精品| 日韩欧美中文字幕视频| 99国产精品| 国产福利视频一区| 99精品免费观看| 成人18视频在线播放| 日本精品一区二区| www国产在线观看| 无码av中文一区二区三区桃花岛| 香蕉视频网站入口| 伊色综合久久之综合久久| 精品亚洲一区二区三区四区五区| 国产又粗又猛又爽又黄的视频四季| 91精品精品| 91av视频在线观看| 国产精品久久久久久免费免熟 | 香蕉久久精品| 裸体女人亚洲精品一区| 亚洲久久在线观看| 韩国三级在线一区| 欧美福利精品| 污视频在线免费观看网站| 在线免费不卡电影| 97精品人妻一区二区三区蜜桃| 欧美色爱综合| 欧美精品18videosex性欧美| 中文字幕永久在线视频| 成人高清视频在线观看| 一区二区三区欧美在线| 美女视频在线免费| 日韩亚洲欧美中文三级| 日本乱子伦xxxx| 亚洲精品123区| 国产九九精品视频| 久草福利在线视频| 亚洲成av人片一区二区三区| 亚洲欧美日韩精品一区| 国产一区二区三区四区五区传媒 | 日韩爱爱小视频| 欧美巨大xxxx| 九九久久久久久久久激情| 最新国产中文字幕| 久久嫩草精品久久久精品一| 日韩伦理在线免费观看| 精品国产亚洲一区二区三区| 少妇高潮 亚洲精品| 国产一级片免费视频| 91香蕉视频黄| 欧美精品卡一卡二| 美女日韩一区| 久久精品国产视频| 亚洲专区第一页| 欧美激情资源网| 男女曰b免费视频| 能直接看的av| 天天综合网天天| 亚洲成**性毛茸茸| 久久丫精品久久丫| 国产精品12区| 桥本有菜av在线| 另类一区二区| 色午夜这里只有精品| 免费在线观看av的网站| 国产日韩欧美制服另类| 中文字幕乱码人妻综合二区三区| 乱子伦一区二区三区| 九热爱视频精品视频| 97欧美精品一区二区三区| 亚洲a视频在线观看| 美女100%无挡| 欧美猛男男男激情videos| 亚州欧美日韩中文视频| 人妻妺妺窝人体色www聚色窝| 一区二区三区在线高清| 久久久久无码精品| 亚洲女同一区| 91免费观看| 欧美黄色视屏| 337p日本欧洲亚洲大胆精品| 天天综合网入口| 久久久久久久久久久久久女国产乱| 国产av无码专区亚洲精品| 伊人成综合网伊人222| 国产精品爱啪在线线免费观看| 国产免费av高清在线| 欧美日韩一区不卡| 中文字幕亚洲欧美日韩| 高清不卡在线观看av| 无码播放一区二区三区| 精品久久视频| 成人综合网网址| 欧美videosex性欧美黑吊| 日韩成人在线免费观看| 91黑人精品一区二区三区| 亚洲欧洲一区二区三区| 国内精品免费视频| 午夜综合激情| 中文视频一区视频二区视频三区| 欧美成人精品一级| 国内精品久久影院| 国产精品久久久久一区二区国产| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 国产91色在线| 亚洲精品传媒| 日韩精品一区二区三区中文不卡| 国产又色又爽又黄的| 国产精品三级av| 国产精品19p| 久久久久综合| 激情视频小说图片| 九九精品在线| 亚洲一区二区久久久久久久| 一二三四视频在线中文| 日韩色av导航| 日韩国产福利| 日韩精品一区二区三区中文不卡| 亚洲天堂五月天| 亚洲一区免费在线观看| 国产在线观看h| 高清在线成人网| 国产免费又粗又猛又爽| 亚洲二区视频| 色乱码一区二区三区熟女| 日韩有码av| 91超碰在线电影| 亚洲成人短视频| 久久久久久久网站| 日韩三级影院| 亚洲天堂网在线观看| 亚洲国产一二三区| 欧美日本韩国一区| 日本熟女毛茸茸| 亚洲一区在线观看免费观看电影高清 | 久久国产精品免费一区| 日韩精品中文字幕吗一区二区| 国产高清在线不卡| 色偷偷偷在线视频播放| 不卡av电影院| 噜噜噜在线观看播放视频| 亚洲第一av网站| aaaa一级片| 欧美欧美欧美欧美| 久久久久久久亚洲| 欧美视频专区一二在线观看| 精品一级少妇久久久久久久| 中文字幕精品—区二区四季| 青青草福利视频| 97久久久精品综合88久久| 真实乱偷全部视频| 极品少妇一区二区| 精品综合久久久久| 久久草av在线| 亚洲成人av免费看| 日韩av网站免费在线| 999香蕉视频| 国产美女一区| 无码专区aaaaaa免费视频| 极品少妇一区二区三区| 成人小视频在线观看免费| 午夜欧美视频| 欧美精品在欧美一区二区| 欧美在线影院| 中国老女人av| 午夜精品久久久久99热蜜桃导演 | 希岛爱理一区二区三区av高清| 久久久精品亚洲| 中文字幕在线观看日本| 4438全国成人免费| 一本大道伊人av久久综合| 色狠狠av一区二区三区| 久久久久99精品成人片三人毛片| 精品久久久久国产| 午夜老司机精品| 大桥未久女教师av一区二区| 99久re热视频这里只有精品6| 蜜桃精品视频| yellow视频在线观看一区二区| 香蕉大人久久国产成人av| 666精品在线| 综合激情网...| 国产精品久久久久久久久久久久午夜片 | 成人一级片网站| 亚洲男人影院| 青青青国产在线视频| 美洲天堂一区二卡三卡四卡视频| 手机免费av片| 国产精品一二三区在线| 久久人人爽人人人人片| 久久久av毛片精品| 成年人视频软件| 亚洲激情自拍视频| 国产福利拍拍拍| 欧美天堂亚洲电影院在线播放| 国产精品伊人久久| 欧美精品一区二区三| 国产香蕉在线| 久久久国产成人精品| 成入视频在线观看| 国产精品美腿一区在线看| 久久国际精品| 久久久久久99| 欧美独立站高清久久| 福利视频一二区| 奇米色777欧美一区二区| 国产精品一级无码| 久久精品视频一区| 欧美一区二区三区爽爽爽| 精品久久久久久亚洲国产300| 日韩精选在线观看| 欧美电影免费观看完整版| 精品乱码一区二区三四区视频 | 国产高清第一页| 亚洲欧美在线磁力| 高h视频在线观看| 日韩美女视频在线观看| 日韩免费一级| 欧美在线3区| 伊人久久亚洲影院| www.夜夜爽| 成人精品在线视频观看| 91视频免费看片| 亚洲www啪成人一区二区麻豆| 在线观看免费视频a| 亚洲国产精品va在线观看黑人| 欧美r级在线| 热久久这里只有精品| 国产不卡精品视频| 久久激情久久| 亚洲综合在线一区二区| 久久久久九九视频| 免费视频网站www| 欧美三级日韩在线| 亚洲欧美日韩免费| 欧美成年人网站| 91av一区| 欧美日韩精品中文字幕一区二区| 狠狠干综合网| 国产探花在线观看视频| 国产精品女人毛片| 久久国产乱子伦精品| 亚洲精品成人久久| 免费在线观看av电影| 91美女高潮出水| 日韩欧美午夜| 久久精品视频91| 久久综合成人精品亚洲另类欧美| 久久久久久久久久久网| 欧美一区二区三区视频在线观看| 尤物在线视频| 国产精品九九九| 免费电影一区二区三区| 欧美色图色综合| av综合在线播放| 久久久久成人网站| 日韩欧美久久一区| 国产黄色小视频在线| 成人午夜在线视频一区| 99国产**精品****| 日本免费色视频| 国产精品久久久久久久久动漫| 中文字幕 视频一区| 中文字幕欧美亚洲| 国产精品第一| 亚洲高清视频一区二区| 免费在线欧美视频| www中文在线| 欧美片在线播放| 国产黄a三级三级三级av在线看| 岛国精品在线观看| 少妇无套高潮一二三区| 欧美自拍丝袜亚洲| bbbbbbbbbbb在线视频| 国产精品久久久久久久久久小说| 精品久久影视| 天天干天天av| 日韩美女视频一区二区| 99热这里只有精品在线| 久久久久久久久91| 全球av集中精品导航福利| 激情六月丁香婷婷| 日本一区二区三区国色天香| 亚洲视频一区在线播放| 久久精品亚洲一区| xxxx日韩| 亚洲中文字幕无码中文字| 国产日本欧美一区二区| 91片黄在线观看喷潮| 欧美日韩福利电影| 奇米影视777在线欧美电影观看| 黄色片久久久久| 国产精品私人影院| www.天天干.com| 国产91精品久久久| 色135综合网| 精品人妻一区二区三区免费| 午夜欧美视频在线观看| 国产福利片在线| 亚洲精品欧美极品| 国产精品美女久久久浪潮软件| 影音先锋男人在线| 欧美成人一区二区三区在线观看 | 九九精品视频在线|