比方说,我想要一种只显示HTML中250x250像素的图像的中心50x50像素的方法。我怎样才能做到这一点。另外,有没有办法对css:url()引用执行此操作?
我知道CSS中的剪辑,但这似乎仅在与绝对定位一起使用时才起作用。
如问题中所述,存在clip css属性,尽管它确实要求被裁剪的元素是position: absolute;(这很可惜):
1 2 3 4 5 6 7 8
| .container {
position: relative;
}
#clip {
position: absolute;
clip: rect(0, 100px, 200px, 0);
/* clip: shape(top, right, bottom, left); NB 'rect' is the only available option */
} |
1 2 3 4
| <img src="http://lorempixel.com/200/200/nightlife/3" />
<img id="clip" src="http://lorempixel.com/200/200/nightlife/3" /> |
JS Fiddle演示,用于实验。
为补充原始答案(有些迟了),我正在编辑以显示clip-path的用法,该用法已替换了现在已弃用的clip属性。
clip-path属性允许以下选项的范围(比原始的clip更多):
-
inset —矩形/立方体形状,用四个值定义为\\'distance-from \\'(top right bottom left)。
-
circle-circle(diameter at x-coordinate y-coordinate)。
-
ellipse-ellipse(x-axis-length y-axis-length at x-coordinate y-coordinate)。
-
polygon —由相对于元素左上角的原点的一系列x / y坐标定义。当路径自动关闭时,多边形的实际最小点数应为3,再少(2)为一条线或(1)为一点:polygon(x-coordinate1 y-coordinate1, x-coordinate2 y-coordinate2, x-coordinate3 y-coordinate3, [etc...])。
-
url-这可以是本地URL(使用CSS id选择器)或外部文件的URL(使用文件路径)来标识SVG,尽管我尚未尝试使用SVG(到目前为止) ),因此我无法提供有关其收益或警告的任何见解。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| div.container {
display: inline-block;
}
#rectangular {
-webkit-clip-path: inset(30px 10px 30px 10px);
clip-path: inset(30px 10px 30px 10px);
}
#circle {
-webkit-clip-path: circle(75px at 50% 50%);
clip-path: circle(75px at 50% 50%)
}
#ellipse {
-webkit-clip-path: ellipse(75px 50px at 50% 50%);
clip-path: ellipse(75px 50px at 50% 50%);
}
#polygon {
-webkit-clip-path: polygon(50% 0, 100% 38%, 81% 100%, 19% 100%, 0 38%);
clip-path: polygon(50% 0, 100% 38%, 81% 100%, 19% 100%, 0 38%);
} |
1 2 3 4 5 6 7 8 9 10 11 12 13
| <img id="control" src="http://lorempixel.com/150/150/people/1" />
<img id="rectangular" src="http://lorempixel.com/150/150/people/1" />
<img id="circle" src="http://lorempixel.com/150/150/people/1" />
<img id="ellipse" src="http://lorempixel.com/150/150/people/1" />
<img id="polygon" src="http://lorempixel.com/150/150/people/1" /> |
JS Fiddle演示,用于实验。
参考文献:
-
clip strike> —注意:已弃用。
-
clip-path(MDN)。
-
clip-path(W3C)。
一种方法是在容器(td,div,span等)中将要显示的图像设置为背景,然后调整背景位置以获取所需的sprite。
以下是另一种选择,尽管它不是最干净的,因为它假定图像是容器中的唯一元素,例如在这种情况下:
1 2 3
| <header class="siteHeader">
<img src="img" class="siteLogo" />
</header> |
然后可以将容器用作所需大小的蒙版,并以负边距包围图像以将其移至正确位置:
1 2 3 4 5 6 7 8 9
| .siteHeader{
width: 50px;
height: 50px;
overflow: hidden;
}
.siteHeader .siteLogo{
margin: -100px;
} |
演示可以在此JSFiddle中看到。
似乎只能在IE> 9中使用,并且可能在所有其他浏览器的所有重要版本中都可以使用。
调整背景位置以将背景图像移动到div的不同位置
1 2 3 4
| div {
background-image: url('image url')
background-position: 0 -250px;
} |