背景位置在css精灵图像中的背景大小

时间:2016-04-27 18:18:26

标签: css css3

我在一个图像中有三(3)个社交图标,在另一个图像中有相同的双尺寸图标用于视网膜显示。我以为我的CSS会是这样的:

Dim AppExcel as New Excel.Application
Dim workbook As Excel.Workbook = AppExcel.Workbooks.Add()
'Range
Dim cellrange1 as Excel.Range = AppExcel.ActiveWorkbook.Sheets("Feuil1").Range("A1")

但是,.social-media li a { width: 44px; height: 48px; background: url('social-media.png') no-repeat; } @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi), (min-resolution: 1.25dppx) { .social-media li a { background: url('social-media@2x.png') no-repeat; background-size: 44px 48px; /* same with width & height of normal (non-retina) image for fitting in equal space */ } } 似乎在这里产生了问题。但是,如果没有这个属性,我就无法在background-size(普通图像块)维度块中适应视网膜显示的图像。什么是正确的方法?

在下面的小提琴中,你会看到,我已经放了三个街区。 1 st 一个用于正常图像,2 nd 一个用于显示具有原始双倍大小的视网膜图像演示(它基本上用于检查正确性我的44 x 48),最后一个用于在正常图像的大小块内显示视网膜图像演示(因为我想首先在普通设备而不是视网膜设备上检查一下,看看如何他们将在视网膜设备中表现)。

简而言之,我需要正确的结果。

Fiddle Demo.



background-position

#normal .social-media {
  list-style: none;
  display: inline-block;
  padding-top: 25px;
}
#normal .social-media li {
  float: left;
  margin-right: 20px;
}
#normal .social-media li:last-child {
  margin-right: 0;
}
#normal .social-media li a {
  width: 44px;
  height: 48px;
  background: url('http://i.imgur.com/xr8VaHh.png') no-repeat;
  display: block;
}
#normal .social-media li a.facebook-icon {
  background-position: 0 -60px;
}
#normal .social-media li a.facebook-icon:hover {
  background-position: 0 0;
}
#normal .social-media li a.twitter-icon {
  background-position: -64px -60px;
}
#normal .social-media li a.twitter-icon:hover {
  background-position: -64px 0;
}
#normal .social-media li a.linked-in-icon {
  background-position: -128px -60px;
}
#normal .social-media li a.linked-in-icon:hover {
  background-position: -128px 0;
}
/***************** For Retina background image with original size **************/

#forRetinaOriginalSize .social-media {
  list-style: none;
  display: inline-block;
  padding-top: 25px;
}
#forRetinaOriginalSize .social-media li a {
  width: 88px;
  height: 96px;
  background: url('http://i.imgur.com/Cif180D.png') no-repeat;
  display: block;
}
#forRetinaOriginalSize .social-media li a.facebook-icon {
  background-position: -30px -141px;
}
#forRetinaOriginalSize .social-media li a.twitter-icon {
  background-position: -157px -141px;
}
#forRetinaOriginalSize .social-media li a.linked-in-icon {
  background-position: -285px -141px;
}
#forRetinaOriginalSize .social-media li a.facebook-icon:hover {
  background-position: -30px -21px;
}
#forRetinaOriginalSize .social-media li a.twitter-icon:hover {
  background-position: -157px -21px;
}
#forRetinaOriginalSize .social-media li a.linked-in-icon:hover {
  background-position: -285px -21px;
}
/***************** For Retina background image with normal size **************/

#forRetinaNormalSize .social-media {
  list-style: none;
  display: inline-block;
  padding-top: 25px;
}
#forRetinaNormalSize .social-media li a {
  width: 44px;
  height: 48px;
  display: block;
  background: url('http://i.imgur.com/Cif180D.png') no-repeat;
  -webkit-background-size: 44px 48px;
  background-size: 44px 48px;
}
#forRetinaNormalSize .social-media li a.facebook-icon {
  background-position: -30px -141px;
}
#forRetinaNormalSize .social-media li a.twitter-icon {
  background-position: -157px -141px;
}
#forRetinaNormalSize .social-media li a.linked-in-icon {
  background-position: -285px -141px;
}
#forRetinaNormalSize .social-media li a.facebook-icon:hover {
  background-position: -30px -21px;
}
#forRetinaNormalSize .social-media li a.twitter-icon:hover {
  background-position: -157px -21px;
}
#forRetinaNormalSize .social-media li a.linked-in-icon:hover {
  background-position: -285px -21px;
}
/* HiDPI support for Normal */

