クロスブラウザのCSSズームプロパティを完全に取得するのは難しいと感じています..私が持っているのはこれらだけです
zoom: 2;
-moz-transform: scale(2);
クロスブラウザのCSSズームプロパティを完全に取得するのは難しいと感じています..私が持っているのはこれらだけです
zoom: 2;
-moz-transform: scale(2);
これらはクロスブラウザには十分です...
注:@martinがこれが意図したとおりに機能しない可能性があることを指摘したように、これが失敗することを意味するわけではありません。Chromeは、
zoom
プロパティも尊重するため、他のブラウザーの2倍の大きさにします。つまり、2倍大きくなります...
zoom: 2; /* IE */
-moz-transform: scale(2); /* Firefox */
-moz-transform-origin: 0 0;
-o-transform: scale(2); /* Opera */
-o-transform-origin: 0 0;
-webkit-transform: scale(2); /* Safari And Chrome */
-webkit-transform-origin: 0 0;
transform: scale(2); /* Standard Property */
transform-origin: 0 0; /* Standard Property */
HTML
<div class="zoom">BlahBlah</div>
CSS
.zoom {
zoom: 2;
-moz-transform: scale(2);
-moz-transform-origin: 0 0;
-o-transform: scale(2);
-o-transform-origin: 0 0;
-webkit-transform: scale(2);
-webkit-transform-origin: 0 0;
transform: scale(2); /* Standard Property */
transform-origin: 0 0; /* Standard Property */
}
これがcssのみのソリューションです
.csszoom{
-ms-transform: scale(1.5); /* IE 9 */
-ms-transform-origin: 0 0;
-moz-transform: scale(1.5); /* Firefox */
-moz-transform-origin: 0 0;
-o-transform: scale(1.5); /* Opera */
-o-transform-origin: 0 0;
-webkit-transform: scale(1.5); /* Safari And Chrome */
-webkit-transform-origin: 0 0;
transform: scale(1.5); /* Standard Property */
transform-origin: 0 0; /* Standard Property */
}
.ie8 .csszoom{
zoom:1.5;
}
HTMLタグをに変更します
<!--[if lte IE 8]> <html class="ie8"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
スクリプトが実行可能な場合は、将来を見据えた機能検出を使用することで、サポートされている複数のズームプロパティの衝突とブラウザのスニッフィングの両方を回避できます。
注:ここでは便宜上jQueryを使用していますが、jQueryがなくても記述できます。
.zoom {
-moz-transform-origin: 0 0;
-o-transform-origin: 0 0;
-webkit-transform-origin: 0 0;
}
<div class="mySelectorClass">Foobar</div>
var strPropZoom = "zoom";
var blnPropZoomUseScale = false;
$(function() {
var jqBody = $("body");
// Determine the supported 'zoom' method
switch (true) {
case Boolean(jqBody.css("zoom")) : break;
case Boolean(jqBody.css("-moz-transform")) : strPropNameZoom = "-moz-transform"; blnPropZoomUseScale = true; break;
case Boolean(jqBody.css("-o-transform")) : strPropNameZoom = "-o-transform"; blnPropZoomUseScale = true; break;
case Boolean(jqBody.css("-webkit-transform")) : strPropNameZoom = "-webkit-transform"; blnPropZoomUseScale = true; break;
}
})
次に、ズームが必要な場合は、次を呼び出すだけです。
var intZoom = 2.5; // NB: This could be calculated depending on window dimensions
$(".mySelectorClass")
.css(
strPropZoom
,(blnPropZoomUseScale ? "scale(" + intZoom + ")" : intZoom)
)
.addClass("zoom");
@martin(彼は正しい)による上記のコメントに応えて、私はjavascript(いくつかのjQueryを含む)といくつかの@Mrを使用して複雑な回避策を作成しました。エイリアンのCSS。間違いなく、これを達成する他の方法があります-おそらくもっと簡単ですが、次のjsとcssのコンボは私にとってはうまくいきます:
css
.zoom{
-moz-transform: scale(2); /* Firefox */
-moz-transform-origin: 0 0;
-o-transform: scale(2); /* Opera */
-o-transform-origin: 0 0;
zoom:2 /*IE*/;
}
//Notice the absence of any Webkit Transforms
javascript
(function($){
var version=false,
isSafari=Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0,
isOpera=!!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0,
isChrome=!!window.chrome && !isOpera;
if(isChrome){
version=(window.navigator.appVersion.match(/Chrome\/(\d+)\./)!==null) ?
parseInt(window.navigator.appVersion.match(/Chrome\/(\d+)\./)[1], 10) :
0;
version=(version >= 10) ? true : false;
// Don't know what version they switched it. Figured that this was a good guess
}
// I added the extra ternary check in there because when testing in Chrome,
// if I switched the user agent in the overrides section, it kept failing with
// null value for version.
if(isSafari || version){
$('.zoom').css('-webkit-transform','scale(2)');
$('.zoom').css('-webkit-transform-origin','0 0');
// If Scaling based upon different resolutions, a check could be included here
// for window size, and the css could be adjusted accordingly.
}
}(jQuery))
今日の答えは
.zoom {
zoom: 2; /* Chrome */
transform: scale(2); /* FF, neglected by Chrome */
transform-origin: 0;
}
それはクリンチです。;-)