【问题标题】:complete styles for cross browser CSS zoom跨浏览器 CSS 缩放的完整样式
【发布时间】:2012-11-03 19:41:47
【问题描述】:

我发现很难获得完全跨浏览器的 CSS 缩放属性..我只有这些

zoom: 2;
-moz-transform: scale(2);

【问题讨论】:

    标签: css cross-browser zooming


    【解决方案1】:

    这些对于跨浏览器来说已经足够了......

    Demo

    注意:正如@martin 指出的那样,这可能不起作用 有意,并不意味着这会失败,Chrome 只是让它大了 2 倍 比其他浏览器,因为它也尊重zoom 属性。所以它使它变大了 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 */
    }
    

    【讨论】:

    • 不幸的是,这不会按预期工作。现代 Chrome 将同时应用缩放和比例,使其 4 倍大。 http://jsfiddle.net/X4XYf/148/
    • @martin 任何 webkit 端口实际上都会这样做。自 Safari 4 以来,zoomintroduced
    • 是的,如果您可以放弃 IE7 及以下版本,则可以放弃缩放并使用 -ms-zoom 供应商前缀(如果有记忆,IE8+ 支持)。随着 Webkit 的普及,我会说最好不要为一些市场份额约为 0.1% 的随机浏览器提供缩放并完全支持 Webkit。
    • 你也可以加-ms-
    • 应该读过cmets。是的,Chrome 会使用缩放和变换将其翻倍。
    【解决方案2】:

    这是一个纯 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]-->
    

    【讨论】:

      【解决方案3】:

      如果脚本是可行的,那么您可以通过使用面向未来的功能检测来避免多个受支持的缩放属性的冲突和浏览器嗅探。
      注意:我在这里使用 jQuery方便,但没有它也可以写。

      CSS:

      .zoom {
          -moz-transform-origin: 0 0;
          -o-transform-origin: 0 0;
          -webkit-transform-origin: 0 0;
      }
      

      HTML:

      <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");
      

      【讨论】:

        【解决方案4】:

        针对@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))
        

        浏览器检测代码来自here,Chrome版本检测sn-p来自this post

        【讨论】:

        • 我倾向于使用纯 css3 转换比例,以及针对 IE 的特殊样式表(带有条件 cmets)。
        • 是的...那会更容易。没有那么聪明,但肯定更好。 :)
        【解决方案5】:

        看来今天的答案是

        .zoom {
             zoom: 2; /* Chrome */
             transform: scale(2); /* FF, neglected by Chrome */
             transform-origin: 0;
        }
        

        这是一个关键。 ;-)

        【讨论】:

          猜你喜欢
          • 2023-04-03
          • 1970-01-01
          • 1970-01-01
          • 2015-01-22
          • 1970-01-01
          • 2010-11-29
          • 1970-01-01
          • 1970-01-01
          • 2012-09-30
          相关资源
          最近更新 更多