如何仅使用CSS来编写应用程序图标图像 [英] How to squircle an app icon image with just CSS

查看:81
本文介绍了如何仅使用CSS来编写应用程序图标图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在撞墙,试图弄清楚如何使用代码播放器的CSS3外壳示例以在我的网站上创建一个iOS-7风格的应用程序图标(在Safari浏览器中进行测试).该示例使用伪标记来裁剪背景颜色,而我需要在<img>周围进行裁剪.如果您不熟悉,鼠形就像是一个圆角矩形,但带有侧面圆角超出圆角半径,如下所示:

I've been banging my head against the wall trying to figure out how to use The Code Player's CSS3 Squircles example to create an iOS-7-style app icon on my website (testing in the Safari browser). The example uses pseudo tags to clip the background color, whereas I need to crop around an <img>. In case you're not familiar, a squircle is like a rounded-rect, but with the sides rounding beyond the corner radius, like so:

.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>

推荐答案

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

The easiest solution might be to create the image with a transparent background until some of the following features are implemented.

如果您可以通过CSS添加图像,则只需在链接(.icons a)中添加高度,宽度,背景图像和背景尺寸.

If you can add the image via CSS then you could just add height, width, background-image and background-size to the link (.icons a).

注意:这可能不是理想的效果,因为它是由背景色补充的.

Note: This might not be the desired effect as it is complemented by a background colour.

.icons a {
      height: 100px;
      width: 100px;
      background-image: url(http://lorempixel.com/256/256/abstract/2/);
      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'元素上的背景色填充.

If this is not the case you could add size and border radius to the image. In this case the the pseudo rounded borders are filled by a background colour on the '.icon a' element.

注意:这可能不是理想的效果,因为它是由背景色补充的.

Note: This might not be the desired effect as it is complemented by a background colour.

.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="http://lorempixel.com/256/256/abstract/2/">
    </a>
</div>  

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

SVG Solution 1: Use a cliping-path using an svg but this is not yet supported by webkit (sticks the clipped image at the top left of the screen). See this link for more info: 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="http://lorempixel.com/400/400/abstract/2/" 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 Solution 2: Use a pattern to add the image as a background image.

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="http://lorempixel.com/256/256/abstract/2/" 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

Other Resources: http://caniuse.com/#search=clip-path (Partial support at time of writing) SVG support: http://caniuse.com/#search=svg

这篇关于如何仅使用CSS来编写应用程序图标图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