Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.03.2017, 05:09
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Выравнивание элемента
Существуют ли универсальные средства для выравнивания любых элементов по горизонтали и вертикали?

float не умеет выравнивать по центру, text-align умеет, но он только для текста.

С выравниванием по вертикали тоже всё плохо.
По низу можно выравнять через position: absolute; bottom: 0, а по центру никак.

Неужели нет никаких нативных способов выравнять элемент?
Ответить с цитированием
  #2 (permalink)  
Старый 16.03.2017, 05:13
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Сам я уже так намучался с этим выравниванием, что тупо делаю через js.

<p>
	Align( document.getElementById("aligned"), <span id="update">1</span> );
</p>
<div style="width: 500px; height: 350px; border: 3px solid black;">
	<div id="aligned" style="width: 100px; height: 100px; background-color: #cccccc;">
	</div>
</div>
<script type="text/javascript">

function Align(target, index, parent) {
	parent = parent || target.parentNode;
	var rect = parent.getBoundingClientRect();
	var offset = parseInt(getComputedStyle(parent).borderWidth);
	target.style.position = "absolute";
	target.style.top = [
		(offset + rect.top),
		(offset + rect.top + (parent.clientHeight - target.clientHeight) / 2),
		(rect.bottom - target.clientHeight - offset)
	][Math.floor((index - 1) / 3)] + "px";

	target.style.left = [
		(offset + rect.left),
		(rect.left + (parent.clientWidth - target.clientWidth) / 2),
		(rect.right - target.clientWidth - offset)
	][(index - 1) % 3] + "px";

	target.style.marginTop = 0;
	target.style.marginLeft = 0;
}

var update = document.getElementById("update");
var i = 1;
setInterval(function () {
	update.innerHTML = i;
	Align( document.getElementById("aligned"), i );
	i++;
	if (i == 10) i = 1;
}, 1000);

</script>
Ответить с цитированием
  #3 (permalink)  
Старый 16.03.2017, 07:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

exec,
можно обьяснить что не так с выравниванием? и зачем нужен js?
Ответить с цитированием
  #4 (permalink)  
Старый 16.03.2017, 08:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

exec,
<style type="text/css">
div {position: relative;box-sizing: border-box;}
div div {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
}
</style>
<div style="width: 500px; height: 350px; border: 3px solid black;">
  <div id="aligned" style="width: 100px; height: 100px; background-color: #cccccc;">
  </div>
</div>
Ответить с цитированием
  #5 (permalink)  
Старый 16.03.2017, 08:16
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

http://frontender.info/a-guide-to-flexbox/
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #6 (permalink)  
Старый 16.03.2017, 08:36
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от exec
Существуют ли универсальные средства для выравнивания любых элементов по горизонтали и вертикали?
Да.
Это таблица. Простая табличка из одной строки и одной колонки сможет выровнять любой элемент по центру. Как по вертикали... Так и по горизонтали.

Теперь есть "табличные" свойства в ЦСС, которые могут это эмулировать для любого элемента
http://htmlbook.ru/css/display

Есть еще возможности HTML5...
http://html5.by/blog/flexbox/
Ответить с цитированием
  #7 (permalink)  
Старый 21.03.2017, 06:36
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Ещё один вопрос назрел. Как сделать так, чтобы месяц выравнивался посередине?

Здесь всё выравнивается, но правую стрелку переносит на следующую строку:
<div style="background: #ccc; width: 300px; padding: 5px">
  <div style="float: left">◄</div>
  <div style="text-align: center">March 2017</div>
  <div style="float: right">►</div>
</div>


Если месяцу добавить float:left, то всё идёт в одну строчку, но выравнивание пропадает:
<div style="background: #ccc; width: 300px; padding: 5px">
  <div style="float: left">◄</div>
  <div style="text-align: center; float:left">March 2017</div>
  <div style="float: right">►</div>
</div>


CSS как будто издевается надо мной! Делает что угодно кроме того, что мне нужно!
Ответить с цитированием
  #8 (permalink)  
Старый 21.03.2017, 08:29
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от exec
Здесь всё выравнивается, но правую стрелку переносит на следующую строку
Как вариант...

<div style="background: #ccc; width: 300px; padding: 5px">
  <div style="float: right">►</div>
  <div style="float: left">◄</div>
  <div style="text-align: center">March 2017</div>
</div>
Ответить с цитированием
  #9 (permalink)  
Старый 21.03.2017, 08:41
Профессор
Отправить личное сообщение для clecar Посмотреть профиль Найти все сообщения от clecar
 
Регистрация: 11.02.2015
Сообщений: 254

<div style="background: #ccc; width: 300px; text-align: center; padding: 5px">
<div style="float: left">◄</div>
March 2017
<div style="float: right;
">►</div>
</div>
Ответить с цитированием
  #10 (permalink)  
Старый 21.03.2017, 08:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Если у родителя фиксированный размер, который известен, то зачем вообще использовать float? Каждому дочернему элементу по 100рх и соответствующее выравнивание текста.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выравнивание элемента по центру окна при клике на кнопку Notaton jQuery 0 22.04.2016 21:14
Вертикальное выравнивание в строке FanAizu (X)HTML/CSS 6 30.07.2014 18:06
Изменить класс родительского элемента STyLe Общие вопросы Javascript 1 29.05.2014 20:21
Замена DOM элемента другим элементом MaxXxaM Events/DOM/Window 5 04.05.2013 01:24
Как то можно узнать ID HTML элемента вызвавшего JavaScript функцию? Opusel Events/DOM/Window 1 18.12.2011 18:36