Ответ 1
left: 50%;
margin-left: -400px; /* Half of the width */
#menu {
position: fixed;
width: 800px;
background: rgb(255, 255, 255); /* The Fallback */
background: rgba(255, 255, 255, 0.8);
margin-top: 30px;
}
Я знаю, что этот вопрос в миллион раз, но я не могу найти решение для моего дела. У меня есть div, который нужно фиксировать на экране, даже если страница прокручивается, она всегда должна оставаться CENTERED в середине экрана!
У div должна быть ширина 500px
, должна быть 30px
вдалеке от вершины (верхняя граница), должна быть горизонтально центрирована в середине страницы для всех размеров браузера и не должна перемещаться при прокрутке остальной части страница.
Возможно ли это?
left: 50%;
margin-left: -400px; /* Half of the width */
Ответы здесь устарели. Теперь вы можете легко использовать преобразование CSS3 без жесткого кодирования. Это работает на всех элементах, включая элементы без ширины или динамической ширины.
Горизонтальный центр:
left: 50%;
transform: translateX(-50%);
Вертикальный центр:
top: 50%;
transform: translateY(-50%);
Как горизонтальный, так и вертикальный:
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
Совместимость не является проблемой: http://caniuse.com/#feat=transforms2d
Если использовать встроенные блоки - это вариант, я бы рекомендовал этот подход:
.container {
/* fixed position a zero-height full width container */
position: fixed;
top: 0; /* or whatever position is desired */
left: 0;
right: 0;
height: 0;
/* center all inline content */
text-align: center;
}
.container > div {
/* make the block inline */
display: inline-block;
/* reset container center alignment */
text-align: left;
}
Я написал короткую запись об этом здесь: http://salomvary.github.com/position-fixed-horizontally-centered.html
Редактировать сентябрь 2016 года. Хотя приятно, что по-прежнему иногда получают голосование за это, потому что мир двинулся дальше, я бы пошел с ответом, который использует transform (и у которого есть тонна upvotes). Я больше не буду этого делать.
Другим способом не нужно вычислять запас или нужен субконтейнер:
#menu {
position: fixed; /* Take it out of the flow of the document */
left: 0; /* Left edge at left for now */
right: 0; /* Right edge at right for now, so full width */
top: 30px; /* Move it down from top of window */
width: 500px; /* Give it the desired width */
margin: auto; /* Center it */
max-width: 100%; /* Make it fit window if under 500px */
z-index: 10000; /* Whatever needed to force to front (1 might do) */
}
... или вы можете обернуть ваше меню div в другое:
<div id="wrapper">
<div id="menu">
</div>
</div>
#wrapper{
width:800px;
background: rgba(255, 255, 255, 0.8);
margin:30px auto;
border:1px solid red;
}
#menu{
position:fixed;
border:1px solid green;
width:300px;
height:30px;
}
Можно горизонтально центрировать div таким образом:
HTML:
<div class="container">
<div class="inner">content</div>
</div>
CSS
.container {
left: 0;
right: 0;
bottom: 0; /* or top: 0, or any needed value */
position: fixed;
z-index: 1000; /* or even higher to prevent guarantee overlapping */
}
.inner {
max-width: 600px; /* just for example */
margin: 0 auto;
}
Используя этот способ, вы всегда будете иметь свой внутренний центральный блок, к тому же его можно легко превратить в истинную отзывчивость (в примере это будет просто жидкость на меньших экранах), поэтому никаких ограничений, как в примере вопроса, так и в выбранный ответ.
Здесь другое решение с двумя div. Пытался держать его кратким, а не жестко закодированным. Во-первых, ожидаемый html:
<div id="outer">
<div id="inner">
content
</div>
</div>
Принцип, стоящий за следующим css, заключается в том, чтобы позиционировать какую-либо сторону "внешнего", а затем использовать тот факт, что он предполагает размер "внутреннего" относительно относительно сдвига последнего.
#outer {
position: fixed;
left: 50%; // % of window
}
#inner {
position: relative;
left: -50%; // % of outer (which auto-matches inner width)
}
Этот подход похож на Quentin's, но внутренний может иметь переменный размер.
Здесь решение flexbox при использовании полноэкранного упаковщика div. Выравнивание по центру выравнивает его дочерний элемент по горизонтали, а выравнивание - по центру.
<div class="full-screen-wrapper">
<div class="center"> //... content</div>
</div>
.full-screen-wrapper {
position: fixed;
display: flex;
justify-content: center;
width: 100vw;
height: 100vh;
top: 0;
align-items: center;
}
.center {
// your styles
}