久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

CSS編程實(shí)踐:從自定義屬性到容器查詢的工程化之路

CSS編程實(shí)踐:從自定義屬性到容器查詢的工程化之路 1. CSS 編程從“調(diào)樣式”到“寫(xiě)邏輯”的轉(zhuǎn)變1.1 為什么我覺(jué)得 CSS 已經(jīng)進(jìn)入了“編程”階段很多前端開(kāi)發(fā)者對(duì) CSS 的認(rèn)知還停留在“改改顏色、調(diào)調(diào)間距”的階段覺(jué)得它不過(guò)是一堆屬性和值的羅列談不上什么編程。但如果你最近兩三年打開(kāi)過(guò)真實(shí)項(xiàng)目的樣式表或者維護(hù)過(guò)一套被多人修改過(guò)的設(shè)計(jì)系統(tǒng)看法大概率會(huì)變。CSS 早就不是“選擇器加聲明塊”那么簡(jiǎn)單了變量、函數(shù)、邏輯判斷、狀態(tài)管理、數(shù)學(xué)計(jì)算、甚至是原生的嵌套寫(xiě)法這些能力疊加在一起之后它的復(fù)雜度已經(jīng)和一門(mén)小型編程語(yǔ)言相當(dāng)。我見(jiàn)過(guò)不少團(tuán)隊(duì)工程化做得不錯(cuò)組件抽象也清晰但樣式這邊始終是一團(tuán)亂麻。上千行的樣式文件里充斥著重復(fù)的色值、憑空出現(xiàn)的魔數(shù)、互相覆蓋的類(lèi)名改一個(gè)按鈕顏色要在五個(gè)文件里翻找。問(wèn)題的根源不在于開(kāi)發(fā)者不努力而在于大家沒(méi)有用“編程”的思維來(lái)對(duì)待 CSS。所謂 CSS 編程就是把它當(dāng)成一套有變量、有邏輯、有狀態(tài)、有作用域規(guī)則的體系來(lái)設(shè)計(jì)和維護(hù)。這篇文章我想分享的就是我自己在做項(xiàng)目過(guò)程中沉淀下來(lái)的一套 CSS 編程方法論從核心能力的使用到布局選型的決策邏輯再到工程化組織和排障經(jīng)驗(yàn)。不保證解決所有問(wèn)題但至少能讓你在寫(xiě)樣式的時(shí)候少走幾條彎路。1.2 CSS 編程和傳統(tǒng)編程的相同與不同先說(shuō)相同點(diǎn)。CSS 有變量自定義屬性有函數(shù)calc、clamp、min、max有條件邏輯媒體查詢、容器查詢、選擇器狀態(tài)有組合和繼承機(jī)制甚至還有類(lèi)似于“接口”和“實(shí)現(xiàn)”的設(shè)計(jì)模式用類(lèi)名和行為鉤子做抽象。你可以像寫(xiě)代碼一樣去復(fù)用、去抽象、去分層。再說(shuō)不同點(diǎn)。CSS 最特殊的地方在于它是聲明式的、隨文檔結(jié)構(gòu)展開(kāi)的、并且天生依賴全局環(huán)境。你寫(xiě)一段 JS 邏輯出錯(cuò)通常是邏輯錯(cuò)誤而寫(xiě)一段 CSS出錯(cuò)往往是因?yàn)槟承╇[式規(guī)則——層疊、繼承、優(yōu)先級(jí)、格式化上下文——和你以為的不一樣。所以 CSS 編程的核心挑戰(zhàn)不是“寫(xiě)出來(lái)”而是“控制全局影響”。理解了這一層你在做技術(shù)選型和寫(xiě)樣式的時(shí)候就會(huì)發(fā)現(xiàn)很多坑其實(shí)是可以提前避開(kāi)的。接下來(lái)我從最基礎(chǔ)的變量與計(jì)算開(kāi)始講這些能力是整個(gè) CSS 編程體系的基石。2. 現(xiàn)代 CSS 的核心能力變量、計(jì)算與函數(shù)2.1 自定義屬性CSS 世界的“變量”自定義屬性也叫 CSS 變量語(yǔ)法上是用--開(kāi)頭的屬性名定義的。定義在哪個(gè)選擇器上哪個(gè)選擇器及其后代元素就可以通過(guò)var()引用它這就形成了天然的作用域。我第一次真正感受到它的威力是在重構(gòu)一套主題系統(tǒng)的時(shí)候。原來(lái)項(xiàng)目里的主題色寫(xiě)死了十幾個(gè)類(lèi)似的色值深藍(lán)、淺藍(lán)、深一點(diǎn)的藍(lán)、帶透明度的藍(lán)……每次改品牌色都要全局搜索替換。用自定義屬性以后我只需要在根選擇器上定義一組基礎(chǔ) token所有組件統(tǒng)一引用。比如:root { --color-brand: #2b6cb0; --color-brand-hover: #2c5282; --space-base: 8px; --radius-md: 6px; } .button { background: var(--color-brand); padding: var(--space-base) calc(var(--space-base) * 2); border-radius: var(--radius-md); }這不僅是“換個(gè)寫(xiě)法”那么簡(jiǎn)單。自定義屬性帶來(lái)的真正價(jià)值有三個(gè)第一個(gè)是單一數(shù)據(jù)源。一個(gè)值只定義一次引用處全部同步徹底告別“全局搜索替換顏色”的噩夢(mèng)。第二個(gè)是運(yùn)行時(shí)可變。自定義屬性不參與層疊優(yōu)先級(jí)計(jì)算它可以在運(yùn)行時(shí)被 JS 或者內(nèi)聯(lián)樣式直接修改而無(wú)需重寫(xiě)整個(gè)樣式表。這意味著主題切換、暗色模式、用戶偏好調(diào)整都可以在不觸碰 JS 邏輯的前提下完成。比如這樣.card { background: var(--surface-color); } [data-themedark] .card { --surface-color: #1a202c; }第三個(gè)是組合能力。變量可以參與計(jì)算可以嵌套引用可以組成類(lèi)似“設(shè)計(jì) token 映射”的體系。比如間距體系可以用基礎(chǔ)單位衍生出多個(gè)級(jí)別這樣調(diào)度起來(lái)非常規(guī)整。使用自定義屬性有兩個(gè)需要特別注意的地方。一是在keyframes動(dòng)畫(huà)中關(guān)鍵幀內(nèi)部無(wú)法引用外層選擇器上定義的變量需要在關(guān)鍵幀塊內(nèi)部重新定義或者用普通屬性替代。二是自定義屬性是繼承屬性容易在深層組件里無(wú)意中被覆蓋命名時(shí)要給變量加上組件前綴。比如組件dialog內(nèi)部的變量就叫--dialog-width別叫--width。2.2 calc() 與 clamp()讓 CSS 具備運(yùn)算能力CSS 的計(jì)算能力在過(guò)去幾年提升得很快現(xiàn)在你可以在樣式表里做單位混合運(yùn)算。calc()最經(jīng)典的使用場(chǎng)景就是“撐滿減去某個(gè)固定寬度”。比如側(cè)邊欄場(chǎng)景.main-area { width: calc(100% - 260px); margin-left: 260px; }這種寫(xiě)法比 flex 布局還要精準(zhǔn)尤其是在組件內(nèi)部需要嚴(yán)格對(duì)齊某個(gè)設(shè)計(jì)稿時(shí)非常有用。calc()支持加減乘除參與運(yùn)算的兩邊至少有一邊是用了變量的否則沒(méi)有意義。要注意的是加法和減法兩側(cè)必須有一個(gè)是數(shù)字無(wú)單位的值或長(zhǎng)度值乘法在瀏覽器里支持還不穩(wěn)定一般不推薦生產(chǎn)環(huán)境使用。clamp()是min()和max()的升級(jí)版它一次能限制一個(gè)值的上下邊界。最典型的應(yīng)用是流式字號(hào)h2 { font-size: clamp(1.5rem, 0.5rem 3vw, 2.5rem); }意思是最小 1.5rem隨著視口寬度線性增長(zhǎng)但封頂 2.5rem。這在響應(yīng)式排版里非常好用少寫(xiě)兩段媒體查詢。clamp()還可以用在間距和寬度上比如卡片寬度width: clamp(280px, 50%, 480px)效果是窄屏不擠、寬屏不散。實(shí)用經(jīng)驗(yàn)是不要濫用clamp()。如果只是“窗口變窄時(shí)縮小一點(diǎn)”直接用一個(gè)百分比或者 flex 的basis往往更簡(jiǎn)單。clamp()適合那種有明確上下限約束、并且中間過(guò)程需要平緩過(guò)渡的場(chǎng)景。另外clamp()的三參數(shù)里中間那一個(gè)千萬(wàn)別寫(xiě)成固定值否則整個(gè)函數(shù)就退化成常量了。2.3 CSS 函數(shù)與內(nèi)置邏輯近兩年 CSS 還在不斷引入更復(fù)雜的內(nèi)置函數(shù)比如min()、max()、attr()、env()以及更高級(jí)的顏色函數(shù)color-mix()、light-dark()。這些函數(shù)讓 CSS 具備了更強(qiáng)的表達(dá)力。舉一個(gè)我常用的例子color-mix()可以在不改動(dòng)原色值的情況下快速生成衍生色。比如給按鈕做 hover 色.button:hover { background: color-mix(in srgb, var(--color-brand), #000 10%); }意思是把品牌色往黑色方向混合 10%。這樣整個(gè)系統(tǒng)的 hover 狀態(tài)就都是“同一個(gè)色相、統(tǒng)一加深 10%”完全由主題統(tǒng)一派生不用再各個(gè)組件手動(dòng)維護(hù)一套 hover 色。env()能讀取設(shè)備環(huán)境變量比如 iOS 的 safe-area-inset-top用來(lái)處理劉海屏和底部安全區(qū)非??煽?fixed-bottom-bar { padding-bottom: env(safe-area-inset-bottom, 20px); }這些函數(shù)的本質(zhì)是“把重復(fù)的邏輯封裝成表達(dá)式”這正是編程語(yǔ)言里函數(shù)存在的意義。當(dāng)你開(kāi)始像組織代碼那樣組織這些函數(shù)調(diào)用和變量引用時(shí)CSS 的維護(hù)成本會(huì)急劇下降。3. 布局系統(tǒng)的編程思維Flexbox 與 Grid 的搭配決策3.1 Flexbox 的真實(shí)定位一維排列Flexbox 是我每天都在用的布局方案但對(duì)它的定位我要先說(shuō)得直白一點(diǎn)——它是一個(gè)一維布局系統(tǒng)。說(shuō)它一維是因?yàn)樗瞄L(zhǎng)處理“一行內(nèi)幾個(gè)元素怎么排”或者“一列內(nèi)縱向怎么排”的問(wèn)題。我見(jiàn)過(guò)一些項(xiàng)目把 Flexbox 當(dāng)成萬(wàn)能布局工具什么界面都用 flex 套結(jié)果嵌套層級(jí)深得離譜樣式難調(diào)、間距難控、性能也受影響。Flexbox 最漂亮的用法是處理排列和分配而不是畫(huà)網(wǎng)格骨架。比如讓子元素水平居中并保持間距.toolbar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }gap屬性在 Flexbox 中已經(jīng)全面支持不需要再用 margin 模擬間距了。flex-wrap: wrap使得子項(xiàng)在空間不足時(shí)自動(dòng)換行在處理標(biāo)簽列表或動(dòng)態(tài)長(zhǎng)度的內(nèi)容時(shí)特別省心。再比如經(jīng)典的側(cè)邊欄加內(nèi)容的彈性布局.page { display: flex; } .sidebar { flex: 0 0 260px; } .content { flex: 1 1 auto; min-width: 0; }這里min-width: 0是關(guān)鍵后面我會(huì)在排障部分詳細(xì)展開(kāi)。Flexbox 的編程思維在于它處理的是“分配比例”和“排列順序”而不是像表格那樣把內(nèi)容按行列硬塞。3.2 Grid這才是真正的二維布局系統(tǒng)如果說(shuō) Flexbox 是“一排蘿卜排排坐”Grid 就是“一張地圖上自由畫(huà)格子”。Grid 是真正的二維布局系統(tǒng)它能同時(shí)控制行和列這是它與 Flexbox 最根本的區(qū)別。Grid 的核心概念是“軌道”。你可以用像素、百分比、分?jǐn)?shù)單位和auto來(lái)定義行和列。最常用的單位是fr它表示可用空間的一份。比如.dashboard { display: grid; grid-template-columns: 1fr 2fr 1fr; gap: 24px; }這表示三列寬度比為 1:2:1間距 24px。比用 flex 加百分比更簡(jiǎn)潔也更穩(wěn)定。Grid 命名的grid-template-areas是我特別推崇的功能它能把整體布局“可視化”.app-shell { display: grid; grid-template-columns: 240px 1fr; grid-template-rows: 64px 1fr; grid-template-areas: header header sidebar main; } .header { grid-area: header; } .sidebar { grid-area: sidebar; } .main { grid-area: main; }這一下就把整個(gè)頁(yè)面骨架說(shuō)清楚了。哪塊是頭、哪塊是側(cè)邊欄、哪塊是主體一目了然。這種方式的好處是布局結(jié)構(gòu)調(diào)整時(shí)只需要改動(dòng)grid-template-areas的映射關(guān)系不需要去改每個(gè)元素的位置屬性。真正的“布局邏輯集中管理”。Grid 的子元素還能用span關(guān)鍵字跨行跨列.featured-card { grid-column: span 2; }這種表達(dá)很直觀。你不需要去計(jì)算第幾行到第幾行只需要說(shuō)“這個(gè)元素跨兩列”整體可讀性非常高。3.3 選型邏輯什么時(shí)候用 Flexbox什么時(shí)候用 Grid這個(gè)問(wèn)題我在團(tuán)隊(duì)里被問(wèn)過(guò)無(wú)數(shù)次。我給出的判斷標(biāo)準(zhǔn)非常簡(jiǎn)單如果布局是“一行/一列內(nèi)排列多個(gè)元素”用 Flexbox。如果布局是“同時(shí)控制多行多列形成完整網(wǎng)格”用 Grid。如果兩者皆可優(yōu)先用約束更自然的那一個(gè)。比如導(dǎo)航欄里的按鈕組用 flex頁(yè)面主體區(qū)域的卡片墻用 grid。還有一個(gè)實(shí)用判斷法想象自己在紙上畫(huà)線。如果只需要畫(huà)一條線來(lái)規(guī)劃位置就是一維用 flex如果需要畫(huà)橫豎兩方向的線才能確定區(qū)域就是二維用 grid。這個(gè)類(lèi)比我在給新人講布局時(shí)屢試不爽。不建議的做法是在 Grid 容器上再包一層 Flexbox 容器或者 Flexbox 嵌套 Grid 嵌套 Flexbox 再嵌套 Grid。嵌套太深不僅可讀性差而且查找 bug 的時(shí)候特別要命。一般組件內(nèi)部處理自身內(nèi)容用 flex 就夠了頁(yè)面級(jí)別的骨架交給 grid各自管好自己那一層。4. 響應(yīng)式編程從媒體查詢到容器查詢4.1 媒體查詢的局限性媒體查詢是響應(yīng)式設(shè)計(jì)的元老級(jí)工具到目前為止兼容性也最好。不過(guò)我越用越覺(jué)得media有個(gè)天然的缺陷——它以視口為參照而不是以組件為參照。什么意思呢一個(gè)卡片組件如果它出現(xiàn)在頁(yè)面寬度的半欄里視口大了它也跟著大如果出現(xiàn)在三欄小屏里它可能縮得很小。用media去適配它本質(zhì)上是在猜測(cè)這組件在某個(gè)視口寬度下到底有多大。組件一旦換個(gè)容器擺放原來(lái)的媒體查詢可能就完全失效了。這就是媒體查詢的“全局視角”帶來(lái)的問(wèn)題。過(guò)去解決這個(gè)問(wèn)題的方式是把組件響應(yīng)式拆成多個(gè)版本或者干脆讓組件內(nèi)部不設(shè)斷點(diǎn)全部用百分比和彈性布局去“自適應(yīng)”。這能用但不夠優(yōu)雅也不夠靈活。4.2 容器查詢解決的真問(wèn)題容器查詢container解決的正是這個(gè)痛點(diǎn)。它的思路是讓組件根據(jù)“最近容器”的尺寸去做響應(yīng)而不是根據(jù)視口。某個(gè)容器聲明為查詢?nèi)萜髦罄锩娴脑鼐涂梢园慈萜鞯膶挾葋?lái)應(yīng)用樣式??纯催@個(gè)例子.card-list { container-type: inline-size; } container (min-width: 400px) { .card { display: flex; flex-direction: row; } }當(dāng).card-list的寬度超過(guò) 400px 時(shí)里面的卡片自動(dòng)切換為橫向布局。這個(gè)組件放在側(cè)邊欄它就在側(cè)邊欄寬度下適配放在主內(nèi)容區(qū)就在主內(nèi)容區(qū)寬度下適配。同一個(gè)組件在不同容器里呈現(xiàn)出完全一致又完全適配的表現(xiàn)。容器查詢用得好的項(xiàng)目響應(yīng)式代碼可以削減一半以上。因?yàn)榻M件不再關(guān)心“整個(gè)屏幕多寬”只關(guān)心“我所在的區(qū)域多寬”區(qū)域?qū)挾扔幸惶捉M件就在所有場(chǎng)景下保持一致。這在設(shè)計(jì)系統(tǒng)里尤其值錢(qián)卡片在列表頁(yè)、詳情頁(yè)、彈窗里復(fù)用時(shí)體驗(yàn)是統(tǒng)一的。使用容器查詢有一個(gè)坑是容器本身必須把container-type聲明好否則內(nèi)部的container查詢無(wú)效。container-type: inline-size會(huì)阻止容器尺寸受內(nèi)容影響如果容器內(nèi)部有長(zhǎng)文本設(shè)置本身也要注意必要時(shí)把overflow放到內(nèi)容層處理。4.3 響應(yīng)式策略的編程化重組把媒體查詢和容器查詢放在一起我更傾向于這樣組織響應(yīng)式策略頁(yè)面級(jí)框架布局側(cè)邊欄、頂欄、主區(qū)用media處理因?yàn)樗鼈儾耪嬲暱趶?qiáng)相關(guān)。組件內(nèi)部細(xì)節(jié)卡片方向、表格列顯隱、字體尺寸用container處理因?yàn)樗鼈兏萜鲝?qiáng)相關(guān)。組件需要多尺寸檔位時(shí)用自定義屬性作為“檔位開(kāi)關(guān)”比如.card { --row-direction: column; } container (min-width: 400px) { .card { --row-direction: row; } }這樣組件里的其他規(guī)則可以引用這個(gè)變量來(lái)統(tǒng)一調(diào)整細(xì)節(jié)不需要在每個(gè)斷點(diǎn)里重復(fù)列出所有屬性。這個(gè)做法類(lèi)似代碼里的“配置常量”思想讓響應(yīng)式邏輯變得可理解、可維護(hù)。5. 狀態(tài)管理CSS 如何管理“狀態(tài)”5.1 類(lèi)名與數(shù)據(jù)屬性的狀態(tài)表達(dá)前端世界里狀態(tài)往往被當(dāng)作 JS 的專利。但實(shí)際上CSS 是天然的“狀態(tài)機(jī)”描述語(yǔ)言——它本身就在根據(jù)不同的條件切換樣式。最基礎(chǔ)的表達(dá)方式就是類(lèi)名.button.is-active { border-color: var(--color-brand); box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-brand), transparent 70%); }用.is-active這類(lèi)狀態(tài)類(lèi)名來(lái)表達(dá)“這個(gè)按鈕處于激活狀態(tài)”是 CSS 編程里最基本也最穩(wěn)定的一種狀態(tài)管理模式。它的優(yōu)勢(shì)是狀態(tài)表達(dá)直接、JS 控制簡(jiǎn)單只需要classList.add或classList.remove而且對(duì)搜索引擎和無(wú)障礙工具都很友好。除了類(lèi)名我更推薦用>[data-stateloading] .spinner { display: block; } [data-statesuccess] .success-icon { display: block; }這種寫(xiě)法比is-loading、is-success這樣一長(zhǎng)串類(lèi)名更清楚。尤其是當(dāng)你有很多互斥狀態(tài)時(shí)>div classaccordion-item style--open: 1然后 CSS 里這樣寫(xiě).accordion-body { --target-height: calc(var(--open) * 999px); max-height: var(--target-height); overflow: hidden; transition: max-height 0.3s ease; }當(dāng)--open為 1 時(shí)max-height計(jì)算成一個(gè)足夠大的值面板展開(kāi)為 0 時(shí)直接變成 0。整個(gè)展開(kāi)邏輯沒(méi)有一行 JS。這個(gè)手法我用過(guò)很多次代價(jià)是max-height那段計(jì)算有點(diǎn)“魔法”需要寫(xiě)注釋但效果確實(shí)很平滑。另一個(gè)典型用法是主題狀態(tài)。把暗色模式作為一個(gè)布爾變量掛在根節(jié)點(diǎn)上html>.card { background: light-dark(#ffffff, #1e293b); color: light-dark(#0f172a, #e2e8f0); }在根節(jié)點(diǎn)聲明color-scheme: light dark;后light-dark()會(huì)根據(jù)系統(tǒng)的亮暗偏好自動(dòng)取值。這讓主題系統(tǒng)變得空前簡(jiǎn)潔。5.3 用結(jié)構(gòu)選擇器減少 JS 干預(yù)CSS 里最被低估的狀態(tài)表達(dá)方式是結(jié)構(gòu)選擇器。很多狀態(tài)根本不需要 JS 參與——它們天然由 DOM 結(jié)構(gòu)決定。比如“列表為空”的情況可以直接用:empty.tip-list:empty::after { content: 暫無(wú)數(shù)據(jù); color: var(--text-muted); }再比如表單的必填校驗(yàn)狀態(tài)可以用:required和:valid、:invalidinput:invalid .error-message { display: block; } input:valid .error-message { display: none; }這樣表單校驗(yàn)的樣式反饋完全由瀏覽器決定JS 只需要專注于真正的業(yè)務(wù)邏輯UI 反饋?zhàn)?CSS 自己接管。我見(jiàn)過(guò)有項(xiàng)目為這種提示寫(xiě)了幾十行 JS 控制顯隱實(shí)際上 CSS 原生就支持。結(jié)構(gòu)選擇器的編程思路是把“狀態(tài)源”放在 DOM 本身CSS 只負(fù)責(zé)根據(jù)結(jié)構(gòu)分派樣式。這能顯著減少 JS 與 CSS 的耦合也給狀態(tài)管理提供了更可靠的基礎(chǔ)。6. 動(dòng)畫(huà)邏輯時(shí)間軸、插值與緩動(dòng)的工程化6.1 關(guān)鍵幀的“狀態(tài)機(jī)”思路CSS 動(dòng)畫(huà)的關(guān)鍵幀本質(zhì)上是一個(gè)狀態(tài)機(jī)——定義起始狀態(tài)、結(jié)束狀態(tài)和中間過(guò)程。寫(xiě)動(dòng)畫(huà)與寫(xiě)業(yè)務(wù)邏輯不同它要求你對(duì)“中間幀”有直覺(jué)這是 CSS 編程里頗具技術(shù)含量的部分。一個(gè)標(biāo)準(zhǔn)的 fade-in 動(dòng)畫(huà)是這樣寫(xiě)的keyframes fadeInUp { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } } .animate-in { animation: fadeInUp 0.4s ease-out both; }看似簡(jiǎn)單但有幾個(gè)細(xì)節(jié)非常關(guān)鍵。animation-fill-mode: both表示動(dòng)畫(huà)開(kāi)始前和結(jié)束后都把關(guān)鍵幀的狀態(tài)應(yīng)用到元素上。沒(méi)有它動(dòng)畫(huà)開(kāi)始前元素會(huì)暴露初始狀態(tài)結(jié)束后又彈回原始位置視覺(jué)抖動(dòng)的體驗(yàn)很難看。多個(gè)關(guān)鍵幀百分比可以模擬更復(fù)雜的運(yùn)動(dòng)keyframes pop { 0% { transform: scale(0.6); opacity: 0; } 70% { transform: scale(1.05); opacity: 1; } 100% { transform: scale(1); } }這種“回彈”效果比線性縮放更生動(dòng)。設(shè)計(jì)動(dòng)畫(huà)時(shí)我的思路是先確定關(guān)鍵節(jié)點(diǎn)的表現(xiàn)再通過(guò)中間幀制造“彈性”和“重量感”。6.2 貝塞爾曲線與緩動(dòng)函數(shù)緩動(dòng)函數(shù)決定了動(dòng)畫(huà)“在不同時(shí)間點(diǎn)的速度變化”。大多數(shù)時(shí)候使用預(yù)置的ease、ease-in、ease-out就夠用但想要精確控制動(dòng)畫(huà)節(jié)奏時(shí)就得用cubic-bezier()。它的四個(gè)參數(shù)定義了一個(gè)三維貝塞爾曲線的兩個(gè)控制點(diǎn)體現(xiàn)速度曲線。我一般用這幾個(gè)值cubic-bezier(0.34, 1.56, 0.64, 1)帶輕微回彈的進(jìn)入效果適合卡片彈出。cubic-bezier(0.16, 1, 0.3, 1)先快后慢、干凈利落的退出效果適合彈窗關(guān)閉。cubic-bezier(0.4, 0, 0.2, 1)Material Design 標(biāo)準(zhǔn)曲線適合大多數(shù)界面動(dòng)效。用緩動(dòng)要注意同一動(dòng)畫(huà)的進(jìn)入與退出應(yīng)該使用對(duì)稱的曲線視覺(jué)上才順暢。比如進(jìn)入的一段用ease-out退出的反向動(dòng)畫(huà)就用ease-in而不是兩端都用同一個(gè)函數(shù)。6.3 動(dòng)畫(huà)暫停、反向與播放控制的工程實(shí)現(xiàn)有些人覺(jué)得 CSS 動(dòng)畫(huà)一執(zhí)行就控制不了其實(shí)不是。animation-play-state可以讓動(dòng)畫(huà)暫停和繼續(xù).card:hover .play-icon { animation-play-state: paused; }更實(shí)用的場(chǎng)景是“倒計(jì)時(shí)動(dòng)畫(huà)控制”。比如一個(gè)需要 5 秒完成的進(jìn)度條動(dòng)畫(huà)用戶點(diǎn)擊暫停再點(diǎn)擊繼續(xù)用 CSS 本身就可以辦到。我常用這個(gè)來(lái)實(shí)現(xiàn)加載狀態(tài)的“懸停暫?!碧嵘换ジ小nimation-direction可以控制動(dòng)畫(huà)方向reverse表示反向運(yùn)行alternate表示來(lái)回往返。做呼吸燈或者循環(huán)漂浮效果用alternate比寫(xiě)兩個(gè)關(guān)鍵幀更省事keyframes breathe { from { transform: scale(1); } to { transform: scale(1.05); } } .breathe { animation: breathe 2s ease-in-out infinite alternate; }工程化的一點(diǎn)建議是動(dòng)畫(huà)時(shí)長(zhǎng)和緩動(dòng)函數(shù)盡量集中管理用自定義屬性或者類(lèi)名統(tǒng)一控制比如.dur-fast、.dur-slow。用戶對(duì)動(dòng)畫(huà)時(shí)長(zhǎng)非常敏感太快覺(jué)得突兀太慢覺(jué)得拖沓。統(tǒng)一的時(shí)長(zhǎng)體系能讓整套界面的節(jié)奏感保持一致這是動(dòng)效質(zhì)量的重要一環(huán)。7. 工程化實(shí)踐CSS 項(xiàng)目的組織與可維護(hù)性7.1 命名規(guī)范BEM 的實(shí)際價(jià)值很多項(xiàng)目樣式失控最直接的原因就是類(lèi)名體系混亂。BEMBlock Element Modifier是我目前覺(jué)得最適合 CSS 編程實(shí)踐的命名方案因?yàn)樗鼜?qiáng)制你把“組件結(jié)構(gòu)”和“狀態(tài)變化”寫(xiě)進(jìn)類(lèi)名里代碼的可讀性因此大幅提升??匆粋€(gè)實(shí)際的 BEM 例子.card {} .card__title {} .card__content {} .card--compact {}Block 是組件名Element 是內(nèi)部子元素Modifier 是變體。這樣一眼就能看出來(lái).card__title是屬于.card的.card--compact是這個(gè)組件的緊湊款。BEM 的價(jià)值還體現(xiàn)在作用域隔離上。沒(méi)有 BEM 之前一個(gè).title類(lèi)名可能出現(xiàn)在十個(gè)組件里改樣式時(shí)到處是驚喜。有了 BEM每個(gè)組件有獨(dú)立的命名空間樣式覆蓋的問(wèn)題會(huì)少很多。當(dāng)然BEM 也有副作用——類(lèi)名長(zhǎng)、HTML 繁瑣。這是取舍問(wèn)題。我的態(tài)度是組件庫(kù)的公共樣式和長(zhǎng)期維護(hù)的業(yè)務(wù)系統(tǒng)用 BEM 值得一次性原型或簡(jiǎn)單的靜態(tài)頁(yè)面用簡(jiǎn)潔類(lèi)名更快不必教條化。7.2 CSS 與設(shè)計(jì)系統(tǒng)Token 的基本架構(gòu)設(shè)計(jì)系統(tǒng)中的 token 本質(zhì)上是“跨層級(jí)的變量聲明”。它分三級(jí)原始值十六進(jìn)制色值、具體字號(hào)、間距數(shù)值。語(yǔ)義 token--color-primary、--font-heading映射到設(shè)計(jì)意圖。組件 token--button-bg、--dialog-radius綁定到具體組件。我在項(xiàng)目里通常維護(hù)一份tokens.css專門(mén)放原始值和語(yǔ)義 token組件樣式引用這些語(yǔ)義 token。比如按鈕組件不直接引用一個(gè)十六進(jìn)制顏色而是引用var(--color-primary)。這樣品牌色一旦變化不需要改按鈕組件——只改 token 就行。這樣一個(gè) token 體系的好處是UI 一致性不再是口號(hào)而是有結(jié)構(gòu)保證的。新來(lái)的人看樣式代碼首先讀 tokens 文件就能理解整套設(shè)計(jì)語(yǔ)言。7.3 性能優(yōu)化代價(jià)最小收益最大的幾個(gè)動(dòng)作CSS 性能不如 JS 那樣容易定量但有一些鐵律值得記住。一是避免深層嵌套比如body .main .content .item .link { }。選擇器匹配是自右向左的深層嵌套會(huì)顯著增加判定次數(shù)但現(xiàn)代瀏覽器優(yōu)化得很好深度嵌套的唯一真實(shí)后果是代碼可讀性差——這反而是我更要?jiǎng)裢说脑?。?xiě) CSS 時(shí)盡量保持選擇器平鋪且語(yǔ)義明確。二是避免大量通配符選擇器。* { box-sizing: border-box; }這種重置是值得的但業(yè)務(wù)代碼里盡量別用*做樣式選擇匹配成本高且不易追蹤。三是對(duì)長(zhǎng)列表項(xiàng)使用content-visibility: auto。這個(gè)屬性可以讓屏幕外的內(nèi)容跳過(guò)渲染。我用的一個(gè)場(chǎng)景是超長(zhǎng)表格渲染速度提升非常明顯table tbody tr { content-visibility: auto; contain-intrinsic-size: 0 48px; }contain-intrinsic-size提供占位高度避免滾動(dòng)條跳動(dòng)。這是近兩年性價(jià)比極高的一項(xiàng)性能優(yōu)化。域名拆分的 CDN、壓縮合并這類(lèi)傳統(tǒng)優(yōu)化已經(jīng)很成熟了不再展開(kāi)。我把這些工作當(dāng)作“日常編碼習(xí)慣”而不是“優(yōu)化專項(xiàng)”因?yàn)閺墓こ探嵌瓤搭A(yù)防的性能問(wèn)題遠(yuǎn)比修復(fù)多。8. 排障心得我踩過(guò)的一些真實(shí)坑8.1 層疊上下文看不見(jiàn)的覆蓋問(wèn)題我曾經(jīng)花了一個(gè)下午排查一個(gè)問(wèn)題一個(gè)彈窗的遮罩層明明是最后一個(gè) DOM 節(jié)點(diǎn)卻被頁(yè)面主體擋住了。查了半天發(fā)現(xiàn)是主體區(qū)域有transform: translateZ(0)——它建立了新的層疊上下文把整個(gè)主體的層疊順序提前了。這類(lèi)問(wèn)題的本質(zhì)是只要某個(gè)元素建立了層疊上下文比如有transform、opacity、filter、z-index配合定位它在全局層疊順序中的權(quán)重就變了。解決方式是給彈窗容器設(shè)置一個(gè)足夠高的z-index并且這層關(guān)系要在組件注釋里寫(xiě)清楚避免后來(lái)者踩坑。排查層疊問(wèn)題的技巧也很直接在開(kāi)發(fā)者工具里逐個(gè)給元素添加z-index和position組合快速定位是誰(shuí)蓋住了誰(shuí)。看到transform或者filter屬性時(shí)就要小心它很可能是層疊上下文失控的元兇。8.2 百分比高度失效的根源另一個(gè)常見(jiàn)問(wèn)題是子元素height: 50%沒(méi)效果。原因是父元素沒(méi)有明確高度百分比高度無(wú)法解析。大多數(shù)時(shí)候我們需要的是讓容器高度由內(nèi)容撐開(kāi)這時(shí)候百分比計(jì)算就沒(méi)有意義。一種解法是使用 flex 的align-items: stretch讓子元素跟隨容器拉伸這是更自然的做法。另一種是用絕對(duì)定位 inset 精確占位。但最貼近“編程思維”的做法是檢查整個(gè)高度鏈——誰(shuí)定義高度、誰(shuí)撐開(kāi)高度、誰(shuí)依賴百分比——把高度關(guān)系畫(huà)成一條鏈鏈路里每一環(huán)都清楚問(wèn)題自解。8.3 flex 子項(xiàng)的 min-width 陷阱flex 子項(xiàng)默認(rèn)的min-width是auto這意味著內(nèi)容太多時(shí)子項(xiàng)不會(huì)小于其內(nèi)容寬度。這導(dǎo)致一個(gè)很隱蔽的 bug一個(gè) flex 容器里的兩個(gè)子項(xiàng)明明設(shè)置了flex: 1 1 0右邊那個(gè)的內(nèi)容卻把整個(gè)容器撐破。解決辦法是給子項(xiàng)加min-width: 0.flex-item { flex: 1 1 0; min-width: 0; }這個(gè)屬性我?guī)缀踉谕瑘?chǎng)景下每次都要加與其說(shuō)它是例外不如說(shuō)它是 flex 布局的標(biāo)準(zhǔn)配置。理解了min-width: auto的語(yǔ)義之后這個(gè)問(wèn)題就不再是玄學(xué)而是必然結(jié)果。8.4 margin 合并外邊距合并是 CSS 里另一個(gè)老生常談的坑。兩個(gè)相鄰塊級(jí)元素的上下 margin 不會(huì)相加而是取較大值。第一反應(yīng)是“這不符合自然認(rèn)知”但 CSS 就是這樣的規(guī)則。解決方案是用 flex 或 grid 的gap代替 margin這也是我堅(jiān)持使用gap的原因之一。另外父元素和第一個(gè)子元素之間的 margin 會(huì)“逃逸”到父元素外面表現(xiàn)成父元素被往下推了一段。解決方式是為父元素建立 BFC比如overflow: hidden或者改用 padding。8.5 調(diào)試工具的使用習(xí)慣排查 CSS 問(wèn)題的另一半功夫在開(kāi)發(fā)者工具的使用上。我調(diào)試樣式時(shí)很少靠肉眼觀察反復(fù)改代碼。第一步是打開(kāi) Elements 面板選中目標(biāo)元素查看 Computed 計(jì)算值。許多“為什么寬度不對(duì)”的問(wèn)題看計(jì)算值往往直接有答案。第二步是臨時(shí)禁用樣式在 Style 面板里逐個(gè)取消勾選嫌疑屬性觀察變化。這一招比反復(fù)改代碼刷新快得多。第三步是使用:hover強(qiáng)制狀態(tài)來(lái)調(diào)試偽類(lèi)。勾選 Force 狀態(tài):hover、:active可以精確檢查交互態(tài)樣式。最后一個(gè)習(xí)慣是善用“高亮所有元素”的 debugging 樣式* { outline: 1px solid rgba(255, 0, 0, 0.3) !important; }臨時(shí)加上這一條就能快速看清所有盒模型的邊界。我個(gè)人更常用的方式是在關(guān)鍵的組件外層五分鐘里用不同的背景色標(biāo)記區(qū)域迅速判斷是布局問(wèn)題還是視覺(jué)問(wèn)題。定位到邊界之后再考慮要不要進(jìn)一步動(dòng)代碼。寫(xiě)在最后的一點(diǎn)體會(huì)寫(xiě) CSS 和寫(xiě)其他代碼一樣真正難的從來(lái)不是某個(gè) API 或某個(gè)屬性而是在遇到問(wèn)題時(shí)能快速判斷問(wèn)題出在哪一層——是布局約束、是層疊順序、是繼承機(jī)制還是計(jì)算值和預(yù)設(shè)不符。CSS 編程的本質(zhì)就是把這一堆看似零散的規(guī)則組織成可理解、可維護(hù)、可預(yù)測(cè)的系統(tǒng)。我自己也在持續(xù)學(xué)習(xí)尤其是容器查詢和原生嵌套語(yǔ)法這兩塊隨著瀏覽器支持度提升創(chuàng)作方式還會(huì)繼續(xù)演進(jìn)。如果你也在搭建自己的 CSS 工程體系建議從自定義屬性、容器查詢、規(guī)范命名這三件事入手先把地基打好后面的改造會(huì)輕松很多。這套路子在多個(gè)項(xiàng)目上驗(yàn)證過(guò)希望你也能少踩幾個(gè)坑。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99热在线观看| 亚洲第一黄色av网站 | 狠狠搞 亚洲91| 无码免费在线观看黄色片| 欧美性,色九九| 国产女人成人精品视频| 在线无码视频| 蜜臀久久99精品久久久久久婷婷 | 特色a在线上| 国产精品亚洲四五区在线观看| 青娱乐亚洲自拍| 尤物网站91| 日韩人妻精品| 有码色中文字幕在线观看| 日本女人操逼| 日本不卡高清视频| A 天堂| 亚洲无码一区成人免费午夜| 亚洲色图欧美另类在线| 粉嫩国产精品久久久| 伊人激情| 日本精品不卡一二三区| 99re公开精品免费视频| PMv在线观看| 在线岛| 美女高潮国产高清| 亚洲性刺激| 日韩人人精品| 亚洲综合一| 午夜后入| 久久久99999久网站| 欧美丝袜激情| 久草精品国产蜜臀| 日本精品免费一区二区三区四区| 大香伊人在线一区| 欧美亚洲AN| 伊人97色天使| 男人的天堂在线2| 97色冈| 91亚州日韩高清| 色97| 伊人久久大香线综合无码| 国产人伦精品一区二区三区| 神马久久久久久久久久| 毛片99-全集电影手机免费观看完整-B029AV | 性色高清在线| 男人的天堂欧美| 中文字幕 一区二区 亚洲无码| 好湿好紧好爽 视频| 亚洲 日韩 欧美 国产综合体| www激情| 操人无码| 欧美日韩资源在线| 大香蕉日亚洲日本亚大| 91N综合网| 97精品一区| 久久久久熟女| 麻豆国产精品午夜视频| 国产日韩在线播放av| 亚洲一区二区中文字幕| 婷婷色色五月| 艳尻美人妻| 天堂俺去俺来也www久久婷婷| 葡萄牙性视频一二区| 欧美色图综合| 国模艳艳啪啪一区| 蜜桃在线观看一区二区三区| 精品人妻一区春色| 欧美一区二区| 国产女s强制榨精视频| 91影库| 国内三级自拍小视频在线观看| 久久激情五月| 锕锕好爽 死我在线观看| 亚洲第二页| 懂色av一区二区三区天美传媒| 日韩在线一区高清在线| 91人人爽人人爽| 国产高清不卡视频| 淫荡网址| 91男女啊啊啊| 国产精品另类| 中文字幕一区二区在线日韩精品| www.五月天| 91国产美女丝袜足交精品视频| 四季av一区二区凹凸精品小说| 日日夜夜精品视频| 中文字幕精品资源在线| 第45页一区二区| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 色诱avtt| 国产一级高清免费观看| 亚洲精品精品一区二区| 美女97超碰| 91美女视频直播| 国产一级137片内射麻豆| 人妻黑丝袜电影| 九九九久久久W精品| 日韩黄片影院| 综合网欧美在线| 新视频sss国产| 美女91在线| 亚洲午夜福利视频| 另类专区加勒比| 91看黄片| 亚洲色图综合网| 国产精品蜜臀久久久久无码AV| 久久综合九九| 综合欧美亚洲| 欧美精品四区| 中文乱码字字幕在线第5页| 亚洲一区二区性爱电影| 国产欧洲精品亚洲午夜拍精品| 在线日韩精品一区二区三区| 男人天堂久久精品| 91肉片| 亚州宗合另类| 午夜.DJ高清在线观看免费7| 97超碰超欧美。| 一道α片欧美| 日本高清加勒比| 欧美一区二区福利在线| 蜜臀AV成人精品蜜臀| 性爱视频无打码在线观看| 亚洲天堂女优在线| 国产精品无码久久久久2028| 9997se| 精品亚洲黄色片 国产精品导航一区二区 | 韩国毛片一区二区三区| 97人人草| 午夜a成v人电影| 狠狠干精品一二三四五六2022| 精品人妻av区天天看片| 国产精品久久久蜜臀| 色色色日本| 欧美人妻中出| 欧美成人色| 成年人黄色视频免费| 精品久久久久瑟瑟| 免费自拍三级综合| 婷婷五月天色网| www.激情| 在线中文字幕| 96久久久精品| 久热九九| 国产精品麻豆免费视频| 欧美乱妇狂野欧美在线视频| 大香网伊人久久综合| 熟女人妻精品一区二区视频| 国产人伦精品一区二区三区| 亚洲欧洲综合成人av一区| 夜夜爽爽夜夜精品视频| 九九成人| 911av网站免费观看| 伊人97| 人人摸人人干| 免费精品99| 强奸乱伦 亚洲一区| 欧美视频第二页| 欧美啪啪女女| 人人操人人摸人人看人人插| 97超碰大| …中文字幕亚洲乱,97人妻无码费视…| 日本久久天堂| 高潮的A片激情扒开一区| 久超碰这里只有精品| 色综合91| 日本午夜精品理论片A级APP发布| 欧美成人9797| 女人双腿搬开让男人桶| 高清无码一区二区三区| 超碰色97| 日日97| 久久神马影院| 91美女在线视频| 久99久视频| 国产精品午夜福利亚洲综合网| 激情四射婷婷六月天| 黄页大片在线观看| 亚洲第一页色| 9999免费精彩视频| 九月丁香婷婷色| 亚洲不雅视频1区二区| 色天堂综合| 一区二区三区四区五区高清无码永久视频 | 熟人人妻少妇精品久久| 国产免费久久精品99re韩国| 蜜臀av在线播放一区二区三区| 神马久久久久久伦理片| 国产91影院| 91成人亚洲色图| 天天综合网1| 亚射在线| 成人色女网| 伊人天堂在线| 久久久一热在线播放| 色婷五月| 乱老女人一区二区视频| 日本精品第一视频在'| 久综合国内精品自在自线| 狠狠色色| www国产天美久久久| 精品人妻免费观看| 久96热在线观看视频| 97在线视频免费看| 九九九九九九九九九国产精品 | 俄罗斯一区二区视频在线观看| 久久久97| 国产亚洲色停停久久99精品91| 性色综合网| 久久久久久久| 欧美裸体美女日麻屄| 大肥女高潮bbwbbwhd视频| 97超碰欧美手机| 91熟女在线| 精品91日日夜夜超清资源| 欧美少妇色图| 欧美gv在线观看| 日韩综合无码一区久久92| 天天干人人看综合| 欧美日韩性爱电影在线| 天天看天天在线精品| 中国一级特黄大片护士| 日韩av不卡在线观看| 国产精品一区二区黄片| 久久e6只有精品| 国产91精品久久久久久久网曝门| 欧美青青视频| 亚洲综合在线91| 黄片www视频免费| 超碰97人人cao| 无码不卡八戒| 久久AV色| 熟女久久| 久久性爱视频免费看| 久久精品国产亚洲AV先锋| 久久久久亚洲三级电影| 国产欧美日韩精品中文| 99热97| 天天做天天爱天天爽AV| 好爽要喷了| 蜜臀Av一区二区三区| 男同专区一区二区三区在线| 亚洲无码国产精品久久| 人人透人人操| 欧美成不卡网| 激情文学亚洲| 日本操逼aaaaa| 免费一级毛片在线视频观看| 中文字幕一区二区三区人妻少妇在线| 欧美亚洲清纯| 超碰免费人妻人人| 综合五月天| 蜜桃久久久久久久久久久久| 无马一区二区| 亚洲最大AV网| 久久神马影院| 熟妇视频一区二区三区在线| 殴美大黄片| 肉丝网站91| 九草九九九| 热思思免费视频| 日本 欧美 国产一区| 4141514逼喷水三级片| 亚洲色图欧美色图制服诱惑| 91少妇人妻| 天天操天天舔| 国产热av| 乳欲人妻办公室奶水| 亚洲精品男人的天堂| 中文字幕-区二区三区四区视频中国| 熟妇一区,二区,三区。| 精品无码久久久久久国产浪潮| www.五月天| 久久九操在线观看| 日韩精品国产一区二区| 东北女人的毛片| 亚洲综合91| 思思99热| 亚洲三级。日韩三级| 国产精品久久久久中文字幕| 我中文字幕6区| 91啦人妻| 91 丝袜在线| 丰满人妻一区二区三区四区| 使劲用力艹少妇视频一区二区| 天美传媒AV在线播放| 午夜免费福利视频一区| 老熟女综合网| www.99视频| 少妇特黄一区二区三区| 丰满人妻大屁一区二区| 久久网亚洲| 亚洲强奸乱伦影视网| 人妻超碰青青草98| 午夜福利免费福利视频| 91国内外在线| 天天日天天色| 国产一二三在线视频五十路| 伊人久久88国产女| 99无码狠狠久久| 日本一二区免费| 日本506070| 屌逼麻豆| 欧美gv在线观看| 青青草白白色| 无遮挡h肉动漫在线观看| 福利五区| 殴美,日韩国产伦精品| 中文字幕丰满人妻日本| 久久夜色一区二区| 激情抓乳插进去啪啪啪日韩| wuyechaopeng| 丁香五月色情| 综合影院永久入口国产| 天天看高清麻豆| 亚洲一级特黄大片在线播放91| 国产人人干| 欧美色五月| 亚洲欧美黄| 超硑97精品| 精品无码不卡视频| 91天美免费| 精品91摸| 色色色999| 日本操逼视频在线| 国产精品粉嫩福利在线| 99精品热| 亚洲欧洲自拍图片专区满春格| 亚洲区限制级| 91啪啪视频| 人人弄人人摸| 99re这里只有精品2| 久九干| 日韩乱伦影音先锋| 97在线免费观看视频| 精品成人女人久久| 91久久国产综合久久| 中文字幕,人妻,日韩| 日本最新1区2区3区| 日韩人妻资源网| 亚洲制服aⅴ中文字幕| 精品夜夜澡人妻无码AV| 国产丰满熟夫69mpp| 天天躁日日躁AAAXX| 久久久少妇| 精品二区三四区五电影 | 久久久久久中文| 久久98| 天美精品原创av片国产| 性高潮久久久| 性爱AV天堂| 少妇一线天久久久久久| 欧美一区二区三区另类精品| 日本操逼视频在线| 精品人妻丰满熟妇一区二区三| 91亚洲影院综合| 九九碰九九爱97超碰| 日逼视频日本| 人人操人人色人人摸| 深喉吞精| 精品久久久久成人码免| 久操视频免费观看| 小草av不卡亚洲二区| AV天天在线观看| 综合激情婷婷| 在线观看AV片| 国产又黄又粗的视频| 亚洲欧洲激情卡通另类文学四射小说网站| 91欧洲入口| 影音先锋一区二区在线资源| 午夜久久一区二区无码中出| 好淫网一二三视区| 国产精品肉丝自拍| 久久精品亚洲婷婷| 91麻豆天美国产欧美日| 久热91| 日韩乱伦影音先锋| 在线欧美69V免费观看视频| 亚洲āv网址在线观看| 久久超碰日韩精品| 97在线视频观看| 色臀AV| 中文字幕人妻丝袜乱一区三区| 99热99re6国产在线播放| 久久鲁夜| 天天舔天天日天天射| 亚洲中文电影| 久神马| 熟妇人妻一区二区三在线| 中文有码第五页| 夜夜狼人妻| 亚洲狼狼干综合1| 成人日韩中文字幕| 夜草欧美| 亚洲91射| 日本色日夜干| 日韩欧美大片免费高清啪啪| 99久国产精品午夜性色福利| 岛国色情视频在线观看| 日韩黄色一区二区三区| 亚洲色婷婷| 超碰人人妻| WWW4虎| 91电影色诱| 精品国产乱码久久久兰草影视| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 性色av婷婷久久一区二区点复制| 中文激情网| 中文伊人大香蕉视频| 日韩欧美成人大香蕉| 日韩精品99久久久久久中文字幕| 国产精品大屁股999| 亚洲欧美综合网| 亚洲国产综合视频| 日本无码1| 色色99| 蜜臀99999| 精品制服美女中文一区二区三区| 传媒在线观看一区二区三区| 欧美精品久久96人妻无码| 亚洲成人日韩小说| 人人摸人人干| 视频在线97| 尤物av网站免费在线播放| 岛国网址国产 | 91成人国产综合久久精品蜜月| 超碰97在线色男人??| 密臀在线视频| 日韩性爱电影一区| 殴美综合色88| 天天做天天爱| 色99视频| 吊色| 黄色片一区二区三区四区五区| 我爱大香蕉| 青青草成人视频在线观看二区| 国产精品日日摸天天碰| 国产精品久久99日日| 看日韩美女二区三区免费操逼视频| 久插综合| 久久大黄片| 亚洲色诱惑| 亚洲男人天堂2016| 91老熟妇| 婷婷四五区| 国产又粗又长又大的视频| 91精品国产日韩欧美综合| 九九毛片这里只有精品| 黄色工厂这里只有精品| 日韩精品视频在线观看一卡二卡| 日韩精品操少妇| 一级做受视频免费是看美女| 国产11页| 9Ⅰ超碰| 强奸a片网| 亚洲欧美一区二区网址| 亚洲一区二区三区四区视频| 久草男人天堂| 国产 日韩 欧美高清| 欧中日成人免费影视| 精品视频在线观看| 老女人爆菊| 国产精品国产精品国产| 亚洲国产欧美日韩人妻日中文| 欧美另类丝袜熟女| 丁香六月婷婷久久综合| 欧美性性性| 91狠狠色丁香婷婷综合久久精品| 国产精品97超碰| 欧美日本一区二区a人| 极品AV网站在线观看| 秋霞成人做爱| 美女91色黄18| 爱媛媛久久国产福利| 欧美大色交| 无码乱人伦中文视频| 国产精品久久久久久9999| 亚洲第2页| 少好三P| 综合激情婷婷| 99色网| 欧美 日韩 国产传媒| 国产精品日本无码A片| 激情露脸爱| 九九视频黄色片| 亚州中文字幕超碰97| 手机在线播放国产福利| 欧美亚洲清纯| 天天狠| 久久精品国产精品一区| 中文字幕97色| 97任你吞精| 视频不卡中文字幕| 老熟妇综合| 色噜噜精品一区二区三| 麻豆尤物视频网| 九九久久久九九| www.99中文字幕| 97色欧洲| 久久男人网| 亚洲国产麻豆一区二区三区| 丰满少妇一区二区三区免费看| 内射日韩大臀美女| 成人乱码一区二区三少妇| 男人的天堂VA| 狠狠2050在线观看| h在线看免费版在线看| 日本成人免费一区二区三区| 三级网色| 91亚洲欧美| 欧美洲精品一级| 大稥蕉免费视频这里只有精品| 中文字幕AV乱伦| 国产精品久久久久9999小说| 大香蕉欧美国产日韩高潮| 欧美一级色| 中文字幕精品一区二| 久久超碰天天| 欧美性爱网97| 久久久99久9| 色色色色电影网| 大学生口爆吞精| 97在线免费看视频| 后入福利| 很很很很操| 日本美女性生活久久久久久久 | 秋霞福利网| 四虎永久在线精品免费网址| 337p大胆噜噜噜噜噜91Av| 伦激情人妻另类人妻| 欧美92| 91女优在线观看 | 久久精品国产亚洲AV高清演员表| 美女诱惑久久| 91情色在线| 亚洲丰满很很操| 伊人精品视频| 蜜桃视频精品一区二区三区| 大香樵伊人网| 91狠狠色丁香婷婷综合久久| 中文字幕狠狠玩| 日本操逼视频不卡直接放| 91黑丝在线| 亚洲图片小说欧洲| 男人天堂导航| 国产精品另类一区大香蕉| 亚洲精品一卡二卡三卡福利视频网站 | 亚洲大胆人体av| 在线综合 亚洲 欧美中文字幕| 亚洲欧洲另类| 开心五月婷婷| 麻豆蜜桃视频在线观看 | 国产高清亚洲日韩一区| 好属操| 久久国产乱子伦精品免费女,网站| 九九九国产精品| 一二三卡欧美日韩人妻免费精品| 成人天天爽| 欧美一区二区三区黄色影视| 日韩精品碰碰| 亚洲欧美色图小说| 免费?级毛片无码?∨蜜芽试看| 亚洲网站一区二区在线| 午夜a成v人电影| 秋霞一级A片黄色视频| 久久国产免费激情视频| 思思热免费在线视频| 高清国产成人无码| 九九探花视频在线观看| av婷婷色婷婷色六月| 国产又操| 男人天堂2012| 色 婷97| 狠狠躁天天躁日日躁| 91少妇香蕉久久精品| 91少妇通奸网站| 麻豆一区二区三区在线看 | 久久激情视频| 久久久啊啊| 97色色国产视频| 亚洲美女黄色| 精品人妻一区二区三区四区不卡在| 久久AV无码AV| 亚洲少妇综合在线播放| 天天色播| 9 7超碰在线免费观看| 91精品国久久久久久无码| 白嫩妹子国产骚| 亚洲天堂加勒比| 日韩无码精品综合久久| 亚洲各类熟们中文字幕| 五月天色图| 狠狠爱AV| 一区二区三区国产在线播放| 日本免费人成视频播放120秒| 久久艹逼视频| 日日干夜夜操视频h| 天天综合网亚洲综合网| 久96热在线观看视频| 国产亚洲精品av一区| 五月天婷婷欧美三区| 丝袜无码a片| 欧色网址| 老司机射| 亚洲色性情三级| 久九九九九九九九热| 国产成久久综合片| 久色网| 国产成年女人免费视频播放a| xxx0国产在线播放| 亚洲熟妇丝袜在线观看| 97久久超碰亚洲| 久久久久亚洲三级电影| 九九综合| 欧美久久人体| 久久成人国产| 白丝少妇一区二区| 91在线视频国产网站| 日韩黄色一区二区三区| 伊人操操| 豆花视频操逼网址| 在线观看AV不卡| 久久久涩| 久久久久九九九| 丁香五月天久久精品视频一区二区三区| 欧美92| 亚洲精品精品一区二区| 国产一区二区久久| 日韩三A大片在线观看| 色综合一区二区三巨| 婷婷丁香人妻 | 日本天堂网| 中文字幕乱码在线观看| 欧美日韩第一页| 人妻少妇久久中文| 国产AV激情无码久久无码| 黄网站黄视频网站进入口| 91老熟女视频| 国产亚洲 中文欧美久久| 五月天婷婷社区| 国产亚洲国产超碰| 九九九不卡| 色色色色综合网| 大白逼三四级| 久久九九网| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 性色av网站| 亚洲有码第一页| 欧美一级国产一级| 欧美国产操逼| 极品色www影院| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 欧美激情内射| 天天舔天天 | 粉嫩在线一区二区懂色| 日本高清一本二本免费不卡| 91精品伊人久久久大香线蕉91| 久久精品高清无码一区| 丰满人妻大屁一区二区| 亚洲毛片久久| 天天干一区二区| 囯产精品久久久久久久久久梁医生| 99精品丰满人妻无| 亚洲图片色图欧美另类| 男人的天堂无码| 婷婷激情综合网| 风月影院十八禁| 色婷婷蜜臀av| 亚洲超碰AV| 日比av无码| 91天天日| 2019天天干天天操| 精品无码少妇| 97在线欧洲| 在线观看黄色电话| 超碰97丝袜| 中 文字幕一区二区三四 五 区日 日 骚 | 国产精品成人无码av无码免费| 午夜亚洲| 蜜桃视频一区二区三区在线观看| 黄色AAAAA欧美| 91天堂丝袜美腿| 91美女视屏| 日本操大逼| 国产综合久久久麻桃个| 婷婷丁香一区二区三区| 超碰人人草| 男女日B国产| 欧美色图自拍| 久久精品视频28| 99久久网站| 中字幕人妻一区二区三区| 欧美亚洲宗合色性图| 日韩欧美视频青青| 黄页网站免费高清在线观看| 水滴偷拍| 亚洲天天影视色综合| 国产剧情一区在线观看| 精品亚洲国产成人av网站| 2017天天拍大香蕉| 日本黄色XXX| 亚洲大色堂| 天天摸,夜夜摸| 精品性爱一二三区| 亚洲无码国产探花在线观看| 国产人妻久久精品一区二区三区| 精品一久久久| 韩国一区二区精品亚洲| 人成午夜免费大片| 精品人妻中文字幕4399| 天天澡天天爽日日AV| 久久久涩| 很狠操| 日本人妻天堂网站在线播放| 九九无码久久精品视频| 亚洲综合婷婷| 性爱乱伦一区| 国产AV激情无码久久无码| 国内偷拍精品一区二区| 诱惑网综合| 怡春院久久| 青青草影视蜜久久| 风骚少妇视频中文字幕| 激情终合网| 欧美少妇第一页| 18精品一区| 9/A片| 欧美视频在线第3页| 91久热| 日韩女模中文造逼| 中国一区二区亚洲人妻| 日本Xx性爱| 一级黄色性爱A级片| 欧洲综合无码| 国产强奸91| 日本欧美一区二区三区视频麻豆| 国产精品不卡一区二区三区av| 97精| 久久性爱视频免费看| 97日韩欧美| 91夜色| 人妻夜夜爽天天爽三区麻豆AV网站| 亚洲综合在线91| 国产又粗又长视频| 俞拍久久国应视频| 日韩情色一区二区| 久久久97| WWW操逼| 精品欧美А∨无码黑人大荫蒂| 精品人妻中文字幕4399| 国产亚洲精品美女久久久久久2021| 在线欧美69V免费观看视频| 岛国视频一二三区| 性爱乱伦一区| 久久久久人妻| 精品91摸| 和协影院中文字幕三区| 97av,com| 女生久久网| 亚洲伊人久久综合97| 一级特黄aaa大片在线观看成人一级片在线观看 | 97这里只有精品| 超碰免费人妻人人| 国产网红精品| 99综合| 麻豆久久久久久久久丝袜| 中文幕97| 18+91网站| 美女裸体无遮挡永久免费观看网站| a片偷拍视频| www国产天美久久久| 亚洲成人网站在线观看| 91在线综合网| 国产免费一区| 人妻少妇精品| 激情网色| 欧美人妻精品| 国产精品一级二级在线| 女生久久网| 操逼www.| 中文伊人大香蕉视频| 好看的久久不射无码影视影院| 亚洲精品蜜桃久久久| 亚洲情色欧美| 在线v中文字幕一区二区三区| 精品一区二区三区蜜桃臀赵总 | 九九色综合| 久久一二三四五六七八九区区| 亚洲精品蜜桃久久久| 亚洲97成人在线观看| 日韩人妻一区二区精品| 亚洲色性情三级| 欧美东京热青青草| 欧美日韩一区二区三区四区蜜桃| 亚洲有码 欧美精品| 欧美激情黑人| 国产AAAAAABBBBB| www.婷婷| 91综合天天看| 国产毛片在线| 亚洲最大的黄色电影网站。| 9精品久久久久| 日韩欧美综合激情| 午夜天堂网| 97视频免费| 亚洲一区二区三区欧美日韩| 97超碰热线| 啊啊啊无码| 日韩AC| 性爱AV天堂| JIZZJIZZ亚洲女人被躁| 久久怡红院| 欧美精品系列| 囯产操逼片| 91老熟女老女人国产老太| 国产真实子伦对白| 亚州伊人色综台| 91四海无码日韩欧美| 亚洲成人一区二区精品| 97超碰资源网| 国产性爱在线视频一区二区| 99爱久久视频频| 青娱乐啪啪视频| 99在线免费观看| 天天操天天干美女网址导航| 91天堂色男人的天堂| 国产一区二区三区,在线观看观看| AV乱伦国产| 老熟女91av| 97精品网| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 一区二区三区欧美激情| 公司1区2区3区精产精| 国产精品久久久久久久黄无码| 蜜臀久久在线视频| 美女视频尤物网在线看| 91欧美成人色站| 蜜乳视频网站| 和协影院中文字幕三区| 天堂俺去俺来也www久久婷婷| 少妇500双飞99| 大香蕉www.超碰| 久久熟女久| 亚洲精品中文字幕一区在线视频| 亚洲蜜臀视频精品久久| 蜜乳AV网址| AV中文字幕三四五| 天天做天天爱| 男人天堂网址| 吉川爱美98堂在线| ..日韩av毛片精品久久久| 亚洲啪啪啪啪视香蕉| 天天天天天天天天天天干美女| 台湾佬中文娱乐网久久久久久久久久com| 性在久久久久久| 超碰在线综合97| 亚洲九区| 成人久久久| 麻豆区99999| 明星性猛交ⅹxxx乱大交| 性爱av在线免费观看| 亚洲老熟妇xxx| 激情文学欧美| 欧洲综合无码| 色九九九综合| 国产高清精品一区二区三区毛片| 日本美女性生活久久久久久久| 2017av无码免费无线播| 欧洲与亚洲欧美精品中文字幕| 国产日韩欧美亚洲精品95| 玖玖无码超碰| 黄色大片一区二区密桃丝袜| 操婢日韩| 亚洲天堂电影网99999| 欧美亚涩| 逼操网站| 青青草在线视频播放器| 国产超碰国产97| 密乳AV免费观看| 久久这里只精品| 91亚州欧美| 久久这里只精品99re66图| 国产精品乱码久久久久| 国产乱码精品久久久久久| 狠狠综合网| 国产精品不卡一区二区电影| 综合激情一一91| 日韩啪啪啪啪啪| 成人乱人伦一区二区| 久久东京热成人| 九九久久国产精品| 大香蕉520| 人人操我人人干| 亚洲午夜精品久久久中文影院| 中文字幕片| 五月婷婷爱六月丁香色| 国产精品盗摄 偷窥盗摄| 亚州精品人妻一二三区| 99爱久久视频频| 亚洲色综合| 曰韩操B| 久久久夜夜夜| 中出在线视频| 熟女欧美日韩综合婷婷| 精品国产乱码久久久久久久久1 | 久久一区二区三区入口| 欧美自拍偷拍综合图片| 欧美春色| 一区二区亚州激情久婷婷欧美| 91偷拍欧美亚洲| 五月天开心网| 强奸乱伦αv片| 91久久免费视频互動交流| 欧综合网| 色香网| 丰满人妻一区二区中文| 亚洲男人天堂2012| 6080yy午夜理论三级一区二区三区无码| 久久成人国产| 国产又黄又粗的视频| 成年人黄色| 婷婷国产精品一区二区| 一本色道久久综合熟妇| 97超碰免费人人性爱| 欧美熟妇乱码在线一区| 精品精品精品| 又黄又爽在线观看视频| 90后性网国产欧美| 欧美做爰无码A片视频| 国产激情av女片自拍| 中文字幕一二区二三区人妻专区| 中文字幕精品探花视频| 成年人网站在线免费观看| 精品九九九九九| 国产精品96久久久久久| 男人天堂资源| 国产精品一区二区密臀| 青青草依人大香蕉| 国产精品一二三| 成人精品水蜜桃久久久久久久| 激情五月天校园春色网| 天天躁狠狠躁av| 1024午夜激情男人的天堂| 久久爽爽精品| 亚洲精品白丝| 久久久久人| 欧美九一精品久久久熟妇| 玖玖爱综合网| 四虎精品永久在线观看| 99热在线只有精品| 精品国产99999| 日本媚薬中文字幕在线| 欧美色图 色综合图| 久久久久久精| www久久国产精品| 在线观看成人性爱免费小视频| 人妻少妇被猛烈进入中| 日韩国产成人自拍视频| 午夜男人一级A片7777| 国产67194| 99少妇精品视频| 中文字幕在线观看AV| 天天综合有色网| 天天躁狠狠躁av| 综合自拍| 亚洲色图91| 久久久久免费看少妇A片特黄| 青娱乐亚洲自拍| 久久久网站| 久久久久性熟视频| 久久国语| 超碰久超碰久| 日韩熟女无码| 特级丰满少妇一级AAAA爱毛片| 午夜男人一级A片7777| 色欧美天天| 欧美在线大香蕉| 天天天做天天天爱天天天爽| 久久一区二区蜜桃| 中文字幕乱码人妻二区三区| 国产精选三级在线观看| 九色 人妻 大香蕉| 久久99精品九九久久久婷婷| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 欧美日韩国内不卡| 超踫中文字幕| 性爱视频啪啪啪啪| 囯产操逼片| 精品国产自在在线99| 98福利在线视频| 久9九综合在线| 亚欧成人综合影院| 日韩精品 资源| 欧美性天天影院| 亚洲综合999| 色综合av男人天堂| 国产精品91一样| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 国产亲戚伦亲在线| 富二代亚洲精品99| 国产精品69久久久久孕妇欧美| 九九九精品| 亚洲福利中文字幕在线| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 中文字幕精品日韩中文字幕| 亚洲欧美精品一区天堂久久 | 91在线丝袜| 亚洲性爱电影| 国模限制级电影| 欧美97av| 高清无码 国产精品| 精品无吗久久| 欧美中文综合| 91久久久久久久| 亚洲一二三四区在线免费看视频| 熟女激情综合网| 久久久久久午夜男人的天堂| 亚洲大色鬼| 亚洲免费成人在线高清无码视频| 九色 人妻 大香蕉| 成人性交午夜免费片| 国产精品香蕉热久久新品| 五十路二区在线 | 中文字幕一区二区三区蜜桃视频| 18禁看网站一区| 91在线|亚| 一本色道熟妇| 久久五月视频| 人人操超碰在线| 天天躁日日躁AAA片李宗瑞| 西西美女视频网| 91在线精品一区二区三区| 亚洲熟妇极品| 日韩超碰97| 91美女丝袜诱惑视频| 青青青草原| 亚洲av无码成人精品国产| 97精品97久久| 18禁网站在线播放| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 亚洲日韩XXX| 性爱Av免费| 精品美女久久一二三| 十八岁啪啪视频免费看| ai欧美亚洲小说| 国产欧美岛国精品一区| 久欲AV| 婷婷在线视频| 蜜臀99久久精品久久久久| 国产精品久久久亚洲一区| 嗯嗯啊啊操我| 日韩av熟女一区二区三区成人| 超碰在线人妻中文字幕| 美腿丝袜高跟网免费视频免费视频| 伦激情人妻另类人妻| 97在线青| 亚洲中文字幕三级在线| 无码人妻一区二区三区四区老鸭窝| 久久久九97| 亚洲啪啪视频免费| 老女人碰碰在线碰碰视频| 亚洲一欧洲中文字幕在线| 激情五月天视频| 97狠狠| 97超碰色屌| 亚洲图片欧洲图片aⅴ| 亚洲97资源| 青青草日逼视频| 中文字幕日韩人妻视频| 色五月AV在线| 久7色| 囯戸精品高潮呻吟旡码| 性九九九九九九| 嗯嗯啊啊视频在线看| 日韩欧美操逼xxx| 精品9999| 久jiu久神马影院| 一区二区三区探花在线观看| 无码二级三级| 亚洲黄日韩无码专区| 人妻精品视频一区二区| 午夜性生活av免费在线看| 中文字幕诱惑制服人妻丝袜美丝袜美 | 欧美A√综合网| www.99在线| 日本操逼无码| 91无码人妻| 欧美夜夜狠| 黄色电影观看久久9| www.人人摸在线视频| 超碰在线974| 18禁超污无遮挡无码免费网| 色五月AV| 久久机热| 色狠人在线99| 久久人人看| 日本熟女免费視颖| 久久久久久久唑| 美女干逼2| 午夜精品99久久久久传媒| 婷婷丁香五月天综合东京热| 亚洲毛片基地专区| 高清不卡 中文 人妻| 亚洲综合另类欧美久久久| 中国探花熟女| 无码区蜜乳| 97爱亚洲| 亚洲亚洲亚洲天堂天堂| 蜜桃视频精品一区二区三区| 色5月婷婷| 91三级理论片播放器| 久久在线观看免费视频| 日日夜夜骑| 九9热伊人| 熟女欧美日韩综合婷婷| 丝袜六区| 97干在线| 日韩欧美字幕亚洲一区二区| 日韩高清黄片| 欧美一级在线观看成人| 人妻久久| 老司机福利社视频在线观看| 日韩精品人妻中文字有码在线| 久久国色天香香蕉| 九九热视频在线观看| 久久性爱大全| 91社操逼| 国产黄片精品在线| 亚洲av无码国产精品字幕| 香蕉综合网| 四虎影视精品| 国产精品久久泡妞网站| 久久精品女同亚洲女同13| 久久成人午夜狠狠| 精品人妻一区二区三区夜夜| 日日干夜夜操视频h| 伊人97色天使| 国产久久久9999| 中文字幕精品丝袜| 偷拍欧美激情| 国产性感骚丝袜在线| 日韩无码嘿咻黑热久| 怡红院视频在线| 久热色情精品| 天操天操夜操夜月操月年年操| 啊啊啊啊视频免费| 久久久久国产亚洲一区欧美色图日韩| 精品一区二区啪啪啪| 亚洲欧美精品一区天堂久久 | 国内毛片婷婷六月色| 熟女五十路一区二区三| 黄色AAAAA欧美| 26uuu国产成人综合| 人妻精品一区二区在线| 中文字幕日本久久| 久久久久久人妻| 美女超碰978| 欧美久久婷| 国产av热热色|