【问题标题】:Responsive circular images响应式圆形图像
【发布时间】:2016-05-22 01:12:08
【问题描述】:

我目前正在为自己创建一个动态样式表,我将在未来使用它,因此我希望它是动态的而不是硬编码的。

我有一个图像类:

.image-round{
    border-radius: 50%;
}

这个类适用于所有方形图像,但是当我尝试矩形图像时,我得到一个椭圆形。

我尝试通过使用 jQuery 来解决这个问题,将图像包装在一个容器中,我已经隐藏了溢出并将其高度和宽度设置为等于图像的高度。这解决了问题,但是现在我面临响应问题。

当我尝试缩小窗口时,图像被压扁了。

现在我想知道是否有一种解决方案可以完全动态地解决这个问题,而无需像以往那样进行硬编码,制作横向和圆形的图像

我真的想避免在调整窗口大小时检查图像大小,然后重新调整容器大小 - 因为我很确定这会占用大量性能。

也不能选择使用背景图片。

【问题讨论】:

  • 我已经包含了我班级的sn-p。请参考我的问题中的代码块。
  • 这就是为什么我改为包含一个简洁、易于理解且易于阅读的描述来描述我的努力。我这样做是为了不必在我的小问题中包含大量代码。 - 如果真的有必要,我可以包含我尝试过的 jQuery 和 css,但是这些只是愚蠢的实验。我没有发现我必须包含无法解释我做错了什么的代码。我很确定我已经很好地解释了我的问题,我正在寻找一个答案,而不是让任何人看到毫无意义、错误和无法使用的代码,这些代码绝不会帮助更好地回答这个问题。
  • 我认为你需要在一些事情上做出妥协,要么让整个图像保持纵横比,并且图像内部会有一点空白,否则你可以使用背景大小作为封面而不显示任何空白.我想你提到的不是背景图片。但我看不出还有什么

标签: javascript jquery css responsive-design css-shapes


【解决方案1】:

您可以使所有图像圆润,方法是将图像包装在一个 div 中,然后

  • 保持其纵横比为正方形(用于保持 div 纵横比的几种技术see here
  • 在包装上应用边框半径和overflow:hidden;

这将防止图像显示为椭圆形。

然后问题是处理每个图像纵横比、横向和纵向,以便它们居中并“覆盖”容器。为此,您可以像这样使用object-fill property

div{
  position:relative;
  width:20%;
  padding-bottom:20%;
  border-radius:50%;
  overflow:hidden;
}
img{
  position:absolute;
  object-fit: cover;
  width:100%;height:100%;
}
<div><img src="http://i.imgur.com/uuEyxxE.jpg" /></div>
<div><img src="http://i.imgur.com/HDssntn.jpg" /></div>

缺点是IE doesn't support object-fill。所以你需要一个后备来处理两种情况:

  • 横向图片从高度限制图片的大小
  • 纵向图片从宽度限制图片尺寸

div{
  position:relative;
  width:20%;
  padding-bottom:20%;
  border-radius:50%;
  overflow:hidden;
}
img{
  position:absolute;
  margin:auto;
}
.landscape img{
  height:100%;
  left:-100%; right:-100%;
}
.portrait img{
  width:100%;
  top:-100%; bottom:-100%;
}
<div class="landscape"><img src="http://i.imgur.com/uuEyxxE.jpg" /></div>
<div class="portrait"><img src="http://i.imgur.com/HDssntn.jpg" /></div>

在此配置中,您将需要 JS 来识别横向或纵向图像并相应地设置它们的样式。

【讨论】:

  • 这有两个问题。第一个是缺乏浏览器支持,第二个是它过早地调整大小。我希望图像仅在窗口边缘碰到图像时才开始调整大小,就像任何其他响应元素一样。 - 谢谢你的回答。
  • @user3385205 我正在为浏览器支持编写一个备用方案。对于响应能力,我相信您误解了,图像是根据包装器的宽度响应的,因此您可以将其放在任何调整您想要的大小的元素中(带有断点用于 自适应设计 或带有视口宽度响应式设计)
  • 是的@user3385205 除了对象填充之外,没有唯一的css方法可以使图像表现得像background-size:cover的背景图像
  • 谢谢。我在想,对于我的情况,最好始终将该 div 设置为 100% 宽度和 100% 填充,然后将其包装在另一个 div 中,我将更改其尺寸。暂时将此标记为正确答案 - 我以后可能会发现错误。
猜你喜欢
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 2015-05-16
相关资源
最近更新 更多