Answers:
我有两种方法给你。
此方法仅在视觉上调整图像大小,而不在DOM中调整其实际尺寸,并且调整大小后的视觉状态以原始大小的中间为中心。
的HTML:
<img class="fake" src="example.png" />
CSS:
img {
-webkit-transform: scale(0.5); /* Saf3.1+, Chrome */
-moz-transform: scale(0.5); /* FF3.5+ */
-ms-transform: scale(0.5); /* IE9 */
-o-transform: scale(0.5); /* Opera 10.5+ */
transform: scale(0.5);
/* IE6–IE9 */
filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.9999619230641713, M12=-0.008726535498373935, M21=0.008726535498373935, M22=0.9999619230641713,SizingMethod='auto expand');
}
浏览器支持说明:浏览器统计信息以内联显示css
。
的HTML:
<div id="wrap">
<img class="fake" src="example.png" />
<div id="img_wrap">
<img class="normal" src="example.png" />
</div>
</div>
CSS:
#wrap {
overflow: hidden;
position: relative;
float: left;
}
#wrap img.fake {
float: left;
visibility: hidden;
width: auto;
}
#img_wrap {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
#img_wrap img.normal {
width: 50%;
}
注意: img.normal
和img.fake
是同一张图片。
浏览器支持说明:此方法将在所有浏览器中都可用,因为所有浏览器都支持css
该方法中使用的属性。
#wrap
并#wrap img.fake
有流量#wrap
拥有overflow: hidden
与内部图片(img.fake
)相同的尺寸img.fake
是内部唯一#wrap
没有absolute
定位的元素,因此不会破坏第二步#img_wrap
在absolute
内部定位#wrap
并在尺寸上扩展到整个元素(#wrap
)#img_wrap
具有与图像相同的尺寸。width: 50%
上img.normal
,它的大小是50%
的#img_wrap
,因此50%
原始图像的尺寸。transform:scale()
解决方案有一个很大的问题。它不能与CSS盒子模型很好地交互。我的意思是,这与它没有任何接触都等你拿布局看起来都错了。请参阅:jsfiddle.net/kahen/sGEkt/8
HTML:
<span>
<img src="example.png"/>
</span>
CSS:
span {
display: inline-block;
}
img {
width: 50%;
}
这必须是使用容器元素方法的最简单的解决方案之一。
当使用容器元件的方法,这个问题的变化这个问题。诀窍是让容器元素收缩包装子图像,以便其大小等于未调整大小的图像的大小。因此,当将width
图像的属性设置为百分比值时,图像相对于其原始比例缩放。
其他一些shrinkwrapping启用属性和属性值的是:float: left/right
,position: fixed
并且min/max-width
,如在链接的问题提及。每个都有其自己的副作用,但这display: inline-block
将是一个更安全的选择。马特float: left/right
在回答中提到了他,但他错误地将其归因于overflow: hidden
。
编辑: 如trojan所述,您还可以利用新引入的CSS3内部和外部大小调整模块:
HTML:
<figure>
<img src="example.png"/>
</figure>
CSS:
figure {
width: intrinsic;
}
img {
width: 50%;
}
<img src="https://www.google.com/images/srpr/logo11w.png"/>
CSS: img { display: inline-block; width: 15%; }
figure
是width: fit-content;
现在。如今,浏览器支持也要好得多。
尝试zoom
物业
<img src="..." style="zoom: 0.5" />
编辑:显然,FireFox不支持zoom
属性。您应该使用;
-moz-transform: scale(0.5);
用于FireFox。
这实际上是可行的,我在设计我的第一个大规模响应式设计站点时偶然发现了这一点。
<div class="wrapper">
<div class="box">
<img src="/logo.png" alt="">
</div>
</div>
.wrapper { position:relative; overflow:hidden; }
.box { float:left; } //Note: 'float:right' would work too
.box > img { width:50%; }
尽管内容是浮动的,但是overflow:hidden给出了包装器的高度和宽度,而没有使用clearfix hack。然后,您可以使用边距定位内容。您甚至可以使wrapper div成为内联块。
function shrinkImage(idOrClass, className, percentShrinkage){
'use strict';
$(idOrClass+className).each(function(){
var shrunkenWidth=this.naturalWidth;
var shrunkenHeight=this.naturalHeight;
$(this).height(shrunkenWidth*percentShrinkage);
$(this).height(shrunkenHeight*percentShrinkage);
});
};
$(document).ready(function(){
'use strict';
shrinkImage(".","anyClass",.5); //CHANGE THE VALUES HERE ONLY.
});
此解决方案使用js和jquery并仅根据图像属性而不是父项调整大小。它可以使用class和id参数调整单个图像或一组图像的大小。
有关更多信息,请转到此处:https : //gist.github.com/jennyvallon/eca68dc78c3f257c5df5
实际上,这里的大多数答案并没有真正将图像缩放到其自身的宽度。
我们需要在img
元素本身上设置auto的宽度和高度,以便我们可以从其原始大小开始。
之后,容器元素可以为我们缩放图像。
简单的HTML示例:
<figure>
<img src="your-image@2x.png" />
</figure>
这是CSS规则。在这种情况下,我使用绝对容器:
figure {
position: absolute;
left: 0;
top: 0;
-webkit-transform: scale(0.5);
-moz-transform: scale(0.5);
-ms-transform: scale(0.5);
-o-transform: scale(0.5);
transform: scale(0.5);
transform-origin: left;
}
figure img {
width: auto;
height: auto;
}
您可以使用规则调整图像的位置transform: translate(0%, -50%);
。
我认为您是对的,就我所知,纯CSS根本不可能(我不是说跨浏览器)。
编辑:
好吧,我不太喜欢我的答案,所以我有点困惑。我可能已经找到了一个有趣的主意,可能会有所帮助..也许毕竟有可能(尽管不是最漂亮的东西):
编辑:经过测试,并且可以在Chrome,FF和IE 8&9中工作。。在IE7中不起作用。
的HTML:
<div id="img_wrap">
<img id="original_img" src="http://upload.wikimedia.org/wikipedia/en/8/81/Mdna-standard-edition-cover.jpg"/>
<div id="rescaled_img_wrap">
<img id="rescaled_img" src="http://upload.wikimedia.org/wikipedia/en/8/81/Mdna-standard-edition-cover.jpg"/>
</div>
</div>
CSS:
#img_wrap {
display: inline-block;
position:relative;
}
#rescaled_img_wrap {
width: 50%;
}
#original_img {
display: none;
}
#rescaled_img {
width: 100%;
height: 100%;
}
inline-block
,这就是为什么width #img_wrap
不仅取决于内部html宽度,还取决于context-container宽度的原因。
width: <number>%
。我认为没有办法!