2017-10-18 27 views
2

我试图用这个CSS代码,查看在圈中用户的个人资料照片转了一圈观察:图像在底部被切断使用CSS

.circle { 
 
    margin: auto; 
 
    width: 200px; 
 
    height: 200px; 
 
    border-radius: 50%; 
 
    -webkit-border-radius: 50%; 
 
    -moz-border-radius: 50%; 
 
    overflow:hidden; 
 
    } 
 
    .circle img{ 
 
     width:100%; 
 
    }
<div class='circle'> 
 
    <img src='https://static.pexels.com/photos/2438/nature-forest-waves-trees.jpg'> 
 
     </div>

问题是,在图像被剪切底部:

enter image description here

但我希望在一个完整的CIR来显示图像CLE。为什么会发生这种情况,我该如何解决?

+1

这是因为你没有使用方形图像!要么使用一个正方形的图像或使最小高度和最小宽度:100%,并把溢出:父母隐藏 – Pete

+0

您是否正在寻找一种适用于所有浏览器的解决方案,我认为'object-fit'在这里工作的很好,处理图像具有不同比例但像所有好东西的情况,它在IE中不起作用https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit – Valentin

回答

0

按我的意见,你需要的,如果你想显示整个图像用正方形图片,否则,你需要做的图像100%的最短边 - 中这种情况下,图像是风景,所以你需要作出高度100%,使多余的宽度将被隐藏:

.circle { 
 
    margin: auto; 
 
    width: 200px; 
 
    height: 200px; 
 
    border-radius: 50%; 
 
    -webkit-border-radius: 50%; 
 
    -moz-border-radius: 50%; 
 
    overflow: hidden; 
 
} 
 

 
.circle img { 
 
    height: 100%; 
 
}
<div class='circle'> 
 
    <img src='https://static.pexels.com/photos/2438/nature-forest-waves-trees.jpg'> 
 
</div>

+0

downvoter关心评论?我填满了圆圈并保留了原始图像的高宽比。即使是接受的答案也没有管理, – Pete

+0

作出一个静态的决定,让一方比另一方长,这并不是一个真正的好方法。我会看看其他能够动态调整大小的非方形图像的解决方案。 –

+0

@DerekBrown他想要一个解决方案,这是不是一个解决方案 - 什么是改变宽度:100%到高度:100% - 这是一个解决方案,像你这样的人downvote正确的答案是毁了这个网站。仅仅因为你不同意如何去做这件事,并不能使它不正确,值得一试。我觉得你的背景图像的答案也是一种破解 - 你无法通过将图像作为背景图像来打印出图像,但你看不到我的答案 – Pete

-2

默认情况下,img标记从图像文件的大小取其大小。在这种情况下,图片大于200x200,因此图片延伸至您的div的大小以下。通过将height: 100%添加到img标签,问题也解决了。

.circle { 
 
    margin: auto; 
 
    width: 200px; 
 
    height: 200px; 
 
    border-radius: 50%; 
 
    -webkit-border-radius: 50%; 
 
    -moz-border-radius: 50%; 
 
    overflow: hidden; 
 
} 
 

 
.circle img { 
 
    width: 100%; 
 
    height: 100%; 
 
}
<div class='circle'> 
 
    <img src='https://static.pexels.com/photos/2438/nature-forest-waves-trees.jpg'> 
 
</div>

注意上面的答案拉伸图像是200×200。如果你不希望这样伸展,我会用background-image代替:

.circle { 
 
    margin: auto; 
 
    width: 200px; 
 
    height: 200px; 
 
    border-radius: 50%; 
 
    -webkit-border-radius: 50%; 
 
    -moz-border-radius: 50%; 
 
    overflow: hidden; 
 

 
    background-image: url('https://static.pexels.com/photos/2438/nature-forest-waves-trees.jpg'); 
 
background-size: cover; 
 
background-repeat: no-repeat; 
 
background-position: center; 
 
}
<div class='circle'> 
 
</div>

+1

延伸图像,这很少是预期的结果。 – DBS

+0

@DBS不,它不会像外部div有固定的大小,这与图像的比例相同。 –

+1

呃......它的确如此。你迫使一个非方形的图像显示在200x200,你可以在你的例子中看到它(该图像不显示垂直伸展很好,但交换出来,你会明白我的意思) – DBS

0

如果你不感兴趣的IE那么object-fit: cover是确保一个伟大的方式,图像总会覆盖可用空间的同时保持其比例。

.avatar { 
 
    display: inline-block; 
 
    width: 200px; 
 
    height: 200px; 
 
    border-radius: 100%; 
 
    overflow: hidden; 
 
} 
 

 
.avatar img { 
 
    width: 100%; 
 
    height: 100%; 
 
    object-fit: cover; 
 
}
<div class="avatar"> 
 
    <img src="https://static.pexels.com/photos/2438/nature-forest-waves-trees.jpg" /> 
 
</div> 
 

 
<div class="avatar"> 
 
    <img src="https://images.unsplash.com/photo-1504125130065-19cd3d71c27a?dpr=1&auto=format&fit=crop&w=2134&q=60&cs=tinysrgb" /> 
 
</div>

+0

这在IE中不受支持。我认为上面讨论的'background-image'方法对于浏览器兼容性会更好。 HTTPS://developer.mozilla。org/en-US/docs/Web/CSS/object-fit –

+0

是的,我在回答中提到了缺少IE支持,如果他想支持过时的浏览器并根据需要做出选择,则取决于海报。 – Valentin