Проблема с позиционированием CSS - PullRequest
0 голосов
/ 20 октября 2011

Я не уверен, как позиционировать элементы с помощью css, поскольку, когда я использую методы, подобные следующим, всякий раз, когда я изменяю размер браузера, элементы остаются на том же месте, а не там, где я хотел бы, чтобы они были в документе с измененным размером. Подскажите пожалуйста, что я делаю не так?

.logo {
    left: 20px;
    top: 20px;
    position: absolute;
}

#header h1 {
    margin-top: 20px;
    margin-left: 500px;
    color:  rgb(127, 127, 126);
    line-height: 0px;
}

Пожалуйста, возьмите скрипку - http://jsfiddle.net/hHGRc/

Ответы [ 4 ]

13 голосов
/ 20 октября 2011

В пределах (X) HTML DOM CSS распознает четыре типа позиционирования.По умолчанию каждый элемент в HTML позиционируется статически.Это означает, что он позиционируется в соответствии с местом, в котором он появляется в нормальном потоке.

Относительное позиционирование Когда объект позиционируется relative, это означает, что он изменяет позицию на основеисточник, в котором он был бы расположен в нормальном потоке (статический).Относительный также делает что-то особенное и сообщает браузеру, что все его дочерние элементы будут расположены в соответствии с этим элементом, будь то относительный или абсолютный.

Абсолютное позиционирование Когда объект позиционируется absolute, он размещается в соответствии с положением своего ближайшего не static позиционированного предка.Если его нет, он использует <body> для определения своей позиции.Это может нарушить документооборот, если его братья или сестры не расположены absolute.Если все они расположены absolute от самого верхнего верхнего узла к текущему узлу, то он будет поддерживать поток.

Фиксированное позиционирование Это вынимает элемент из потока и позиционирует объектв соответствии с объектом Window.Это означает, что независимо от состояния прокрутки документа, его размера или любого другого свойства, он всегда будет отображаться в этом месте.(Вот как вы получаете объекты, которые прокручиваются вместе с вами).

Множественные решения вашей проблемы Сначала, как описано другими, вы можете добавить position:relative к #header.Это, как объяснено выше, сделает ваш заголовок ближайшим не static предком и будет использовать его и основу для определения позиции.Это, вероятно, не идеально для вас, потому что вы являетесь начинающим новичком, и этот absolute может легко сломать достаточно потока, чтобы вы могли бороться с элементами одного брата.

В качестве альтернативы вы можете изменить логотип с position:absolute до position:relative.Это будет держать ваш логотип в потоке, но перемещайте логотип в соответствии с тем, где он естественным образом отображается в вашем потоке документов.Скорее всего, если вы не используете float в #header, это, вероятно, тот, который вам нужен, так как он a) сохраняет поток, b) позволяет использовать дочерний элемент floats без потери потока, c) достигает вашего идеального позиционирования,d) сохраняет наследование от родительских элементов (когда это важно).

Другой вариант - изменить #header на position:absolute.Однако это может изменить способ, которым все взаимодействует, если только вы не измените все свои родительские и родственные элементы на position:absolute.Кроме того, вы можете потерять доступ к ширине и высоте, определенной предком, так как они наследуются, только если они находятся в одном потоке.Это вторая лучшая ситуация для вас, поскольку вы можете просто добавить правило body * { position:absolute; }, и все останется в потоке с вами.Тем не менее, он действительно не учит вас тому, что вам нужно узнать о позиционировании, и это просто опора.

Надеюсь, это поможет, FuzzicalLogic

0 голосов
/ 20 октября 2011

Определение позиции: абсолютная в CSS убирает соответствующий элемент из потока документа.

Думайте об этом как о слоях: самый нижний слой - это документ (хотя не всегда, в зависимости от z-index!), А самый верхний слой - это ваш элемент, который вы определили как абсолютно позиционированный.

Установив position: absolute, вы сказали браузеру, что будете нести ответственность за позиционирование элемента относительно верхнего левого угла документа (экрана). Выше вы сказали браузеру позиционировать #logo 20 пикселей слева и 20 пикселей сверху документа. При изменении размера окна просмотра браузера этот элемент останется в этом положении.

Я думаю, что вам нужно позиционировать ваш элемент в потоке документов, без использования абсолютного позиционирования. Это может быть достигнуто с помощью комбинации поплавков, полей и отступов.

0 голосов
/ 20 октября 2011

Я иду с дикой догадкой и говорю, что ваш логотип находится внутри раздела заголовка, но ваш заголовок расположен статически.Поэтому ваш логотип размещается не в соответствии с заголовком, а в соответствии с окном документа.Таким образом, во всех случаях он будет перемещаться на 20 пикселей вправо и вниз на 20 пикселей от верхнего левого угла документа.

Попробуйте установить position: relative на элементе #header.Это будет держать заголовок в том же месте, как и всегда, и логотип будет использовать поле заголовка, чтобы найти его левую и верхнюю позиции, а не окно браузера.

0 голосов
/ 20 октября 2011

CSS-позиционирование может быть сложно понять правильно, но как только вы это сделаете, вы найдете его очень полезным.

Попробуйте это: http://www.barelyfitz.com/screencast/html-training/css/positioning/

По сути, для позиционирования всего, что должно быть заблокировано для родительского элемента или элемента контейнера, необходимо также позиционировать и родительский элемент или элемент контейнера (абсолютный или относительный, не имеет значения), это называется контекстом позиционирования. Если абсолютно позиционированный элемент не может найти родителя или контейнер, который позиционирует себя, он будет использовать `body в качестве контекста позиционирования.

Так что в вашем примере, если бы мне пришлось угадывать, не видя ваш HTML и больше вашего CSS,

добавление position:relative к #header позволит .logo полностью позиционировать себя слева сверху от элемента #header.

Также важно помнить, что абсолютное позиционирование выводит элемент из нормального потока документа.

...