【问题标题】:responsive images resizing based on css classes基于 CSS 类调整大小的响应式图像
【发布时间】:2015-04-30 18:47:57
【问题描述】:

我想根据媒体查询调整图像大小。如果这只是一张图片,我会在图片上附加一个 CSS 类,并针对不同的屏幕分辨率覆盖它。

问题是图像实际上是字体很棒的图标。这是一个例子:http://fortawesome.github.io/Font-Awesome/examples/

<i class="fa fa-camera-retro fa-lg"></i> fa-lg
<i class="fa fa-camera-retro fa-2x"></i> fa-2x
<i class="fa fa-camera-retro fa-3x"></i> fa-3x
<i class="fa fa-camera-retro fa-4x"></i> fa-4x
<i class="fa fa-camera-retro fa-5x"></i> fa-5x

fa-lg、fa-2x、fa-3x 等是应用不同尺寸的 CSS 类。在这里进行响应式方法的最佳方法是什么 - 根据屏幕大小更改图标大小?我不想修改 3rd 方库(字体真棒)本身。似乎更改屏幕分辨率应该用另一个类替换一个类......

【问题讨论】:

  • 可以选择 js MatchMedia 吗?
  • @Anima-t3d 你的意思是像:if (window.matchMedia("(min-width: 400px)").matches) { attach fa-2x class } else { remove fa-2x class }?
  • 尝试在 CSS 中将此字体与 :before、content 和 font-size 一起使用。
  • @tkoomzaaskz 是的,确实,你的答案就是我会发布的 ;-) 在我看来,以后可扩展的最佳选择。我还用 polyfill 评论了你的答案

标签: html css image responsive-design


【解决方案1】:

fa-lg 与fa-5x 的图标相同,只是调整了大小。因此,对于您的媒体查询,只需使用普通的font-size: 方法将图标调整为您喜欢的任何大小。

我通常使用before: 和字体FontAwesome 使用他们的unicode,如此处所示; http://fortawesome.github.io/Font-Awesome/icon/camera-retro/unicode:f083

.aside .cat_title:before {
    content: "\f083";
    font-family: FontAwesome;
    font-style: normal;
    font-weight: normal;
    text-decoration: inherit;
    font-size: 32px;
    padding-right: 3px;
    color: #FC0;
}

@media only screen
    and (max-width : 320px) {
    .aside .cat_title:before {
        content: "\f083";
        font-family: FontAwesome;
        font-style: normal;
        font-weight: normal;
        text-decoration: inherit;
        font-size: 10px;
        padding-right: 3px;
        color: #FC0;
    }

  }

然后再针对每个媒体查询等。

【讨论】:

  • 所以我必须为每个屏幕分辨率重写每个图标?这似乎不可扩展......
  • 您可以为每个分辨率设置更大的字体(%, em, pt, px, etc.)。
  • @Mardzis 你能举个例子吗?您的意思是为每个分辨率覆盖.fa 类吗?这确实是可扩展的。
【解决方案2】:

根据@Anima-t3d 的建议,我制定了一个完全适合我需求的 javascript/media-query 解决方案:

var mql = window.matchMedia("(min-width: 600px)");
mql.addListener(handleResolutionChange);
handleResolutionChange(mql);

function handleResolutionChange(mql) {
  if (mql.matches) {
    $('.fa').removeClass('fa-2x');
  } else {
    $('.fa').addClass('fa-2x');
  }
}

有一个监听器监视屏幕分辨率并添加或删除内置在 fontawesome 中的 CSS 类。阅读更多:https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Testing_media_queries

【讨论】:

  • 我不推荐上面的代码,它是实验性的,浏览器兼容性非常有限。您最好的方法是使用 font-size imho 对每个图标使用媒体查询
  • @mg33dev 如果我使用 30 个图标和 3 种不同尺寸,我不会复制粘贴或循环 CSS 超过 90 种可能的组合...
猜你喜欢
  • 2018-04-22
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多