我正在尝试使用非正方形的随机大小的图像在CSS中制作图像网格。 有没有人有解决方案用图像填充固定大小的div内的所有空间?
参见我的例子(蓝色是固定大小的div,里面的图像是红色的:
答案 0 :(得分:5)
您可以使用css,background-size:cover;
<style>
.img1 {
background-image: url(microsoft-logo.png);
}
.img2 {
background-image: url(google-icon.png);
}
.img3 {
background-image: url(Azend_Loggo.png);
}
.img-cover {
width: 50px;
height: 50px;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}
</style>
<div class="img-cover img1">
</div>
<div class="img-cover img2">
</div>
<div class="img-cover img3">
</div>
答案 1 :(得分:3)
答案 2 :(得分:0)
我有一些代码可以执行此操作并允许您设置所需的大小...
<?PHP
function imageResize($image,$maxwidth,$maxheight) {
$imgData = getimagesize("img/profiles/".$image);
$width = $imgData[0];
$height = $imgData[1];
// takes the larger size of the width and height and applies the
// formula accordingly...this is so this script will work
// dynamically with any size image
// First we'll scale down the width since it's the larger of the tw values
if ($width > $maxwidth) {
$percentage = ($maxwidth / $width);
$width = round($width * $percentage);
$height = round($height * $percentage);
}
// Next we'll scale down the height since it's the larger of the tw values
if ($height > $maxheight) {
$percentage = ($maxheight / $height);
$width = round($width * $percentage);
$height = round($height * $percentage);
}
$topMargin = ($maxheight-$height)/2;
$topMargin .= "px";
//returns the new sizes in html image tag format...
// this is so you can plug this function inside an image tag and just get the results
return "width=\"$width\" height=\"$height\" style=\"margin-top:$topMargin px;\"";
}
?>
然后包含以下内容:
<div id="profile-picture">
<img src="img/profiles/<?PHP echo $profileImg; ?>" <?PHP echo imageResize($profileImg,238,232); ?> />
</div>
不确定这是否有用..但它对我有用。
答案 3 :(得分:0)
你可以在这个解决方案中尝试下面css的固定div的图像标签你必须遵循的一个条件是,你的图像尺寸应该大于你的div,即如果你的div是100px那么最小图像尺寸应该是100px或更多:
div > img {
width:100%;
overflow:hidden;
}
答案 4 :(得分:0)
看到你用jQuery
标记了问题,我将冒昧地建议你为此编写一个小的jQuery插件。这是 JSFiddle demo 。
// Define plugin 'containImg'
$.fn.containImg = function(){
this.each(function(){
// Set variables
var $t = $(this),
$p = $t.parent('div'),
pw = $p.width(),
ph = $p.height(),
// Figure if width or height should be 100%
iw = ( pw / ph >= 1 ) ? 'auto' : '100%',
ih = ( iw == 'auto' ) ? '100%' : 'auto';
// Set dimensions
$t.css({
'width': iw,
'height': ih
});
});
}
// Call plugin
$('img').containImg();
基本逻辑是,如果图像具有水平拉伸的父div,则需要设置height:100%
以填充高度,并width:auto
以保持纵横比。如果父div形状是垂直的,则必须将其反转。
如果有人对如何改进代码有意见我会提出建议!
答案 5 :(得分:0)
你可以只使用css但js可以提供帮助,这里遵循我的简单代码。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title></title>
<style type="text/css">
div.image-box{display:block;position:relative;overflow:hidden;width:200px;border:1px solid #ccc;padding:0;height:200px;}
div.image-box img{width:100%;height:auto;margin:0; padding:0;margin-bottom:-4px;position:absolute;top:0;left:0;}
div.image-box.horizontal img{height:100%;width:auto;left:50%;}
div.image-box.vertical img{height:auto;width:100%;top:50%;}
</style>
</head>
<body>
<div class="image-box"><img src="https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcS08-IWtcbvcehgeszlD2nI6s-OAungNCsLNIc-f3QjIOkvOq8abg" alt=""></div>
<div class="image-box"><img src="http://1.bp.blogspot.com/_e-y-Rrz58H4/TUS4qRlRUrI/AAAAAAAABQo/H322eTHRB2s/s1600/Man_Face.jpg" alt=""></div>
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.image-box').each(function(){
if($(this).find('img').height() > $(this).find('img').width()){
$(this).addClass('vertical');
$(this).find('img').css('margin-top','-'+$(this).find('img').height()/2+'px');
}else{
$(this).addClass('horizontal');
$(this).find('img').css('margin-left','-'+$(this).find('img').width()/2+'px');
}
});
});
</script>
</body>
</html>
希望有所帮助