Позиционирование содержимого. Позиционирование css: какое оно бывает и где применяется

В языке HTML все элементы можно разделить на блочные и строчные. Блочные элементы обычно представляются как прямоугольные области с некоторым количеством информации. С их помощью выстраивается сетка страницы. Такие элементы занимают все доступное им пространство по ширине, а до и после них обычно присутствует перенос строки. Блокам можно задавать отступы, горизонтальные и вертикальные размеры.

Особенности блочных элементов

К блочным относятся теги, выделяющие большое количество текстовой информации:

,
,

,

,

,
    . Тег
    достаточно часто используется в верстке современных сайтов для создания сеток и обозначает просто какой-то блок или контейнер. В него допустимо вкладывать и другие теги, что возможно не со всеми блочными элементами, поэтому
    удобно использовать. Блоки обычно располагаются друг над другом и не вставляются в строчные элементы. К строчным элементам HTML относится текст, а CSS используется для его оформления.

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

    Поток документа

    Потоком называет порядок отображения элементов страницы, определяемый заданными в CSS свойствами. При этом по умолчанию блоки выстраиваются сверху вниз, а строчные теги при недостатке места переносятся на новую строку и располагаются сверху вниз и слева направо. Расположение элемента на странице зависит от его места в коде: чем он выше, значит, тем раньше он находится. Каждый из блочных элементов выглядит как прямоугольник, который отталкивает от себя соседние. Изменить такое поведение можно при помощи специальных свойств. Выравнивание в CSS определенных блоков по центру или по сторонам контейнера называется позиционированием.

    Позиционирование элементов

    Расположением блоков можно управлять при помощи абсолютного и относительного позиционирования. Позиционирование применяют, чтобы задать крупным разделам на странице определенное место, для создания сложных интерфейсов, всплывающих окон и декоративных элементов. Основное свойство, используемое для позиционирования блоков в CSS - position. У него есть четыре основных свойства:

    • relative;
    • absolute;
    • fixed;
    • static.

    С их помощью можно переключать режимы расположения, задавая один из четырех параметров: top, right, bottom или left. Существует также свойство для упорядочивания слоев - z-index. Позиционирование со свойством static обычно не используется, так как оно обозначает расположение блоков по умолчанию. Поэтому применение каких-либо параметров никак на него не влияет. Для верстки используются остальные три свойства: relative, absolute, fixed.

    Относительное позиционирование

    Относительное позиционирование блоков в CSS, то есть свойство position: relative, означает, что элемент можно переместить и изменить его исходное расположение. Такой блок все равно остается в потоке. На самом деле смещается не он сам, а его копия. Задаются значения свойств для точного указания, насколько сместится блок в ту или иную сторону. Измеряются они чаще всего в пикселях. Но допустимо использовать и другие единицы.

    Использование свойств при относительном позиционировании

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

    Свойство bottom смещает блок в противоположном свойству top направлении. Положительное значение помогает сместить его вверх, а отрицательное - вниз. Свойства right и left сдвигают элемент вправо и влево соответственно. Комбинируя их все, можно задавать блоку точное расположение на странице, смещая его по вертикальной и горизонтальной оси координат. Если увеличить отступы, они будут рассчитываться не от края самого блока, а от его смещенной в сторону копии.

    Абсолютное позиционирование

    Абсолютное позиционирование блоков в CSS задается значением absolute свойства position. Элемент, который позиционирован абсолютно, выпадает из потока документа, а его место занимают соседние блоки. Ширина такого элемента растягивается в зависимости от его содержимого, и сместить его можно, задав определенные значения свойствам top, left, right, bottom. Абсолютное позиционирование блоков в CSS удобно использовать для заголовков. Но срабатывает position: absolute не только для блочных, но и для строчных элементов.

    Выравнивание элементов по центру

    Спозиционированный абсолютно строчный элемент будет вести себя точно так же, как и строчный. Поэтому при помощи позиционирования можно управлять в CSS и текстом. К нему можно применять некоторые новые свойства, например, изменять высоту и ширину. Для центровки и выравнивания по вертикали в CSS используется комбинирование нескольких свойств. Управляет выравниванием по вертикали свойство top. Если нужно разместить блок в CSS по центру, основной контейнер при этом должен быть относительно спозиционированным, а выравниваемый элемент - спозиционированным абсолютно. Контейнеру нужно задать свойство top: 50%, а для перемещения элемента на половину собственной высоты использовать свойство translate со значением “0, -50%”. Абсолютно спозиционированные элементы можно выделить в новый тип, так как к ним применяются свойства, недоступные для других видов позиционирования.

    Позиционирование относительно левого верхнего угла браузера

    Свойства left, top, right и bottom с абсолютно и относительно позиционированными элементами работают по-разному. Для относительных элементов эти свойства задают смещение относительно того места, где находится элемент. Абсолютно споциционированные занимают место относительно определенной системы координат, привязанной к размерам окна браузера. Начальными точками этой системы служат углы окна. При использовании свойства left отступ будет отсчитываться от левой стороны браузера, но полосы прокрутки при этом не возникнет. Свойство top при абсолютной позиционировании задает отступ от верхней стороны браузера до верхней части элемента, к которому оно применено. Комбинируя оба свойства, элемент можно перемещать относительно левого верхнего угла браузера.

    Позиционирование относительно правого верхнего угла браузера

    Аналогичным образом при помощи свойств right и top можно прижимать элемент к правой части окна браузера и менять его расположение по вертикали, смещая в правый верхний угол. При отрицательном значении свойства right блок сместится за границу окна. После этого должна появиться полоса прокрутки. Для смещения элемента вниз используется свойство bottom. Оно задает отступ от нижнего края окна браузера до нижней части блока. При отрицательном его значении также появляется полоса прокрутки, так как элемент смещается за нижнюю границу окна браузера.

    Система координат при абсолютном позиционировании

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

    Точка отсчета для абсолютно позиционированного элемента

    До того как элементу было задано абсолютное позиционирование, он находился на каком-то месте, которое называется неявной точкой отсчета. Если такому блоку не задать свойства, он не сдвинется с места. Сместить его можно, если задать свойство margin. Оно сработает аналогично свойствам позиционирования. Если не определить значение свойства left и всех остальных, тогда оно будет равно auto. Также при помощи auto можно возвращать элементы на свои прежние места.

    Фиксированное позиционирование

    Еще одно значение - fixed. Свойство position закрепляет элемент на каком-то определенном месте. Фиксированное позиционирование часто используется для создания меню в CSS. Оно похоже на абсолютное, но фиксированный блок выпадает из потока. Даже при прокрутке страницы такой элемент останется на своем месте, поэтому его удобно использовать для создания меню в CSS. Точка отсчета при этом будет привязана к окну браузера. Если же спозиционированных блоков оказывается несколько, для их упорядочивания используется свойство z-index. С его помощью можно перекрывать относительные блоки абсолютными, если задать им соответствующий индекс, выраженный целым числом. Чем оно больше, тем выше будет находиться блок.

    При работе с текстом пользователю может потребоваться поменять предложения или целые абзацы местами или расположить фрагменты каким-то нестандартным образом. Переместить блок текста в приложении Microsoft Office Word можно несколькими способами.

    Инструкция

  • Выделите блок текста, который хотите переместить. Сделать это можно с помощью левой кнопки мыши или сочетанием клавиш. Комбинация клавиш Shift и стрелки вправо/влево на клавиатуре позволяет выделить один печатный знак, стрелки вверх/вниз – одну строку.

    Ctrl, Shift и стрелка вправо/влево выделяют слово, а если использовать стрелки вверх или вниз, можно выделить целый абзац.

  • После того как нужный фрагмент будет выделен, подведите к нему курсор и нажмите левую кнопку мыши. Удерживая ее нажатой, перетащите блок текста в то место документа, которое вам необходимо. Отпустите кнопку мыши.
  • Другой вариант: выделите блок и кликните по выделению правой кнопкой мыши. В выпадающем меню выберите команду «Вырезать», - фрагмент текста будет помещен в буфер обмена. Установите курсор в том месте, в которое хотите переместить блок, и снова кликните правой кнопкой мыши. В контекстном меню выберите команду «Вставить».
  • Вызов команд может осуществляться и с клавиатуры. Сочетание клавиш Ctrl и X позволяют вырезать нужный фрагмент текста, а клавиши Ctrl и V – вставить его в другое место документа. Также для этого можно воспользоваться кнопками на панели инструментов на вкладке «Главная».
  • Если вы размещали текст с помощью инструмента «Надпись», необходимо действовать иначе. В данном случае текст помещен в заданную область, которая имеет границы. Чтобы переместить такой блок, выделите не сам текст, а рамку вокруг него, после чего перетащите эту рамку в нужное вам место, удерживая нажатой левую кнопку мыши. Текст, находящийся в пределах границ, является неотъемлемой частью объекта «Надпись», он переместится вместе с рамкой.
  • При работе с текстом, находящимся в ячейках таблицы, подойдет любой из описанных вариантов. Все зависит от конкретных условий: иногда необходимо переместить только текстовую часть, иногда - ячейку или же несколько смежных ячеек.
  • Они работают со всеми позиционированными элементами, кроме статических.

    Пример позиционирования.

    Элементы могут перекрывать друг друга!

    Отображение элемента над остальными!

    Свойство position имеет 4 значения: static , fixed , relative и absolute . Каждое из этих значений будет продемонстрировано ниже с примером использования.

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

    Поток документа

    По умолчанию элементы на веб-странице отображаются в том порядке, в котором они представлены в HTML-документе, т. е. блочные элементы занимают всю доступную для них ширину и укладываются вертикально один под другим. Строчные элементы выстраиваются по горизонтали до тех пор, пока не будет занята вся доступная ширина, после того как вся ширина будет занята, будет сделан перенос строки и всё пойдет по новой. Такой порядок расположения элементов называется нормальным потоком (его также называют потоком документа или общим потоком ).

    С помощью свойства float или position можно убрать элемент из нормального потока. Если элемент "выпадает" из нормального потока, то элементы, которые расположены в коде ниже этого элемента будут смещены на его место на веб-странице.

    Статическое позиционирование

    Статическим называют позиционирование, заданное по умолчанию для всех элементов на веб-странице. Если к элементу не применять свойство position , то он будет статическим и будет отображаться на веб-странице согласно общему потоку элементов.

    При применении CSS свойств top , left , right или bottom к статически позиционированному элементу, они будут игнорироваться.

    Если есть необходимость, то можно задать статическое позиционирование в таблице стилей с помощью значения static:

    Название документа

    Первый абзац.

    Второй абзац.

    Попробовать »

    Фиксированное позиционирование

    Элементы с фиксированным позиционированием располагаются на странице относительно окна браузера. Такие элементы удаляются из общего потока, элементы, следующие в потоке за фиксированным элементом, будут игнорировать его, смещаясь и занимая его место на веб-странице.

    Стоит обратить внимание на то, что элементы с фиксированным позиционирование могут перекрывать другие элементы, скрывая их полностью или частично. При прокрутке длинных страниц, они создают эффект неподвижных объектов, оставаясь на одном и том же месте:

    Название документа

    Текст
     Текст
     Текст
     Текст
     Текст
     Текст
     Текст
     Какой-то текст
     Текст
     Текст
     Текст
     Текст
     Текст
    Попробовать »

    Относительное позиционирование

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

    Такие элементы не влияют на расположение окружающих их элементов, остальные элементы остаются на своих местах и могут быть перекрыты относительно позиционированным элементом:

    Название документа

    Заголовок первого уровня.

    Относительно позиционированный заголовок.

    Заголовок третьего уровня.

    Попробовать »

    Примечание: элементы с относительным позиционированием (relative) обычно используют в качестве родителя для элементов с абсолютным позиционированием (absolute).

    Абсолютное позиционирование

    Элементы с абсолютным позиционированием полностью удаляются из общего потока, остальные элементы будут занимать освободившееся пространство, полностью игнорируя абсолютно позиционированные элементы. Затем можно позиционировать элемент в любое нужное место веб-страницы, используя свойства top , left , right или bottom .

    Все абсолютно позиционированные элементы размещаются относительно окна браузера или относительно ближайшего позиционированного предка (если он есть), у которого свойство position имеет значение absolute , fixed или relative .

    Название документа

    Изменим расположение логотипа с помощью абсолютного позиционирования.
    Теперь логотип будет располагаться в правом верхнем углу страницы.

    Попробовать »

    Перекрывающие элементы

    Когда элементы находятся вне общего потока страницы, они могут перекрывать друг друга. Обычно порядок расположения элементов соответствует их порядку в HTML-коде страницы, однако есть возможность управлять порядком перекрытия с помощью CSS свойства z-index , чем больше его значение, тем выше будет элемент.

    Название документа

    z-index: 1;
    z-index: 0;
    z-index: 2;

    Позиционирование — одно из ключевых понятий в блочной верстке. Разобравшись с ним, вам многое станет понятно, а верстка из шаманства превратится в осмысленный процесс. Итак, речь в статье пойдет о CSS-свойствах position и float .

    1. position: static

    По умолчанию все элементы на странице имеют статическое позиционирование (position: static), это означает, что элемент не позиционирован, и появляется в документе на своем обычном месте, то есть в том же порядке, как и в html-разметке.

    Нет необходимости специально назначать это свойство какому-либо элементу, если только вам не требуется изменить ранее установленное позиционирование на дефолтное.

    #content{ position: static; }

    2. position:relative

    Относительное позиционирование (position: relative) позволяет вам использовать свойства: top, bottom, left и right, для расположения элемента относительно того места, где бы он появился при обычном позиционировании.

    Давайте переместим #content на 20 пикселей вниз, и на 40 пикселей влево:

    #content{ position: relative; top: 20px; left: -40px; }

    Обратите внимание, что на том месте, где бы должен был находится наш блок #content, теперь образовалось пустое пространство. Следующий за блоком #content, блок #footer не переместился ниже, потому что, #content по-прежнему занимает свое место в документе, несмотря на то, что мы передвинули его.

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

    3. position: absolute

    При абсолютном позиционировании (position: absolute), элемент удаляется из документа, и появляется там, где вы ему скажете.

    Давайте, для примера, переместим блок #div-1a в верхний, правый угол страницы:

    #div-1a { position:absolute; top:0; right:0; width:200px; }

    Обратите внимание, что на этот раз, поскольку блок #div-1a был удален из документа, оставшиеся элементы на странице расположились по-другому: #div-1b, #div-1c и #footer переместились выше, на место удаленного блока. А сам блок #div-1a, расположился точно в правом, верхнему углу страницы.

    Таким образом, мы можем позиционировать любой элемент относительно страницы, однако этого не достаточно. На самом деле, нам необходимо позиционировать #div-1a относительно родительского блока #content. И на этом этапе, относительное позиционирование вновь вступает в игру.

    4. position: fixed

    Фиксированное позиционирование (position: fixed), является подразделом абсолютного позиционирования. Единственное его отличие в том, что он всегда находится в видимой области экрана, и не двигается во время прокрутки страницы. В этом отношении, он немного похож на фиксированное фоновое изображение.

    #div-1a { position:fixed; top:0; right:0; width:200px; }

    В IE с position: fixed не все так гладко, как бы нам хотелось, но существует множество способов обойти эти ограничения.

    5. position:relative + position:absolute

    Назначив блоку #content относительное позиционирование (position: relative), мы сможем позиционировать любые дочерние элементы, относительно его границ. Давайте разместим блок #div-1a, в верхнем правом углу блока #content.

    #content { position:relative; } #div-1a { position:absolute; top:0; right:0; width:200px; }

    6. Две колонки

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

    #content { position:relative; } #div-1a { position:absolute; top:0; right:0; width:200px; } #div-1b { position:absolute; top:0; left:0; width:200px; }

    Одним из преимуществ абсолютного позиционирования, является возможность размещать элементы в произвольном порядке, независимо от того, как именно они расположены в разметке. В приведенном выше примере, блок #div-1b расположен перед блоком #div-1a.

    А сейчас у вас должен был возникнуть вопрос: “А куда же делись остальные элементы из нашего примера?”. Они скрылись под абсолютно расположенными блоками. К счастью, есть возможность это исправить.

    7. Две колонки с фиксированной высотой

    Одно из решений – задать фиксированную высоту контейнеру, содержащему колонки.

    #content { position:relative; height: 450px; } #div-1a { position:absolute; top:0; right:0; width:200px; } #div-1b { position:absolute; top:0; left:0; width:200px; }

    Решение не очень подходящее, поскольку мы никогда не знаем заранее, какого размера текст, будет расположен в колонках, и какой шрифт будет использован.

    8. Float

    Для колонок с переменной высотой, абсолютное позиционирование не подходит, поэтому давайте рассмотрим другой вариант.

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

    #div-1a { float:left; width:200px; }

    9. “Плавающие” колонки

    Если назначить первому блоку float: left, а затем второму float: left, каждый из блоков прижмется к левому краю, и мы получим две колонки, с переменной высотой.

    #div-1a { float:left; width:150px; } #div-1b { float:left; width:150px; }

    Также, можно назначить колонкам противоположное значение float, в этом случае, они распределятся по краям контейнера.

    #div-1a { float:right; width:150px; } #div-1b { float:left; width:150px; }

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

    10. Очистка float

    Чистку флоатов можно делать двумя способами. Если после колонок идет еще один блок, достаточно назначить ему clear: both.

    #div-1a { float:left; width:190px; } #div-1b { float:left; width:190px; } #div-1c { clear:both; }

    Или же назначить родительскому контейнеру свойство overflow: hidden

    #content { overflow:hidden; }

    В любом случае, результат будет один и тот же.

    Заключение

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

    Необходимо переместить (оттащить, перевернуть и т.д.) 3 фундаментных блока 300х600х2400 хотя бы на 3-5 метров. Проблема в том, что они находятся за домом и доступа для крана или другой спецтехники нет.
    Блоки в последствии хотел использовать для строительства веранды. Но сейчас мне просто нужно освободить место, на котором они лежат - там планирую навес-беседку.
    Вес каждого (если я правильно посчитал) около 1 тонны. Есть ли мысли по этому поводу?

    Есть, дело не простое, но выполнимое. Мы брали с тестем обычный автомобильный домкрат и несколько кажется двухдюймовых труб и лом. Наши три блока тоже лежали в неудобном месте, мы их переместили метров на 15. Делали так: Под краем блока (они лежали на боку, т.е. на самой своей широкой грани) подкапывали ямку, глубиной чтобы проходил домкрат и рука, чтобы можно было качать его рычаг. На дно ямки клали небольшой отрезок плоской досочки, чтобы не испачкать домкрат и чтобы под нагрузкой он не впивался в землю. Далее довольно прилично поднимали блок с одного края, подталкивая снизу домкратом. Не знаю точно под каким углом, относительно земли, но чтобы можно было несколько полуметровых обрезков трубы подложить равномерно под блок. Потом спускали домкрат и блок укладывался на трубы и выравнивался относительно поверхности земли. Далее в самый длинный отрезок трубы (~1,8 м), которую не подкладывали под блок, вставили лом (для жесткости) и использовали этот гибрид как рычаг, забивая его под другой конец блока и поднимая относительно земли (увеличивая угол между рычагом и землей) толкали блок как бы от себя. Принцип перемещения блоков египетских пирамид. Только вместо бревен как катки использовались трубы. Если почва жидкая, можно предварительно, перед спуском домкрата, под трубы подложить длинные плоские доски, чтобы под весом блока трубы не зарывались. Толкаем, не забывая подкладывать под "нос" блока новую трубу, и высвободившуюся трубу из под "кормы" готовим как следующую под нос.
    В общей сложности мы эти блоки с продолжительностью в 3 года катали каждое лето, пока не докатили их до ворот. Всё думали как их использовать, но так и не придумали. Заказали манипулятор, он их погрузил на себя прямо у ворот и вывез в неизвестном направлении,за некоторую плату
    Сложности возникают на поворотах если они есть, но тоже всё посильно, если под блоком подбивать трубы кувалдой, задавая им направление и корректировать положение блока рычагом с боков. Это он только кажется тяжелым, а потом привыкаешь.

    П.С. Здорово помогла лебедка, которую мы специально купили для этих блоков. Крюк лебедки можно цеплять за столбы от забора (наши нормально выдерживали) и лебедкой блоки по трубам к этим столбам тащить. На блоке должны быть 2 ушка из арматуры, вот за них и цепляли лебедку. Это легче чем подталкивать рычагом, но по времени дольше а сил отнимает тоже не мало - всё время бегать перецеплять лебедку к следующему столбу.

    П.П.С. Объяснил как мог Ежели что - извините.