@media (-o-min-device-pixel-ratio: 5/4),
(-webkit-min-device-pixel-ratio: 1.25),
(min-resolution: 120dpi),
(min-resolution: 1.25dppx) {
  #normal .social-media li a {
    background: image-url('http://i.imgur.com/Cif180D.png') no-repeat;
    -webkit-background-size: 44px 48px;
    background-size: 44px 48px;
  }
  #normal .social-media li a.facebook-icon {
    background-position: -30px -141px;
  }
  #normal .social-media li a.twitter-icon {
    background-position: -157px -141px;
  }
  #normal .social-media li a.linked-in-icon {
    background-position: -285px -141px;
  }
  #normal .social-media li a.facebook-icon:hover {
    background-position: -30px -21px;
  }
  #normal .social-media li a.twitter-icon:hover {
    background-position: -157px -21px;
  }
  #normal .social-media li a.linked-in-icon:hover {
    background-position: -285px -21px;
  }
}




2 个答案:

答案 0 :(得分:1)

您需要使用高密度设备(@ 2x)的图像将所有尺寸除以2,为此您需要均匀尺寸的图像(因为所有尺寸将被2除以)才能看起来很好。

我修改了facebook图标,例如:https://jsfiddle.net/wqkewd03/3/

#forRetinaNormalSize .social-media li a {
  width: 44px;
  height: 48px;
  display: block;
  background: url('http://i.imgur.com/Cif180D.png') no-repeat;
  -webkit-background-size: 268px 129px;
  background-size: 268px 129px;

#forRetinaNormalSize .social-media li a.facebook-icon {
  background-position: -15px -70px;
}

#forRetinaNormalSize .social-media li a.facebook-icon:hover {
  background-position: -15px -10px;
}

我通常使用“@ 2x”作为默认设置(对于那种图像:图标等),使用这种方法,图像不会太大,今天的浏览器缩放也不错,为什么不使用1版本和您需要专门针对它的一半代码。当高密度桌面屏幕到来时,它似乎是面向未来的。

答案 1 :(得分:0)

图像图标的时代已经结束。您应该切换到使用字形图标库。它们更干净,因为它们是字体/矢量,几乎可以扩展到任何尺寸。

通过将此CSS Hexagon tutorialFont Awesome相结合,我创建了一个不依赖于精灵或图像锯齿的替代方案。

如果您使用SASS或SCSS,下面的CSS可以进一步减少。



.social-media:before, .social-media:after {
  position: absolute;
  border-left: 52px solid transparent;
  border-right: 52px solid transparent;
  content: " ";
  width: 0;
  height: 0;
}
.social-media:before {
  top: -30px;
  border-bottom: 30px solid #6C6;
}
.social-media {
  display: inline-block;
  margin-top: 30px;
  width: 104px;
  height: 60px;
  background-color: #6C6;
  position: relative;
}
.social-media:after {
  bottom: -30px;
  border-top: 30px solid #6C6;
}

.social-media span {
  text-align: center;
  width: 100%;
  font-size: 3em;
  line-height: 1.25em;
}

.social-media:before { border-bottom: 30px solid #000000; }
.social-media { background-color: #000000; color: #FFFFFF; }
.social-media:after { border-top: 30px solid #000000; }

.social-media.facebook:hover:before { border-bottom: 30px solid #0268A0; }
.social-media.facebook:hover { background-color: #0268A0; color: #FFFFFF; }
.social-media.facebook:hover:after { border-top: 30px solid #0268A0; }

.social-media.twitter:hover:before { border-bottom: 30px solid #03BEE4; }
.social-media.twitter:hover { background-color: #03BEE4; color: #FFFFFF; }
.social-media.twitter:hover:after { border-top: 30px solid #03BEE4; }

.social-media.linkedin:hover:before { border-bottom: 30px solid #0098DC; }
.social-media.linkedin:hover { background-color: #0098DC; color: #FFFFFF; }
.social-media.linkedin:hover:after { border-top: 30px solid #0098DC; }

<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" />

<div class="social-media facebook">
  <span class="fa fa-facebook"></span>
</div>

<div class="social-media twitter">
  <span class="fa fa-twitter"></span>
</div>

<div class="social-media linkedin">
  <span class="fa fa-linkedin"></span>
</div>
&#13;
&#13;
&#13;

SCSS规则

@mixin hex($bgcolor:#000000, $fgcolor:#FFFFFF) {
  &:before { border-bottom: 30px solid $bgcolor; };
  background-color: $bgcolor; color: $fgcolor;
  &:after { border-top: 30px solid $bgcolor; };
}

.social-media { @include hex(); }
.social-media.facebook:hover { @include hex(#0268A0); }
.social-media.twitter:hover { @include hex(#03BEE4); }
.social-media.linkedin:hover { @include hex(#0098DC); }