让 polyfill “vminpoly” 与内部 CSS 一起工作

Getting polyfill "vminpoly" working with internal CSS

提问人:oatmealNUGGY 提问时间:6/6/2020 最后编辑:halferoatmealNUGGY 更新时间:8/14/2020 访问量:131

问:

在 Saabi 的 vminpoly 的 github 上,一个 vw 和 vh 单元 polyfill (https://github.com/saabi/vminpoly),它说:

现在只解析链接的样式表,但这非常简单 来解析“style”元素。

vw 和 vh CSS 内部样式元素如何与 vminpoly 一起使用?

javascript css internet-explorer-7 polyfills 视口单元

评论

1赞 Yu Zhou 6/8/2020
你需要在内部样式元素中填充吗?我没有找到使用 vminpoly 执行此操作的方法。您使用的是哪个版本的浏览器?我认为最好的方法是在链接的样式表中连接css样式,然后使用vminpoly。vwvh
0赞 oatmealNUGGY 6/9/2020
特别是仅 Plolyfilling:vw(仅适用于桌面宽度上的字体大小)。Internet Explorer 6、7 或 8,任何可用的方法。

答:

2赞 Yu Zhou 6/9/2020 #1

您可以参考下面的代码来支持,特别是:vhvw

(function($, window) {

  var $win = $(window),
    _css = $.fn.css;

  function viewportToPixel(val) {
    var percent = val.match(/\d+/)[0] / 100,
      unit = val.match(/[vwh]+/)[0];
    return (unit == 'vh' ? $win.height() : $win.width()) * percent + 'px';
  }

  function parseProps(props) {
    var p, prop;
    for (p in props) {
      prop = props[p];
      if (/[vwh]$/.test(prop)) {
        props[p] = viewportToPixel(prop);
      }
    }
    return props;
  }

  $.fn.css = function(props) {
    var self = this,
      update = function() {
        return _css.call(self, parseProps($.extend({}, props)));
      };
    $win.resize(update);
    return update();
  };

}(jQuery, window));

//Usage:
$('div').css({
  height: '50vh',
  width: '50vw',
  marginTop: '25vh',
  marginLeft: '25vw',
  fontSize: '10vw'
});
body {
  margin: 0;
}

div {
  background: #fa7098;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>hello</div>

IE 中的结果是这样的:

enter image description here

评论

0赞 oatmealNUGGY 6/20/2020
这对我来说是一个有效的替代品,而不是 vminpoly。谢谢。