Ответ 1
Как использовать изображение в качестве фона? Таким образом, вы могли бы сосредоточить его повсюду. Что-то в этом роде:
margin:5px;
padding:0;
background:url(http://dummyimage.com/50) no-repeat center center red;
height:60px;
width:60px;
У меня есть квадрат div фиксированного размера и вы хотите разместить изображение произвольного размера внутри, чтобы оно было центрировано как по горизонтали, так и по вертикали, используя CSS. Горизонтально легко:
.container { text-align: center }
Для вертикали общее решение:
.container {
height: 50px;
line-height: 50px;
}
img {
vertical-align: middle;
}
Но это не идеально, в зависимости от размера шрифта изображение будет примерно на 2-4 пикселя слишком далеко.
Насколько я понимаю, это потому, что "средний", используемый для вертикального выравнивания, на самом деле не является срединным, а конкретным положением на шрифте, близком к середине. A (слегка взломанный) обходной путь:
container {
font-size: 0;
}
и это работает в Chrome и IE7, но не в IE8. Мы надеемся сделать все линии шрифтов одной и той же точкой, посередине, но, похоже, это промах в зависимости от браузера и, возможно, от используемого шрифта.
Единственное решение, о котором я могу думать, это взломать высоту линии, делая ее немного короче, чтобы изображение отображалось в нужном месте, но оно кажется чрезвычайно хрупким. Есть ли лучшее решение?
Смотрите демо всех трех решений здесь: http://jsfiddle.net/usvrj/3/
Те, у кого нет IE8, могут найти этот скриншот полезным:
Как использовать изображение в качестве фона? Таким образом, вы могли бы сосредоточить его повсюду. Что-то в этом роде:
margin:5px;
padding:0;
background:url(http://dummyimage.com/50) no-repeat center center red;
height:60px;
width:60px;
Это ДЕЙСТВИТЕЛЬНО взломанно, но это то, что мы делали в ie6 дней.
.container {
position: relative;
}
img {
position: absolute;
top: 50%;
left: 50%;
margin-top: -12px; // half of whatever the image height is, assuming 24px
margin-left: -12px; // half of whatever the image width is, assuming 24px
}
В этом примере может отсутствовать что-то, но вы поняли.
Если css3 является опцией, то flexbox выполняет хорошую работу при выравнивании по вертикали и по горизонтали:
.container {
display:flex;
align-items: center; /* align vertical */
justify-content: center; /* align horizontal */
}
Вы пробовали следующее:
img {
display: block;
line-height: 0;
}
Я обычно использую этот хак, но я действительно не проверял его полностью в IE8.
Вот небольшой скрипт JS, который я сделал: http://jsfiddle.net/rachit5/Ge4YH/
Я считаю, что это соответствует вашему требованию.
HTML:
<div>
<img src=""/>
</div>
CSS
div{height:400px;width:400px;position:relative;border:1px solid #000;}
img{position:absolute;top:0;left:0;right:0;bottom:0;margin:auto;}