国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

CSS的誠(chéng)實(shí)謊言:瀏覽器說(shuō)支持,實(shí)際卻不靈

0
分享至

網(wǎng)頁(yè)開(kāi)發(fā)者都熟悉@supports這個(gè)CSS規(guī)則——它用來(lái)檢測(cè)瀏覽器是否支持某個(gè)CSS特性,支持就應(yīng)用樣式,不支持就跳過(guò)。聽(tīng)起來(lái)很靠譜,對(duì)吧?但實(shí)際情況是,這個(gè)"檢測(cè)器"本身就有bug,而且是個(gè)讓人頭疼的設(shè)計(jì)缺陷。

按照CSS規(guī)范,@supports只能寫(xiě)在最外層,或者嵌套在另一個(gè)條件規(guī)則(比如@media)里面。但現(xiàn)實(shí)中,瀏覽器對(duì)下面這種寫(xiě)法照單全收:


.my-class {@supports (property: value) {}

這種嵌套寫(xiě)法理論上是無(wú)效的,但Chrome、Safari、Firefox全都認(rèn)了。問(wèn)題就出在這里——瀏覽器怎么處理這種"非法"嵌套,直接決定了你的代碼會(huì)不會(huì)出岔子。

來(lái)看個(gè)具體例子。假設(shè)你想給列表項(xiàng)的標(biāo)記符加點(diǎn)花樣:

li::marker {@supports (content: " - ") {content: " - ";color: red;}

這段代碼想表達(dá)的是:如果瀏覽器支持content: " - ",就把列表標(biāo)記改成紅色的" - "。Chrome和Firefox確實(shí)這么渲染了。但Safari呢?它顯示的是一個(gè)紅色圓點(diǎn)。

詭異之處在于,Safari明明不支持::marker偽元素里的content屬性,@supports的檢測(cè)結(jié)果卻返回了"支持"。開(kāi)發(fā)者看到的是嵌套結(jié)構(gòu),瀏覽器執(zhí)行的卻是另一套邏輯——它把@supports提到了最外層,檢測(cè)的是"這個(gè)聲明語(yǔ)法上是否有效",而不是"在這個(gè)具體場(chǎng)景下是否真的能用"。

說(shuō)白了,@supports檢查的是語(yǔ)法合法性,不是上下文兼容性。它不會(huì)問(wèn)"這個(gè)屬性在這個(gè)選擇器里能不能用",只會(huì)問(wèn)"這個(gè)屬性我認(rèn)不認(rèn)識(shí)"。

怎么解決?作者提了三個(gè)可能的方案。第一個(gè)是擴(kuò)展and運(yùn)算符,讓開(kāi)發(fā)者能組合檢測(cè):

@supports selector(::marker) and (content: " - ")

第二個(gè)是引入新運(yùn)算符(比如xand),強(qiáng)制要求兩個(gè)條件在特定上下文中同時(shí)成立。第三個(gè)更直接——新增一個(gè)rule()函數(shù),直接檢測(cè)整條規(guī)則的有效性:

@supports rule(::marker { content: " - " })

這些方案的核心思路都一樣:讓@supports能判斷"這條聲明在這個(gè)地方是否真的有效",而不是只判斷"這條聲明我認(rèn)不認(rèn)識(shí)"。

當(dāng)然,還有個(gè)簡(jiǎn)單粗暴的備選方案:瀏覽器直接禁止嵌套@supports,檢測(cè)到就報(bào)錯(cuò)。但這會(huì)打破大量現(xiàn)有代碼,代價(jià)太高。

作者也提到了現(xiàn)有的變通方案——容器查詢(container queries)和樣式查詢(style queries)。不過(guò)這兩者目前支持度有限,而且只能檢測(cè)自定義屬性,沒(méi)法直接檢測(cè)普通CSS聲明。能用,但不夠徹底。

這個(gè)案例暴露了一個(gè)深層問(wèn)題:CSS的"漸進(jìn)增強(qiáng)"工具本身就不夠漸進(jìn)。開(kāi)發(fā)者以為自己在寫(xiě)防御性代碼,實(shí)際上寫(xiě)的可能是"在部分瀏覽器里靜默失效"的代碼。更麻煩的是,這種失效不會(huì)拋錯(cuò),不會(huì)警告,只是樣式不對(duì)——等你發(fā)現(xiàn)的時(shí)候,可能已經(jīng)上線很久了。

對(duì)于天天跟瀏覽器兼容性打交道的前端工程師來(lái)說(shuō),這不算新聞。但每次遇到這種"規(guī)范說(shuō)一套、瀏覽器做一套、檢測(cè)工具還幫倒忙"的情況,還是會(huì)讓人想嘆氣。畢竟,連"檢測(cè)支持不支持"這個(gè)功能都不完全支持,這本身就很CSS。

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
1650萬(wàn)球員僅得5分,還笑著祝賀張皓嘉,京蜜:買(mǎi)你不如買(mǎi)更好外援

1650萬(wàn)球員僅得5分,還笑著祝賀張皓嘉,京蜜:買(mǎi)你不如買(mǎi)更好外援

南海浪花
2026-05-10 05:25:33
商務(wù)部:中俄貿(mào)易連續(xù)三年突破2000億美元

商務(wù)部:中俄貿(mào)易連續(xù)三年突破2000億美元

界面新聞
2026-05-09 10:17:43
開(kāi)發(fā)者怒停更!華為被指套取合作信息,用于鴻蒙適配招標(biāo)!

開(kāi)發(fā)者怒停更!華為被指套取合作信息,用于鴻蒙適配招標(biāo)!

云頭條
2026-05-09 23:07:28
沒(méi)亡國(guó),但這回真的藥丸了...

沒(méi)亡國(guó),但這回真的藥丸了...

我是歷史其實(shí)挺有趣
2026-05-09 18:20:11
被官方痛批的“男菩薩”,讓多少景區(qū)晚節(jié)不保?

被官方痛批的“男菩薩”,讓多少景區(qū)晚節(jié)不保?

金錯(cuò)刀
2026-05-08 15:45:01
有沒(méi)有人敢爆自己的瓜?網(wǎng)友:確定玩這么大嗎?

有沒(méi)有人敢爆自己的瓜?網(wǎng)友:確定玩這么大嗎?

夜深愛(ài)雜談
2026-02-18 20:55:58
美軍剛射戰(zhàn)斧,不到24小時(shí),解放軍直接回?fù)?,亮出南海最硬底?>
    </a>
        <h3>
      <a href=云上烏托邦
2026-05-09 14:53:05
昨晚湄洲島大場(chǎng)面!劉濤冒雨跪拜媽祖,一道光打下來(lái)我真信了

昨晚湄洲島大場(chǎng)面!劉濤冒雨跪拜媽祖,一道光打下來(lái)我真信了

陳意小可愛(ài)
2026-05-10 04:19:26
上海街頭偶遇奚夢(mèng)瑤!無(wú)妝造生圖,網(wǎng)友吵翻:臉普通但氣質(zhì)殺瘋了

上海街頭偶遇奚夢(mèng)瑤!無(wú)妝造生圖,網(wǎng)友吵翻:臉普通但氣質(zhì)殺瘋了

星Xin辰大海
2026-05-10 00:10:00
楊受成“霸占”容祖兒半生:不娶不放,到底圖什么?

楊受成“霸占”容祖兒半生:不娶不放,到底圖什么?

陳意小可愛(ài)
2026-05-09 15:56:56
衛(wèi)星圖像下駭人一幕:伊朗哈爾克島附近海域浮現(xiàn)大片油污

衛(wèi)星圖像下駭人一幕:伊朗哈爾克島附近海域浮現(xiàn)大片油污

財(cái)聯(lián)社
2026-05-09 09:30:22
比穆里尼奧還意外!皇馬換帥突發(fā)反轉(zhuǎn),球迷看完集體炸鍋

比穆里尼奧還意外!皇馬換帥突發(fā)反轉(zhuǎn),球迷看完集體炸鍋

瀾歸序
2026-05-10 03:03:26
國(guó)安部發(fā)布緊急提醒:你的手機(jī)或已成“間諜站”!

國(guó)安部發(fā)布緊急提醒:你的手機(jī)或已成“間諜站”!

看看新聞Knews
2026-05-09 14:54:03
員工人均獎(jiǎng)金達(dá)610萬(wàn)人民幣?SK海力士回應(yīng)

員工人均獎(jiǎng)金達(dá)610萬(wàn)人民幣?SK海力士回應(yīng)

第一財(cái)經(jīng)資訊
2026-05-09 16:50:23
張皓嘉絕殺北京!聽(tīng)聽(tīng)劉曉宇李克怎么說(shuō),為何能反敗為勝?

張皓嘉絕殺北京!聽(tīng)聽(tīng)劉曉宇李克怎么說(shuō),為何能反敗為勝?

南海浪花
2026-05-09 22:39:08
真狠!連跌兩年從14跌到2.86又橫盤(pán)8年,呂強(qiáng)、高盛、摩根卻重倉(cāng)

真狠!連跌兩年從14跌到2.86又橫盤(pán)8年,呂強(qiáng)、高盛、摩根卻重倉(cāng)

長(zhǎng)風(fēng)價(jià)值掘金
2026-05-09 22:32:49
無(wú)視所有干擾!一發(fā)端掉整個(gè)炮兵陣地,給全世界陸軍上了一課

無(wú)視所有干擾!一發(fā)端掉整個(gè)炮兵陣地,給全世界陸軍上了一課

深度報(bào)
2026-05-08 22:24:49
薪酬改革后扎心!有的央國(guó)企員工,已經(jīng)連續(xù)幾個(gè)月只拿基本工資了

薪酬改革后扎心!有的央國(guó)企員工,已經(jīng)連續(xù)幾個(gè)月只拿基本工資了

職場(chǎng)資深秘書(shū)
2026-05-09 22:57:54
拒絕逆轉(zhuǎn)!騎士險(xiǎn)勝活塞,賽后3好1壞消息,哈登末節(jié)救贖太給力

拒絕逆轉(zhuǎn)!騎士險(xiǎn)勝活塞,賽后3好1壞消息,哈登末節(jié)救贖太給力

郝小小看體育
2026-05-10 06:26:52
外國(guó)女人!天生就自帶飽滿骨架,和圓潤(rùn)線條

外國(guó)女人!天生就自帶飽滿骨架,和圓潤(rùn)線條

飛娛日記
2026-04-15 01:44:26
2026-05-10 07:07:00
我是一個(gè)粉刷匠2
我是一個(gè)粉刷匠2
有態(tài)度網(wǎng)友ytd
2399文章數(shù) 31關(guān)注度
往期回顧 全部

科技要聞

美國(guó)政府強(qiáng)力下場(chǎng) 蘋(píng)果英特爾達(dá)成代工協(xié)議

頭條要聞

演員文章面館大火后又開(kāi)酒吧 多位明星到場(chǎng)母親也現(xiàn)身

頭條要聞

演員文章面館大火后又開(kāi)酒吧 多位明星到場(chǎng)母親也現(xiàn)身

體育要聞

成立128年后,這支升班馬首奪頂級(jí)聯(lián)賽冠軍

娛樂(lè)要聞

50歲趙薇臉頰凹陷滄桑得認(rèn)不出!

財(cái)經(jīng)要聞

多地號(hào)召,公職人員帶頭繳納物業(yè)費(fèi)

汽車(chē)要聞

軸距加長(zhǎng)/智駕拉滿 阿維塔07L定位大五座SUV

態(tài)度原創(chuàng)

健康
教育
時(shí)尚
本地
軍事航空

干細(xì)胞能讓人“返老還童”嗎

教育要聞

中小學(xué)教師資格考試即將開(kāi)始

伊姐周六熱推:電視劇《喀什戀歌》;電視劇《低智商犯罪》......

本地新聞

用蘇繡的方式,打開(kāi)江西婺源

軍事要聞

美伊突然再次交火 伊朗外長(zhǎng):戰(zhàn)爭(zhēng)準(zhǔn)備程度是1000%

無(wú)障礙瀏覽 進(jìn)入關(guān)懷版