Центрируйте одно из двух родственных подразделений
Вопрос
В следующем я хотел бы изменить CSS таким образом, чтобы right-sibling
является воистину сосредоточенный в container
див.(Редактировать:без использования абсолютного позиционирования).
<html>
<head>
<style type='text/css'>
#container {
width: 500px;
}
#left-sibling {
float: left;
}
#right-sibling {
text-align: center;
}
</style>
</head>
<body>
<div id='container'>
<div id='left-sibling'>Spam</div>
<div id='right-sibling'>Eggs</div>
</div>
</body>
</html>
В его текущей реализации центрирование правого родственного элемента зависит от левого родственного элемента - вы можете увидеть это, добавив display: none
к тому left-sibling
это стиль.
(Примечание:Я бы хотел избежать изменения структуры HTML, потому что, насколько я понимаю, весь смысл CSS заключается в том, чтобы отделить структуру тегов от логики представления, и это не кажется действительно сумасшедшим запросом для обработки CSS.)
ТИА.
Решение
Трюк, который я только что использовал, чтобы заставить это работать, заключается в том, чтобы иметь отступ слева от контейнера, и мы можем побудить левого брата сидеть внутри этого пространства, предоставив ему равный, но отрицательный запас.
Для полноты картины мы также нанесли отступ справа от контейнера размером, равным ширине левого родственного элемента.
<html>
<head>
<style type='text/css'>
#container {
width: 500px;
padding-left:50px;
padding-right:50px;
}
#left-sibling {
border: solid 1px #000;
float: left;
width:50px;
margin-left:-50px;
}
#right-sibling {
border: solid 1px #000;
text-align: center;
}
#container2 {
width: 500px;
}
</style>
</head>
<body>
<div id='container'>
<div id='left-sibling'>Spam</div>
<div id='right-sibling'>Eggs<br />Eggs<br />Eggs<br /></div>
</div>
<div id='container'>
<div id='left-sibling' style="display:none;">Spam</div>
<div id='right-sibling'>Eggs<br />Eggs<br />Eggs<br /></div>
</div>
<div id='container2'>
<div id='right-sibling'>Eggs<br />Eggs<br />Eggs<br /></div>
</div>
</body>
</html>
Другие советы
Попробуйте установить ширину по левому краю-sibling и равное заполнение-right:справа-родной брат
вот так
<html>
<head>
<style type='text/css'>
#container {
width: 500px;
}
#left-sibling {
float: left;
width:50px;
}
#right-sibling {
text-align: center;
padding-right:50px;
}
</style>
</head>
<body>
<div id='container'>
<div id='left-sibling'>Spam</div>
<div id='right-sibling'>Eggs</div>
</div>
</body>
</html>
Вы можете изменить float: left;
на #left-sibling
Для position: absolute;
.Это выведет его из обычного потока, так что это больше не повлияет на right-sibling.
Конечно, это может иметь другие побочные эффекты с вашим дизайном.
Вы всегда должны устанавливать ширину для плавающих элементов, иначе все становится странным :)
Если вы поставите
border: solid 1px #000;
правило для обоих divs вы увидите, что происходит - #right-sibling div заполняет всю ширину родительского div (#container), поэтому, хотя текст является на самом деле выровненный по центру, он выглядит так, как будто это не так!
Атрибут text-align управляет выравниванием содержимого в контейнере, к которому применяется этот атрибут.Добавив следующие стили, это легко увидеть:
#left-sibling { float: left; width:100px; border:1px Solid Blue; }
#right-sibling { text-align: center; width:100px; border:1px Solid Red; }
Я бы предложил добавить doctype в документ, чтобы избежать quirksmode
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
и следующие стили:
#container { width: 500px; position:relative; border:1px Solid Black; }
#left-sibling { float:left; position:absolute; top:0px; left:0px; width:100px; border:1px Solid Blue; }
#right-sibling { width:100px; position:relative; margin-left:auto; margin-right:auto; border:1px Solid Red; }
Вы, конечно, хотели бы настроить размер братьев и сестер в соответствии с вашими потребностями.The borders отлично справляется с задачей, показывая, что происходит на самом деле.