Расположите элемент HTML относительно его контейнера с помощью CSS - PullRequest
176 голосов
/ 19 сентября 2008

Я пытаюсь создать горизонтальную 100% столбчатую диаграмму с использованием HTML и CSS. Я хотел бы создать столбцы, используя DIV с цветами фона и шириной в процентах в зависимости от значений, которые я хочу построить на графике. Я также хочу, чтобы линии сетки отмечали произвольную позицию на графике.

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

Я думаю, что CSS-позиционирование должно справиться с этим, но я пока не знаю, как это сделать. Я хочу иметь возможность указать положение нескольких элементов относительно верхнего левого угла их контейнера. Я регулярно сталкиваюсь с такого рода проблемами (даже вне этого конкретного графического проекта), поэтому мне нужен метод, который:

  1. Кросс-браузер (в идеале без слишком большого числа взломов браузера)
  2. Работает в режиме Причуд
  3. Как можно более ясно / чисто, чтобы облегчить настройку
  4. По возможности без JavaScript.

Ответы [ 5 ]

363 голосов
/ 20 сентября 2008

Вы правы, что позиционирование CSS - это путь. Вот быстрый ход вниз:

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

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

Для демонстрации:

<div id="container">
   <div id="box"> </div>
</div>
#container {
  position: relative;
}

#box {
  position: absolute;
  top: 100px;
  left: 50px;
}

В этом примере верхний левый угол #box будет на 100px вниз и на 50px слева от верхнего левого угла #container. Если бы #container не было установлено position: relative, координаты #box были бы относительно верхнего левого угла порта просмотра браузера.

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

17 голосов
/ 19 сентября 2008

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

div.parent{
    position: relative;
    left: 0px;  /* stick it wherever it was positioned by default */
    top: 0px;
}

div.child{
    position: absolute;
    left: 10px;
    top: 10px;
}
12 голосов
/ 29 июня 2017

Я знаю, что опоздал, но надеюсь, что это поможет.

Ниже приведены значения для свойства position.

  • статические
  • исправлена ​​
  • относительно * * +1010
  • абсолютный

положение: статическое

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

#myelem {
    position : static;
}

позиция: фиксированная

Это установит положение элемента относительно окна браузера (область просмотра). Элемент с фиксированным положением останется на своем месте даже при прокрутке страницы.

(идеально, если вам нужна кнопка прокрутки вверх в правом нижнем углу страницы).

#myelem {
    position : fixed;
    bottom : 30px;
    right : 30px;
}

позиция: относительная

Чтобы разместить элемент в новом месте относительно его исходного положения.

#myelem {
    position : relative;
    left : 30px;
    top : 30px;
}

Приведенный выше CSS переместит элемент #myelem на 30 пикселей влево и на 30 пикселей от вершины его фактического местоположения.

позиция: абсолютная

Если мы хотим, чтобы элемент находился в точном месте на странице.

#myelem {
    position : absolute;
    top : 30px;
    left : 300px;
}

Приведенный выше CSS разместит элемент #myelem в позиции 30px сверху и 300px слева на странице и будет прокручиваться вместе со страницей.

И наконец ...

положение относительное + абсолютное

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

#container {
    position : relative;
}

#div-2 {
    position : absolute;
    top : 0;
    right : 0;
}

Absolute position of a child element w.r.t. a Relative positioned parent element.

Мы можем видеть на изображении выше, что элемент # div-2 расположен в верхнем правом углу внутри элемента # container .

GitHub: Вы можете найти HTML-код приведенного выше изображения здесь и CSS здесь .

Надеюсь, это руководство поможет.

3 голосов
/ 19 сентября 2008

Абсолютное позиционирование позиционирует элемент относительно ближайшего позиционированного предка. Поэтому поместите position: relative в контейнер, тогда для дочерних элементов top и left будут относительно левого верхнего угла контейнера, если дочерние элементы имеют position: absolute. Более подробная информация доступна в спецификации CSS 2.1 .

0 голосов
/ 16 мая 2018

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

Так что, если вы хотите расположить дочерний элемент в верхнем левом углу родительского контейнера, вы должны сделать это:

.parent {
  position: relative;
} 

.child {
  position: absolute;
  top: 0;
  left: 0;  
}

Вы получите большую пользу от прочтения этой статьи . Надеюсь, это поможет!

...