it-swarm.com.ru

Расположите элемент HTML относительно его контейнера с помощью CSS

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

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

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

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

Вы правы, что позиционирование 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 будут относительно верхнего левого угла порта просмотра браузера.

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

358
Bryan M.

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

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

div.child{
    position: absolute;
    left: 10px;
    top: 10px;
}
16
Stephen Deken

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

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

  • статический
  • фиксированный
  • родственник
  • абсолютный

position: static

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

#myelem {
    position : static;
}

положение: исправлено

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

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

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

position: относительный

Поместить элемент в новом месте относительно его исходного положения.

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

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

position: absolute

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

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

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

И наконец...

позиция относительная + абсолютная

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

#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 здесь .

Надеюсь, что это учебник помогает.

11
yusufshakeel

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

3
Jim

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

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

.parent {
  position: relative;
} 

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

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

0
Nesha Zoric