【问题标题】:Resize images from sprite从精灵调整图像大小
【发布时间】:2011-11-26 14:47:16
【问题描述】:

是否可以调整我们从 sprite 接收到的图像的大小。 我的意思是这样的:

background: url(../images/sprite.png) no-repeat -1px -1170px;
display: block;
height: 14px;
width: 14px;

是否可以从 sprite 更改宽度和高度?例如,如果我在精灵中有铅笔图标,分辨率为 40x40,但我想将此铅笔图标显示为 20x20 像素

提前谢谢你。

【问题讨论】:

标签: html css


【解决方案1】:

另一种解决方案是使用 css3 的 zoom: .5; 属性。

【讨论】:

  • 轰隆隆!像冠军一样工作。我只需要支持移动。
  • 我希望我能给你更多的赞成票。这是一个旧的,但仍然非常有效。
  • 很遗憾在 Firefox 中不支持。
  • 我认为 transform: scale(.5); /* 小 50% */,会是更好的答案。因为它支持无处不在。
【解决方案2】:

您可以在 css3 中使用background-size 属性:

background-size: 50% 50%;

【讨论】:

  • 你的位置可能需要改变,因为精灵现在是一半大小。
  • 非常感谢,它帮助了我。你拯救了我的一天!
  • 定位一个百分比,然后就不用改了。
  • @jacob 使用百分比结合 zmanc 的答案让我到达了我想去的地方!谢谢大家。
【解决方案3】:

更改background-size 将使您每次都必须重新验证容器的widthheight

使用zoom 时,您将不支持firefox

...

另一种选择是使用:

transform: scale(.5); /* 50% smaller */
transform: scale(1.5); /* 50% bigger */

背面是缩放后的元素仍会保留其原始空间。

【讨论】:

    【解决方案4】:

    在谷歌搜索此答案后,我在这里找到了解决方案:https://stackoverflow.com/a/10826761/2100636

    它的工作原理是它是响应式的,尽管它没有使用背景图像来做到这一点......它确实适用于所有浏览器,而不是使用 background-size 选项,它在旧浏览器中不起作用 -这个方法可以。*

    *至少在我测试时是这样。

    您可以在此处查看演示:http://tobyj.net/responsive-sprites/

    我在左边有一个图标,右边有文字的情况下使用了这个,它会缩小我的图标以保持响应能力。

    【讨论】:

      【解决方案5】:

      2018年解决方案:

      假设我们有 5X4 网格的精灵。

      第一步是固定背景图片相对于大陆的大小

      .sprite{ background-size: 500% 400%; }
      

      现在我们有了响应式精灵。

      接下来是使用 precente 来定位背景,这样我们的人物就会出现。计算是这样的:

      background-position: calc( var(--colum) * 100% / 5 - 1) calc(var(--row) * 100% / 4 - 1);
      

      现在我们需要在每个图中定义列和行是位置

      .figure1{ --row:1, --column:0 }
      .figure2{ --row:1, --column:1 }
      // etc...
      

      我们在一起:

      .sprite{
           background-size: 500% 400%;
           background-position: calc( var(--colum) * 100% / 4) calc(var(--row) * 100% / 3); 
       }
      
      .figure1{ --row:0, --column:0 }
      .figure2{ --row:0, --column:1 }
      .figure3{ --row:0, --column:2 }
      .figure4{ --row:0, --column:3 }
      .figure5{ --row:1, --column:0 }
      // etc...
      

      不错的卡片演示:https://repl.it/@perymimon/responsive-sprite

      完整标签:https://responsive-sprite--perymimon.repl.co/

      【讨论】:

      • 很好,但是在您的示例中,您使用 css 网格精灵:精灵中的所有单个图像的尺寸都相等。您的解决方案是否也适用于包含各种尺寸图像的精灵?
      • 如果某些网格系统上的精灵布局我认为您仍然可以使用该方法,只需跳过一些图块。最主要的是你可以用百分比来计算位置
      【解决方案6】:

      background-size 就是你要找的东西。

      #example1 {
          background-size: 40px 40px;
      }
      #example2 {
          background-size: 20px 20px;
      }
      

      【讨论】:

      • 这很接近,但精灵几乎肯定比他想要缩小的特定图标大。如果他把整个背景缩小到 20x20,他的图标就会太小了。
      【解决方案7】:

      使用变换只会改变图像的缩放而不是大小。为了将精灵图像的大小从 40 像素 x 40 像素更改为 20 像素 x 20 像素,您需要将精灵图像的大小更改为 20 像素 x 20 像素,然后调整背景大小以适应该区域中的图像精灵。您还需要调整背景位置以显示正确的精灵部分。

      #home {
          width: 46px;
          height: 44px;
          background: url(https://www.w3schools.com/css/img_navsprites.gif) 0 0;
      }
      
      #next {
          width: 43px;
          height: 44px;
          background: url(https://www.w3schools.com/css/img_navsprites.gif) -91px 0;
      }
      
      
      #resizedHome {
          width: 20px;
          height: 20px;
          background: url(https://www.w3schools.com/css/img_navsprites.gif) 0 0;
          background-size: 306%;
      }
      
      #resizedNext {
          width: 20px;
          height: 20px;
          background: url(https://www.w3schools.com/css/img_navsprites.gif) -102px 0;
          background-size: 306%;
      }
      <h5>
      Original Sprite Image
      </h5>
      <img id="home" ><br><br>
      <img id="next" >
      <br><br>
      <h5>
      Resized Sprite Image
      </h5>
      <img id="resizedHome" ><br><br>
      <img id="resizedNext" >

      或者

      https://jsfiddle.net/vivek11432/ep0m4yf6/

      【讨论】:

      • 如何根据要变换的大小(46px -> 20px)计算新的背景大小和新的位置?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 2013-09-01
      • 2012-10-12
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多