有沒有辦法只在Google Chrome中將下面的CSS應用到特定的div?
position:relative;
top:-2px;
CSS解決方案
來自https://jeffclayton.wordpress.com/2015/08/10/1279/
/* Chrome, Safari, AND NOW ALSO the Edge Browser and Firefox */
@media screen and (-webkit-min-device-pixel-ratio:0) {
div{top:10;}
}
/* Chrome 29+ */
@media screen and (-webkit-min-device-pixel-ratio:0)
and (min-resolution:.001dpcm) {
div{top:0;}
}
/* Chrome 22-28 */
@media screen and(-webkit-min-device-pixel-ratio:0) {
.selector {-chrome-:only(;
property:value;
);}
}
JavaScript解決方案
if (navigator.appVersion.indexOf("Chrome/") != -1) {
// modify button
}
正如我們所知,Chrome是一個Webkit瀏覽器,Safari也是一個Webkit瀏覽器,也是Opera,所以很難使用媒體查詢或CSS黑客來瞄準谷歌Chrome,但Javascript確實更有效。
這是一段針對谷歌Chrome 14及更高版本的Javascript代碼,
var isChrome = !!window.chrome && !!window.chrome.webstore;
下面是谷歌chrome瀏覽器可用的黑客列表,包括受黑客影響的瀏覽器
WebKit黑客:
.selector:not(*:root) {}
谷歌瀏覽器:所有版本 Safari:所有版本 歌劇:14及以后 安卓:所有版本 支持黑客:
@supports (-webkit-appearance:none) {}
谷歌Chrome 28和谷歌Chrome & gt28,Opera 14和Opera & gt14
谷歌瀏覽器:28及更高版本 歌劇:14及以后 Firefox: 64及更高版本(即不再適用) 屬性/價值黑客:
.selector { (;property: value;); }
.selector { [;property: value;]; }
谷歌Chrome 28,以及谷歌Chrome & lt28,Opera 14和Opera & gt14,還有Safari 7和7以下。
谷歌瀏覽器:28及之前 Safari:7及之前 歌劇:14及以后 JavaScript黑客:1
var isChromium = !!window.chrome;
谷歌瀏覽器:所有版本 歌劇:14及以后 安卓系統:4.0.4 JavaScript黑客:2 {Webkit}
var isWebkit = 'WebkitAppearance' in document.documentElement.style;
谷歌瀏覽器:所有版本 Safari:3及更高版本 歌劇:14及以后 JavaScript黑客:3
var isChrome = !!window.chrome && !!window.chrome.webstore;
谷歌瀏覽器:14及更高版本 媒體查詢技巧:1
@media \\0 screen {}
谷歌瀏覽器:22到28 Safari:7及更高版本 媒體查詢黑客:2
@media all and (-webkit-min-device-pixel-ratio:0) and (min-resolution: .001dpcm) { .selector {} }
谷歌瀏覽器:29及更高版本 歌劇:16歲及以后 欲了解更多信息,請訪問該網站
chrome >29和Safari >8的更新:
Safari現在也支持@supports功能。這意味著這些攻擊對Safari也是有效的。
我建議
@ http://codepen.io/sebilasse/pen/BjMoye
/* Chrome only: */
@media all and (-webkit-min-device-pixel-ratio:0) and (min-resolution: .001dpcm) {
p {
color: red;
}
}
這個css瀏覽器選擇器可以幫助你??匆豢?。
CSS瀏覽器選擇器是一個非常小的javascript,只有一行代碼 它賦予CSS選擇器權力。它賦予你寫作的能力 每個操作系統和每個瀏覽器的特定CSS代碼。
http://www . template monster . com/help/how-to-create-browser-specific-CSS-rules-styles . html
僅通過使用將特定的CSS規則應用于Chrome。選擇器:not(*:root)與您的選擇器:
div {
color: forestgreen;
}
.selector:not(*:root), .div1 {
color: #dd14d5;
}
<div class='div1'>DIV1</div>
<div class='div2'>DIV2</div>
到目前為止,我還從未遇到過不得不進行純Chrome CSS黑客攻擊的情況。然而,我發現這是為了移動幻燈片下面的內容。在Chrome中沒有任何影響(但在其他地方運行良好——甚至是IE!).
@media screen and (-webkit-min-device-pixel-ratio:0) {
/* Safari and Chrome, if Chrome rule needed */
.container {
margin-top:100px;
}
/* Safari 5+ ONLY */
::i-block-chrome, .container {
margin-top:0px;
}
公認的答案也符合Firefox 80+。
要針對所有Webkit瀏覽器(Edge 79+,Chrome,Safari),找到Firefox不支持的-webkit特定CSS擴展(使用https://caniuse.com)。這是一個移動的目標;Webkit瀏覽器之一可能會刪除它,而非Webkit瀏覽器可能會添加對它的支持。
這里有兩個例子:
@supports(-webkit-text-security: circle) {
/* Matches Edge 79 - latest (92) */
/* Matches Chrome 4 - latest (95) */
/* Matches Safari 3.1 - latest (15/TP) */
/* Matches Opera 15 - latest (78) */
/* does not match Firefox */
}
@supports(-webkit-tap-highlight-color: black) {
/* Matches Edge 12 - latest (92) */
/* Matches Chrome 16 - latest (95) */
/* Matches Opera 15 - latest (78) */
/* does not match Safari */
/* does not match Firefox */
}
如果你真的只需要Chrome,JS可能是唯一的選擇。
的。選擇器:not(*:root){ } https://stackoverflow.com/a/25496712/1218408的hack通過92版仍然排除Firefox但匹配Safari。
如果你愿意,我們可以給特定的瀏覽器添加一個類。
示例:
var BrowserDetect = {
init: function () {
this.browser = this.searchString(this.dataBrowser) || "Other";
this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "Unknown";
},
searchString: function (data) {
for (var i = 0; i < data.length; i++) {
var dataString = data[i].string;
this.versionSearchString = data[i].subString;
if (dataString.indexOf(data[i].subString) !== -1) {
return data[i].identity;
}
}
},
searchVersion: function (dataString) {
var index = dataString.indexOf(this.versionSearchString);
if (index === -1) {
return;
}
var rv = dataString.indexOf("rv:");
if (this.versionSearchString === "Trident" && rv !== -1) {
return parseFloat(dataString.substring(rv + 3));
} else {
return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
}
},
dataBrowser: [
{string: navigator.userAgent, subString: "Edge", identity: "MS Edge"},
{string: navigator.userAgent, subString: "MSIE", identity: "Explorer"},
{string: navigator.userAgent, subString: "Trident", identity: "Explorer"},
{string: navigator.userAgent, subString: "Firefox", identity: "Firefox"},
{string: navigator.userAgent, subString: "Opera", identity: "Opera"},
{string: navigator.userAgent, subString: "OPR", identity: "Opera"},
{string: navigator.userAgent, subString: "Chrome", identity: "Chrome"},
{string: navigator.userAgent, subString: "Safari", identity: "Safari"}
]
};
BrowserDetect.init();
var bv= BrowserDetect.browser;
if( bv == "Chrome"){
$("body").addClass("chrome");
}
else if(bv == "MS Edge"){
$("body").addClass("edge");
}
else if(bv == "Explorer"){
$("body").addClass("ie");
}
else if(bv == "Firefox"){
$("body").addClass("Firefox");
}
$(".relative").click(function(){
$(".oc").toggle('slide', { direction: 'left', mode: 'show' }, 500);
$(".oc1").css({
'width' : '100%',
'margin-left' : '0px',
});
});
.relative {
background-color: red;
height: 30px;
position: relative;
width: 30px;
}
.relative .child {
left: 10px;
position: absolute;
top: 4px;
}
.oc {
background: #ddd none repeat scroll 0 0;
height: 300px;
position: relative;
width: 500px;
float:left;
}
.oc1 {
background: #ddd none repeat scroll 0 0;
height: 300px;
position: relative;
width: 300px;
float:left;
margin-left: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js"></script>
<div class="relative">
<span class="child">
○
</span>
</div>
<div class="oc">
<div class="data"> </div>
</div>
<div class="oc1" style="display: block;">
<div class="data"> </div>
</div>
如此簡單。只需在加載時向元素添加第二個類或id,指定它是哪個瀏覽器。
因此,基本上在前端,檢測瀏覽器,然后設置id/class,你的css將使用這些瀏覽器特定的名稱標簽
Chrome沒有提供自己的條件來設置CSS定義!應該沒有必要這樣做,因為Chrome解釋網站就像w3c標準中定義的那樣。
所以,你有兩種有意義的可能性:
通過javascript獲取當前瀏覽器(看這里) 通過php/serverside獲取當前瀏覽器(看這里) 我用的是chrome風格的sass mixin,這是Chrome 29+借用上面Martin Kristiansson的解決方案。
@mixin chrome-styles {
@media screen and (-webkit-min-device-pixel-ratio:0)
and (min-resolution:.001dpcm) {
@content;
}
}
像這樣使用它:
@include chrome-styles {
.header { display: none; }
}
如果你想把CSS只應用到Chrome瀏覽器(Webkit/Blink),你可以試試下面的代碼。請記住,還有其他瀏覽器使用Chrome的Webkit引擎...
@supports (not (-moz-appearance:button)) and (contain:paint) and (-webkit-appearance:none) {
body {
background: blue;
}
}
在2022年,這段代碼運行得很好,應該可以在2013年以前的大多數Chrome瀏覽器上運行。它應該過濾掉所有的Internet Explorer、早期的Trident Edge、Firefox、Safari和許多其他瀏覽器。但是請測試!
請記住微軟Edge版本83,后來在2020年5月從舊的三叉戟引擎切換到Chrome的Blink瀏覽器引擎。因此,這應該也適用于較新的Edge瀏覽器。期待這樣的功能,因為發動機在封面下是接近相同的!
關于此CSS的注釋
如上所述,上面的代碼適用于所有共享Chrome Webkit或Blink引擎的現代版本的瀏覽器。在基于Chrome的引擎中盡可能早地支持瀏覽器代碼中的兩個主要決定因素是對CSS特性at-rule @supports和較新的Chrome pre fixed property-WebKit-appearance:none的支持。加起來,Chrome對兩者的全面支持直到2013年5月才開始(我相信)。所以你可以指望Chrome瀏覽器版本28到今天會或應該支持上面的CSS黑客。不過還是那句話,請測試!
所以讓我們來看看黑客是如何工作的.....
使用新的@supports at-rule或“功能檢查”允許您的瀏覽器檢查用戶瀏覽器是否支持特定的CSS屬性或功能及其值。問題是很少有老的甚至是新的瀏覽器支持@supports CSS技巧。直到2013年5月瀏覽器發布時,它才真正在Chrome中得到支持。所以這將是最早支持的Chrome瀏覽器。請記住,Chrome直到2008年才發布,所以是一個遲到的瀏覽器。
但是瀏覽器不支持@supports是這種CSS對幾乎所有其他瀏覽器隱藏的主要方式,因為采用率仍然很低。2010年之前的所有瀏覽器以及2013年之前的大多數瀏覽器都將忽略上述規則。但是Chrome版本27直到今天都支持這個規則。微軟Inte rnet Explorer 1-11完全忽略它,只有微軟Edge版本83到現在(2020年至今)才會理解@supports規則。Firefox直到2019年才采用,大多數Safari用戶代理從2021年開始采用。所以它是一個主要的過濾工具!
通用的& quot外觀& quotCSS屬性(無前綴版本)早在2006年就在Mozilla/ Firefox中得到支持,在2010年左右的Chrome中,有前綴的實驗版本部分支持各種功能。Firefox前綴版本on -moz-appearance和Chrome瀏覽器前綴版本webkit-appearance似乎很早就被采用了,因此會得到廣泛的瀏覽器支持。值& quot按鈕& quot(2006年之前)比& quot無& quot對于& quot外貌& quot,所以增加了你過濾掉那些瀏覽器的機會。"無& quot對于& quot外觀& quot在Chrome中是一個很早就被支持的屬性值(2010),所以被用來盡可能的拓寬Chrome瀏覽器的范圍。因此,在上面的代碼中,這兩個前綴規則都刪除了大多數mozilla/Firefox瀏覽器,并盡可能拓寬了大多數Chrome瀏覽器。
所以你可以假設從2013年開始Chrome瀏覽器將能夠使用下面的規則,并且從那以后所有使用Webkit引擎的瀏覽器都可以看到。
邏輯(not (-moz-appearance:none))對所有Mozilla/Firefox瀏覽器隱藏CSS塊。當結合對& quot@支持& quot然而,它確保甚至更早的都被排除在外。
CSS屬性contain:paint主要是2016年以后在Chrome和Firefox中支持的。所以這將Safari瀏覽器排除在CSS塊之外。然而,一些Safari iOS轉而使用Webkit Chrome引擎。所以contain:paint確保那些老的Safari瀏覽器被排除在Chrome Webkit過濾器之外。
最后,Chrome前綴規則-webkit-appearance只適用于Chrome Webkit瀏覽器。它確保下面的規則只被Chrome看到。請記住,一些后來的Firefox瀏覽器開始支持Chrome前綴屬性。但是有了上面的額外過濾器,它們現在從上面的CSS塊中隱藏了。如上所述,-webkit-appearance:沒有一個被廣泛采用,至少可以追溯到@support at-rules在web瀏覽器中的最早采用日期。據我所知,那是2013年5月左右的某個時候。
所以總的來說,上面的CSS過濾器只允許2013年版本27和2020年版本83的Chrome瀏覽器查看代碼。
為什么我們甚至需要為CHROME應用CSS?
自2010年以來,HTML5和CSS標準發生了變化。不再有W3C推薦標準了,所有瀏覽器都應用了經過仔細協商的標準。這意味著瀏覽器供應商在CSS支持范圍內不斷隨機改變他們的瀏覽器(稱為Evergreen)。這也意味著CSS將動態變化,代碼分叉將很少對齊,所有其他瀏覽器中的CSS將很少相互匹配,并且& quot黑客& quot以上也可能發生變化。
這一失敗的Web標準運動形成了為什么新的CSS在瀏覽器和版本之間具有部分支持的基礎,瀏覽器將越來越看起來不一樣,并且這些前綴CSS hacks將在未來被需要。不好:(
看看這個,對我有用。