热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

保持纵横比与最小/最大高度/宽度?-Maintainingaspectratiowithmin/maxheight/width?

Ihaveagalleryonmysitewhereuserscanuploadimages.我的网站上有一个用户可以上传图片的图库。Iwouldliketheim

I have a gallery on my site where users can upload images.

我的网站上有一个用户可以上传图片的图库。

I would like the images to sit in a div that maintains its height, the images should be no larger than 500px in height. The width should be automatic to maintain aspect ratio.

我希望图像位于保持其高度的div中,图像的高度不应超过500px。宽度应自动保持纵横比。

HTML:


I've tried this CSS:

我试过这个CSS:

#gallery{
    height: 500px;

    img{
        max-height: 500px;
        max-width: 100%;
    }
}

The above works well, the gallery is always 500px high and images never exceed 500px in height. I run into problems though with smaller images, if a user uploads a really small image, I would like it 'blown up' to a minimum of 200px. I know this can be achieved by setting a min-height on the image, the problem with this is, if the image is less than 200px in height but say, 2000px wide, the image gets blown up to 200px in height, but then the aspect ratio is screwed, as the image is wider than the images parent div.

以上效果很好,画廊总是500px高,图像高度不超过500px。我遇到问题虽然图像较小,但如果用户上传的图像非常小,我希望它“炸毁”至少200px。我知道这可以通过在图像上设置最小高度来实现,问题是,如果图像高度小于200像素,但是说宽度为2000像素,则图像的高度会高达200像素,但是纵横比被拧紧,因为图像比图像父div更宽。

How can I have a min height but retain aspect ratio?

我怎样才能达到最小高度但保持纵横比?

4 个解决方案

#1


23  

The property you're looking for is object-fit. This is one of Opera's innovations, you can read more about it in their 2011 dev article on object-fit (yep, it's been around that long). A few years ago, I wouldn't have been able to recommend it to you, but caniuse shows that everyone else is starting to catch up:

您正在寻找的属性是对象适合的。这是Opera的创新之一,您可以在2011年关于对象适配的开发文章中阅读更多关于它的内容(是的,它已经存在了很长时间)。几年前,我无法向你推荐它,但是caniuse表明其他人都开始追赶:

  • Opera 10.6-12.1 (-o- prefix)
  • Opera 10.6-12.1(-o-前缀)

  • Chrome 31+
  • Opera 19+
  • Safari 7.1+
  • iOS 8+
  • Android 4.4+

http://caniuse.com/#search=object-fit

#gallery img {
    -o-object-fit: contain;
    object-fit: contain;
}

Using a value of contain will force the image to maintain its aspect ratio no matter what.

使用包含值将强制图像保持其纵横比,无论如何。

Alternately, you might want to use this instead:

或者,您可能希望使用此代码:

#gallery img {
    -o-object-fit: cover;
    object-fit: cover;
    overflow: hidden;
}

http://sassmeister.com/gist/9b130efdae95bfa4338e

#2


3  

The only way that I know of to possibly accomplish this is by setting either the width or height to auto.

我知道可能实现此目的的唯一方法是将宽度或高度设置为自动。

#gallery{
    height: 500px;

    img{
        max-height: 500px;
        width: auto;
    }
}

#3


1  

I don't know if this is possible using only CSS.

我不知道这是否只能使用CSS。

However, you may be able to accomplish the same thing with a few lines of Javascript:

但是,您可以使用几行Javascript完成相同的操作:

var img= document.querySelectorAll('img');
for(var i = 0 ; i 

This sets the height of all images to be between 200px and 500px. The width will automatically be scaled.

这会将所有图像的高度设置为200px到500px之间。宽度将自动缩放。

var img= document.querySelectorAll('img');
for(var i = 0 ; i 
#gallery{
  height: 500px;
  width: 400px;
  overflow: hidden;
}

#4


1  

I've been meaning to do something similar, actually. Here's something in jQuery if you're into that.

实际上,我一直想做类似的事情。如果你是这样的话,这里有jQuery的东西。

SCSS:

#gallery {
  height: 500px;

  img {
    max-height: 100%;
  }

  .small {
    width: 100%;
    max-width: 500px;
    height: auto;
  }

  .regular {
    width: auto;
    min-height: 200px;
  }
}

jQuery:

$( 'img' ).each( function() {

  var imageWidth = parseFloat( $( this ).css( 'width' ) );
  var imageHeight = parseFloat( $( this ).css( 'height' ) );

  if( imageHeight <= 200 && imageWidth >= 200 ) {
    $( this ).addClass( 'small' );
  }
  else {
    $( this ).addClass( 'regular' );
  }
});

CodePen


推荐阅读
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 本文介绍了如何在iOS应用中自定义导航栏按钮,包括使用普通按钮和图片生成导航条专用按钮的方法。同时,探讨了在不同版本的iOS系统中实现多按钮布局的技术方案。 ... [详细]
  • 解决Windows下创建子进程时代码重复执行的问题
    在Windows系统中,当启动子进程时,主进程的文件会被复制到子进程中。由于导入模块时会执行该模块中的代码,因此可能导致某些代码在主进程和子进程中各执行一次。本文探讨了这一现象的原因及其解决方案。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • iOS 开发技巧:TabBarController 自定义与本地通知设置
    本文介绍了如何在 iOS 中自定义 TabBarController 的背景颜色和选中项的颜色,以及如何使用本地通知设置应用程序图标上的提醒个数。通过这些技巧,可以提升应用的用户体验。 ... [详细]
  • 掌握Mosek矩阵运算,轻松应对优化挑战
    本篇文章继续深入探讨Mosek学习笔记系列,特别是矩阵运算部分,这对于优化问题的解决至关重要。通过本文,您将了解到如何高效地使用Mosek进行矩阵初始化、线性代数运算及约束域的设定。 ... [详细]
  • 本文介绍了一道来自《紫书》的编程题目——UVa11212 编辑书稿。该问题通过迭代加深搜索(IDA*)算法解决,旨在找到将给定排列转换为升序排列所需的最少步骤。文章提供了详细的解题思路和代码实现。 ... [详细]
  • Microsoft即将发布WPF/E的CTP(Community Technology Preview)和SDK,标志着RIA(Rich Internet Application)技术的新里程碑。更多详情及下载链接请参见MSDN官方页面。 ... [详细]
  • 本文介绍了如何计算给定数组中所有非质数元素的总和,并提供了多种编程语言的实现示例。 ... [详细]
  • 本文详细探讨了Java中的ClassLoader类加载器的工作原理,包括其如何将class文件加载至JVM中,以及JVM启动时的动态加载策略。文章还介绍了JVM内置的三种类加载器及其工作方式,并解释了类加载器的继承关系和双亲委托机制。 ... [详细]
  • 本文详细介绍了Java库XChart中的XYSeries类下的setLineColor()方法,并提供了多个实际应用场景的代码示例。 ... [详细]
author-avatar
手机用户2602883205_410
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有