Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   Как выровнять изображение по высоте внутри div? (https://javascript.ru/forum/xhtml-html-css/62197-kak-vyrovnyat-izobrazhenie-po-vysote-vnutri-div.html)

shurik_shink 29.03.2016 10:14

Как выровнять изображение по высоте внутри div?
 
Вопрос: Как правильно установить vertical-align: middle; для <img>

Не удается выровнять изображение по центру.
В интернете есть сведения что для того что бы выровнять по центру элемент необходимо задать стили:
для parent{display: table;}
для child{display: table-cell; vertical-align:middle}
Но для изображения это не работает

Подскажите кто знает - как правильно разместить изображение по высоте четко по центру родительского div?

<style>
div#div1{
	display: table;
 	border: 1px solid green;
 	width: 100%;
	height: 300px;
	background-color: yellow;
	text-align: center;
}

img#img1{
	display: table-cell;
	height: 100px;
	vertical-align: middle;
}
</style>

<div id="div1">
<img id="img1" src="http://politrussia.com/upload/iblock/032/032e40743dba6b8e0ec37a7df1f89889.jpg"/>
</div>

destus 29.03.2016 11:03

<style>
#div1{
 	border: 1px solid green;
 	width: 100%;
	height: 300px;
	background-color: yellow;
	text-align: center;
	display : flex;
}

#img1{
	height: 100px;
	margin: auto;
}
</style>
<div id="div1">
	<img id="img1" src="http://politrussia.com/upload/iblock/032/032e40743dba6b8e0ec37a7df1f89889.jpg"/>
</div>

ruslan_mart 29.03.2016 12:31

<style>
div#div1{
 	border: 1px solid green;
 	width: 100%;
	height: 300px;
	background-color: yellow;
  position: relative;
}

img#img1{
  bottom: 0;
	height: 100px;
  left: 0;
	margin: auto;
  position: absolute;
  right: 0;
  top: 0;
}
</style>

<div id="div1">
<img id="img1" src="http://politrussia.com/upload/iblock/032/032e40743dba6b8e0ec37a7df1f89889.jpg"/>
</div>

shurik_shink 29.03.2016 14:09

Спасибо, работает оба варианта

Но тут наступил на еще одни грабли: если для родительского контейнера задать дополнительно padding-right: 300px; то изображение сдвигается в право на 300px от центра родительского div.

Подскажите - как от этого избавиться?
<style>
div#div1{
 	border: 1px solid green;
 	width: 100%;
	height: 300px;
	background-color: yellow;
	position: relative;
	
	padding-right: 300px;
}

img#img1{
	bottom: 0;
	height: 100px;
	left: 0;
	margin: auto;
	position: absolute;
	right: 0;
	top: 0;
}
</style>

<div id="div1">
<img id="img1" src="http://politrussia.com/upload/iblock/032/032e40743dba6b8e0ec37a7df1f89889.jpg"/>
</div>


И как добавить кнопку посмотреть над кодом - что бы можно было прямо в теме форума посмотреть как работает код.

ruslan_mart 29.03.2016 18:54

box-sizing: border-box для родителя.

Цитата:

Сообщение от shurik_shink
И как добавить кнопку посмотреть над кодом - что бы можно было прямо в теме форума посмотреть как работает код.

Код:

[JS run]

shurik_shink 29.03.2016 23:32

Цитата:

Сообщение от Ruslan_xDD (Сообщение 412386)
box-sizing: border-box для родителя

Спасибо, работает. - изображение четко по центру родительского div независимо от размера отступов.

А можно изображение подвинуть в лево на эти самые padding: 300px; от центра, что бы изображение было по среди той области родительского div что не является padding и margin.


!К предыдущему вопросу: если не указивать box-sizing: border-box для родителя изображение как ни странно сдвигается в право, несмотря на то что задан padding-right: 300px; хотя по логике вроде должно было бы в обратную сторону - в лево.

И я хочу добиться что если указано для родителя padding-right: 300px; то изображение должно сдвинуться в лево от центра на 300px;

Пример для наглядности
<style>
div#div1{
    box-sizing: border-box;
	
 	border: 1px solid green;
 	width: 100%;
	height: 300px;
	background-color: yellow;
	position: absolute;
	top: 0; left: 0;
	
	padding-right: 300px;
}

img#img1{
	bottom: 0;
	height: 100px;
	left: 0;
	margin: auto;
	position: absolute;
	right: 0;
	top: 0;
}

div#div2{
	position: absolute; top: 0; right: 0; width: 300px; height: 300px; background-color: green;
}
</style>

<div id="div1">
<img id="img1" src="http://politrussia.com/upload/iblock/032/032e40743dba6b8e0ec37a7df1f89889.jpg"/>
</div>
<div id="div2"></div>

ruslan_mart 30.03.2016 09:09

Оно?
<style>
div#div1{
    box-sizing: border-box;
	
 	border: 1px solid green;
 	width: 100%;
	height: 300px;
	background-color: yellow;
	position: absolute;
	top: 0; left: 0;
	
	padding-right: 300px;
}

img#img1{
  border-right: 300px solid transparent;
	bottom: 0;
	height: 100px;
	left: 0;
	margin: auto;
	position: absolute;
	right: 0;
	top: 0;
}

div#div2{
	position: absolute; top: 0; right: 0; width: 300px; height: 300px; background-color: green;
}
</style>

<div id="div1">
<img id="img1" src="http://politrussia.com/upload/iblock/032/032e40743dba6b8e0ec37a7df1f89889.jpg"/>
</div>
<div id="div2"></div>

shurik_shink 30.03.2016 10:40

Цитата:

Сообщение от Ruslan_xDD (Сообщение 412416)
Оно?
border-right: 300px solid transparent;

Да оно. Спасибо


Часовой пояс GMT +3, время: 18:57.