任何尺寸的CSS圆形图像

问题描述:

我正在用CSS创建一个圆形图像。任何尺寸的CSS圆形图像

当我的形象是200像素x 300像素,它不是一个完美的圆:

.circular { 
 
    margin: auto; 
 
    width: 200px; 
 
    height: 300px; 
 
    border-radius: 150px; 
 
    -webkit-border-radius: 150px; 
 
    -moz-border-radius: 150px; 
 
    background: url(http://i.stack.imgur.com/S1ZCs.jpg) no-repeat; 
 
}
<div class="circular"></div>

这里是一个jsFiddle为好。

当宽度和高度是不同的尺寸时,有没有办法让一个完美的圆?如果我将它设置为300 x 300,这是一个完美的圆形,但当图像为200 x 300时,我需要它处于完美的圆形。

+1

我不知道为什么你需要不同尺寸的主意,如果你需要一个圆形? – DaniP 2014-11-05 14:31:28

+1

最好的你可以实现的是这样的:http://jsfiddle.net/sy48k3y5/3/ – DaniP 2014-11-05 14:32:18

+0

有没有调整宽度或高度在jsfiddle作出一个圆 – user979331 2014-11-05 14:32:17

如果数值不是平方的,那么它就不能成为一个圆,这很简单。但是,如果将图像嵌入其中,则可以使包装正方形并隐藏圆形的剩余部分。这将是这样的:

.circular { 
 
    width: 150px; 
 
    height: 150px; 
 
    border-radius: 50%; 
 
    position: relative; 
 
    overflow: hidden; 
 
} 
 
.circular img { 
 
    min-width: 100%; 
 
    min-height: 100%; 
 
    width: auto; 
 
    height: auto; 
 
    position: absolute; 
 
    left: 50%; 
 
    top: 50%; 
 
    -webkit-transform: translate(-50%, -50%); 
 
    -moz-transform: translate(-50%, -50%); 
 
    -ms-transform: translate(-50%, -50%); 
 
    transform: translate(-50%, -50%); 
 
}
<div class="circular"> 
 
    <img src="http://www.placehold.it/150" /> 
 
</div>

我通常包装所有的行之间,并且包括与:nth-child(n)选择一个单独的CSS定义position:transform:使支持中心仅适用于浏览器小孩,但这只是微调。

+0

+1 - 原谅编辑。这是一个很好的方法,Stack Snippet可以很容易地看到。 – misterManSam 2014-11-05 14:44:54

+0

@misterManSam这很好(起初我不知道是什么改变了)。我会编辑它添加一些前缀,因为这不工作,我使用safari(如果它不适用于我,那么它有点尴尬:p) – somethinghere 2014-11-05 14:46:26

据我所知,要使用边框实现一个圆-radius属性,你的宽度和高度值必须是一样的。

+1

这并不能提供问题的答案。要批评或要求作者澄清,在他们的帖子下留下评论 - 你总是可以评论你自己的帖子,一旦你有足够的[声誉](http://*.com/help/whats-reputation),你会能够[评论任何帖子](http://*.com/help/privileges/comment)。 – Taifun 2014-11-05 14:48:19

+0

了解并致歉 – hyperjelly 2014-11-06 10:27:21

有一种方法,与transform: scale,摔成形。我不知道你为什么需要它......这是无论如何。比例值显然需要随着宽度/高度而改变。

另一个问题是背景图像会使用这种方法失真。

div { 
 
    width: 200px; 
 
    height: 300px; 
 
    background: #F00; 
 
    border-radius: 50%; 
 
    transform: scale(.76, .5) 
 
}
<div><div>

+0

是的,这只是过于复杂,不能明白为什么你会使用这个要么你现在必须计算两件事情! – somethinghere 2014-11-05 14:35:01

+2

+1这里问题的好方法是您需要知道比例以设置变换值。 – DaniP 2014-11-05 14:36:13

+0

@Danko是的,接受的解决方案相当简单。我没有在......圈子外面思考。 – misterManSam 2014-11-05 15:09:02

可以使用border-radius:100%。这可以用来创建圆形或椭圆形状。也可以随时使用border-radius直接与元素宽度相关

我们可以通过稍微改变HTML结构来实现它。

<div class="circular"> 
    <img src="img/desktop.jpg"> 
</div> 

.circular { /* need to give parent container equal width and height*/ 
    margin: auto; 
    width: 200px; 
    height: 200px; 
    -webkit-border-radius: 50%; 
    -moz-border-radius: 50%; 
    border-radius: 50%; 
    overflow:hidden; 
} 
.circular img{ 
    width:100%; 
} 

演示http://jsfiddle.net/prakashup/2sb6srjp/

+0

它的作品,但缺乏很多边缘情况。 – somethinghere 2014-11-05 14:47:51

不要紧,形象是什么尺寸在你的例子,因为它是一个背景图片。不适合的部分将不会呈现。如果您需要300x300像素的圆圈,则请将高度和宽度保持为300. 您可以使用background-size:cover;使图像拉伸以适合宽高比,但保留长宽比。

See here.

.circular { 
 
margin: auto; 
 
width: 300px; 
 
height: 300px; 
 
border-radius: 50%; 
 
-webkit-border-radius: 50%; 
 
-moz-border-radius: 50%; 
 
background: url(https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJVLN-vcVHCOOLWmvihkfex1OFW0ZLVhQ7JQfcc4EH4YoJLTn68x8EpDls) no-repeat; 
 
    background-size: cover; 
 
}
<div class="circular"></div> 
 
<br/><br/> 
 
<div>Original image: <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJVLN-vcVHCOOLWmvihkfex1OFW0ZLVhQ7JQfcc4EH4YoJLTn68x8EpDls" /></div>

你可以简单地通过使高度和宽度值相同的定义和边界半径为50%,实现这一目标。这里是代码..

.circular { 
margin: auto; 
width: 300px; 
height: 300px; 
border-radius: 50%; 
-webkit-border-radius: 50%; 
-moz-border-radius: 50%; 
background: url(http://cdn.bavotasan.com/wp-content/uploads/2011/02/desktop.jpg) no-repeat center center; 
} 

你可以用伪元素,让

.circular { 
 
    margin: auto; 
 
    width: 200px; 
 
    height: 300px; 
 
    overflow: hidden; 
 
    background: red; 
 
} 
 
.circular:before { 
 
    content: url('http://cdn.bavotasan.com/wp-content/uploads/2011/02/desktop.jpg'); 
 
    border-radius: 100%; 
 
    -webkit-border-radius: 100%; 
 
    -moz-border-radius: 100%; 
 
    width: 200px; 
 
    height: 200px; 
 
    overflow: hidden; 
 
    display: block; 
 
}
<div class="circular"></div>