【问题标题】:How to set 1px border and 1px outline for ENLARGED blown-up background sprite?如何为放大的放大背景精灵设置 1px 边框和 1px 轮廓?
【发布时间】:2017-09-27 00:03:24
【问题描述】:

我想给我的 css-enlarged 图标 sprite 一点空白,然后是一个 1px 的细轮廓,如下所示:

现在我已经尝试了这些演示,使用相同的优雅 html 和不同的 CSS(在这里站在社区中其他有才华的巨人的肩膀上提供了一些帮助):

JS Fiddle Demo1
JS FIddle Demo2

{
border: 1px solid white;
outline: 1px solid red;
}

但是,在这两种方法中,如您所见,边框(在此处充当间隔)和轮廓都比我想要的 1px 宽得多。这里的挑战是我使用一个巨大的背景和协调作为一个精灵,所以会有background-position: 0 -3048;

如果我尝试在图标的父 div 中设置边框/轮廓,那么整个布局就会崩溃!

如果我尝试background-size: contain,那么整个精灵背景都会被压缩成一个很小的图标大小。

如何实现如上图所示的 1px 细轮廓?谢谢!

【问题讨论】:

  • 投票结束此问题的人:请准确说明您认为此问题存在的问题,以便可以相应地解决和改进。谢谢。

标签: css layout background-image sprite


【解决方案1】:

background-size 是最好的选择,flex 在这里也很有用

您只需更新background-position

.line {
  display: flex;
  margin:1.2em;
  align-items:center;
}
span {
  flex: 1;
  border-bottom: solid red 1px;
  margin:0 0 auto;
  height:25px;/* =============== half ico's height */
}
.line [class] {
  flex: none;
  height: 50px;
  width: 50px;
  border: solid red 1px;
  box-shadow: inset 0 0 0 2px gray;
  background: url(https://s3-us-west-2.amazonaws.com/appdirect-assets/Blog%20Images/Content/2011/SVG-icons.png);
  background-size: 1100% 800%;/* 11x8*/
  background-position: 0px 1%;
}
span:last-of-type {
  text-align: right;
}
.line .ico2 {
  background-position:9.5% 15%;
}
.line .ico3 {
  background-position:20% 14.85%;
}
.bigger [class]{
  height:80px;
  width:80px;
  margin-left:1em;
}
<div class="line">
  <span>text on left</span>
  <span class="ico1"></span>
  <span>text on right</span>
</div>
<div class="line">
  <span>text on left</span>
  <span class="ico2"></span>
  <span>text on right</span>
</div>
<div class="line">
  <span>text on left</span>
  <span class="ico3"></span>
  <span>text on right</span></div>
<div class="line bigger">
background-size rescales automaticly 
  <span class="ico1"></span>
  <span class="ico2"></span>
  <span class="ico3"></span>
</div>

【讨论】:

  • 非常感谢!这个答案解决了我的布局难题:我不知道的很棒的新技术,现在可以尝试学习!谢谢
【解决方案2】:

这是因为您在应用边框的同一元素上有一个transform: scale

在变换之前应用边框,因此边框也会被缩放。

解决方案是将边框放在图标的父元素上,并将缩放应用于子元素。

【讨论】:

  • 谢谢。请查看我更新的问题!我已经澄清了问题,现在实际的挑战和真正的问题更加明显。请检查这两个演示,您的建议不适用于图标精灵:jsfiddle.net/effb5849jsfiddle.net/q7nqkcu8图标,所以我决定通过更精确地处理现实生活中的难题来使我的演示更复杂。
【解决方案3】:

只要你使用比例元素,你永远不会得到 1px 的线:

-ms-transform: scale(3); 
-o-transform: scale(3); 
-webkit-transform: scale(3); 
transform: scale(3);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-19
    • 2023-02-11
    • 2018-01-29
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多