我想将一个img置于div without javascript 和 without background-images 中 .
这是一些示例代码
<div>
<img src="/happy_cat.png"/>
</div>
-
我不知道img的大小,它应该能够超过父级的宽度
-
我不知道父div的宽度(它是100%)
-
父div具有固定的高度
-
图像大于父图像,父图像溢出:隐藏
-
只需要支持现代浏览器
期望的结果 . (忽略不透明等,只需注意定位) .
我知道这可以通过背景图像轻松完成,但这对我来说不是一个选择 . 我也可以使用javascript,但它似乎是一个非常沉重的方式来实现这一点 .
谢谢!
插口
6 回答
那这个呢:
这假设父div相对定位 . 我认为如果你想要.img相对定位而不是绝对定位,这是有效的 . 只需删除
position: absolute
并将顶部/左侧更改为margin-top
和margin-left
.您可能希望使用
transform
,-moz-transform
等添加浏览器支持 .老问题,新答案:
当图像大于包装div时,text-align:center或margin:auto不起作用 . 但是如果图像较小,那么具有绝对定位或负左边距的解决方案将产生奇怪的效果 .
因此,当实际上事先不知道图像大小时(例如在CSM上)并且它可能比包装div更大或更小,有一个优雅的CSS3解决方案可用于所有目的:
请注意,根据样式表中的其他规则,您可能需要将宽度:auto和/或max-width:none附加到img .
这总是有点棘手,有很多解决方案 . 我找到了最好的解决方案如下 . 它以纵向和横向为中心 .
CSS
HTML
See fiddle
技术略有不同:Fiddle
谢谢大家的帮助 . 我只会考虑在CSS中无法实现这一点 .
我将转向jQuery解决方案 . 这是一些感兴趣的[伪]代码 .
我打算放弃CSS解决方案,但看起来可以做到(见接受的答案) . 这是我将要使用的JS解决方案 .
和随之而来的CSS
我知道这是旧的,但我也提出了一个非常类似于上面的纯css解决方案 .
只需初始化图像的位置,如下所示 .
HTML:
CSS:
或者看
margin: auto;
这是用于水平对齐 . 为了使它垂直对齐,你可以
display: table-cell;
到<div>
然后vertical-align: middle;
,但这不是一个好习惯,因为你的<div>
不是一个表 .