html - 如何仅使用 CSS 压缩应用程序图标图像

标签 html ios css safari

我一直在用头撞墙试图找出如何使用 The Code Player's CSS3 Squircles example在我的网站上创建一个 iOS-7 风格的应用程序图标(在 Safari 浏览器中测试)。该示例使用伪标签来裁剪背景颜色,而我需要围绕 <img> 进行裁剪.如果你不熟悉,squircle就像一个圆 Angular 矩形,但边的圆度超出了 Angular 半径,如下所示:

a squircle

.icons img {
  width: 100px;
  height: 100px;

  border-radius: 24%;
}

.icons a {
  text-decoration: none;
  display: inline-block;
  position: relative;
}
/*Now we will create fish-eye shapes using pseudo elements and clip them to add a curve to the sides of the icons*/
.icons a:before, .icons a:after {
  content: '';
  position: absolute; left: 0; top: 0;
  width: 100%; height: 100%;
  background: inherit;
  border-radius: 100%; /*circle*/
  /*time to transform the circle into fish-eye shape. iOS7 style now.*/
  -webkit-transform: scaleX(2) scaleY(1.05);
  transform: scaleX(2) scaleY(1.05);
  /*clipping the left and right sides - 17px from the left and right*/
  clip: rect(0, 66px, 100px, 34px);
  /*pushing it behind the icon*/
  z-index: -1;
}
/*duplicating the :before element and rotating it 90deg and swapping the X/Y transforms*/
.icons a:after {
  -webkit-transform: scaleY(2) scaleX(1.05) rotate(90deg);
}
<div class="icons">
  <a href="#"><img src="http://lorempixel.com/256/256/abstract/2/" /></a>
</div>

最佳答案

最简单的解决方案可能是创建具有透明背景的图像,直到实现以下某些功能。

如果您可以通过 CSS 添加图像,那么您只需将高度、宽度、背景图像和背景大小添加到链接 (.icons a)。

注意:这可能不是预期的效果,因为它由背景颜色补充。

.icons a {
      height: 100px;
      width: 100px;
      background-image: url(https://picsum.photos/256/);
      background-size: cover;
      text-decoration: none;
      color: white;
      display: inline-block;
      margin: 20px;
      border-radius: 24px;
      position: relative;
    }

    .icons a:before,
    .icons a:after {
      content: '';
      position: absolute;
      left: 0;
      top: 0;
      width: 100%;
      height: 100%;
      background: inherit;
      border-radius: 100%;
      -webkit-transform: scaleX(2) scaleY(1.05);
      transform: scaleX(2) scaleY(1.05);
      clip: rect(0, 66px, 100px, 34px);
      z-index: -1;
    }

    .icons a:after {
      -webkit-transform: scaleY(2) scaleX(1.05) rotate(90deg);
      transform: scaleY(2) scaleX(1.05) rotate(90deg);
    }
<div class="icons">
    <a href="#"></a>
</div>

如果不是这种情况,您可以为图像添加大小和边框半径。在这种情况下,伪圆形边框由“.icon a”元素上的背景色填充。

注意:这可能不是预期的效果,因为它由背景颜色补充。

.icons a {
      height: 100px;
      width: 100px;
      background: red;
      text-decoration: none;
      color: white;
      display: inline-block;
      margin: 20px;
      border-radius: 24px;
      position: relative;
    }
    .icons img{
      height: 100px;
      width: 100px;
      border-radius: 24px;
    }
    .icons a:before, .icons a:after {
      content: '';
      overflow: hidden;
      position: absolute; left: 0; top: 0;
      width: 100%; height: 100%;
      background: inherit;
      border-radius: 100%;
      -webkit-transform: scaleX(2) scaleY(1.05);
      transform: scaleX(2) scaleY(1.05);
      clip: rect(0, 66px, 100px, 34px);
      z-index: -1;
    }
    .icons a:after {
        -webkit-transform: scaleY(2) scaleX(1.05) rotate(90deg);
        transform: scaleY(2) scaleX(1.05) rotate(90deg);
    }
<div class="icons">
    <a href="#">
    <img src="https://picsum.photos/256/">
    </a>
</div>  

SVG 解决方案 1: 使用 svg 的剪切路径,但 webkit 尚不支持(将剪切的图像粘贴在屏幕的左上角)。有关详细信息,请参阅此链接:https://css-tricks.com/clipping-masking-css/#comment-1587234

#squircle{  
  -webkit-clip-path: url(#svg-shape);
  -moz-clip-path: url(#svg-shape);
  -o-clip-path: url(#svg-shape);
  -ms-clip-path: url(#svg-shape);
  clip-path: url(#svg-shape);
}
<img src="https://picsum.photos/400/" id="squircle">

<svg height="0" width="0" version="1.1"
     xmlns="http://www.w3.org/2000/svg">
  <defs>
  <clipPath id="svg-shape">
<path d="M100,200c43.8,0,68.2,0,84.1-15.9C200,168.2,200,143.8,200,100s0-68.2-15.9-84.1C168.2,0,143.8,0,100,0S31.8,0,15.9,15.9C0,31.8,0,56.2,0,100s0,68.2,15.9,84.1C31.8,200,56.2,200,100,200z" />
    </clipPath>
    </defs>
</svg>

SVG 解决方案 2: 使用图案将图像添加为背景图像。

svg.iOS-svg {
  height: 100px;
  width: 100px;
}
<svg class="iOS-svg" viewBox="0 0 200 200">
  <defs>
    <pattern id="squircle" patternUnits="userSpaceOnUse" width="200" height="200">
        <image xlink:href="https://picsum.photos/256/" x="0" y="0" width="200" height="200" />
    </pattern>
  </defs>

    <path d="M100,200c43.8,0,68.2,0,84.1-15.9C200,168.2,200,143.8,200,100s0-68.2-15.9-84.1C168.2,0,143.8,0,100,0S31.8,0,15.9,15.9C0,31.8,0,56.2,0,100s0,68.2,15.9,84.1C31.8,200,56.2,200,100,200z" fill="url(#squircle)" />
</svg>

其他资源: http://caniuse.com/#search=clip-path (在撰写本文时部分支持) SVG 支持:http://caniuse.com/#search=svg

关于html - 如何仅使用 CSS 压缩应用程序图标图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32979585/

相关文章:

html - 过渡不适用于 FF

html - Bootstrap 4 Flex 导航栏调整大小对齐

javascript - 如何在调用数据库后通过 href 链接为每一行创建一个弹出窗口

html - 如何将此图像垂直放置?

ios - 如何解决 iOS 64 位错误

ios - 删除 UITableViewCell 后,出现空白行

ios - 如果不使用通用 iOS 设备创建存档,我提交给 Apple 的 Xcode 存档是否可以?

jquery - 为什么 HTML 标记中的空格会导致 CSS 不同?

javascript - CSS 列数和边距

html - 在 Safari 中打印时不会出现某些文本