Posicionar un elemento HTML con respecto a su contenedor usando CSS


Estoy tratando de crear un gráfico horizontal de barras apiladas 100% usando HTML y CSS. Me gustaría crear las barras usando DIVs con colores de fondo y anchos porcentuales dependiendo de los valores que quiero graficar. También quiero tener líneas de cuadrícula para marcar una posición arbitraria a lo largo del gráfico.

En mi experimentación, ya he conseguido que las barras se apilen horizontalmente asignando la propiedad CSS float: left. Sin embargo, me gustaría evitar que, ya que realmente parece meterse con el diseño en formas confusas. Además, las líneas de cuadrícula no parecen funcionar muy bien cuando las barras están flotando.

Creo que el posicionamiento CSS debería ser capaz de manejar esto, pero todavía no sé cómo hacerlo. Quiero poder especificar la posición de varios elementos en relación con la esquina superior izquierda de su contenedor. Me encuentro con este tipo de problemas regularmente (incluso fuera de este proyecto de grafos en particular), así que me gustaría un método que sea:

  1. Navegador cruzado (idealmente sin demasiados navegadores hacks)
  2. Se ejecuta en modo Peculiares
  3. Lo más claro / limpio posible, para facilitar las personalizaciones
  4. Hecho sin JavaScript si es posible.
Author: Peter Mortensen, 2008-09-19

5 answers

Tienes razón en que el posicionamiento CSS es el camino a seguir. He aquí un breve resumen:

position: relative diseñará un elemento relativo a . En otras palabras, los elementos se presentan en flujo normal, luego se eliminan del flujo normal y se compensan con los valores que haya especificado (arriba, derecha, abajo, izquierda). Es importante tener en cuenta que debido a que se elimina del flujo, otros elementos a su alrededor no se desplazarán con él (use márgenes negativos en su lugar si desea esto comportamiento).

Sin embargo, lo más probable es que estés interesado en position: absolute que posicionará un elemento en relación con un contenedor. De forma predeterminada, el contenedor es la ventana del navegador, pero si un elemento padre tiene position: relative o position: absolute establecido en él, entonces actuará como el padre para posicionar las coordenadas de sus hijos.

Para demostrar:

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

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

En ese ejemplo, la esquina superior izquierda de #box sería 100px hacia abajo y 50px hacia la izquierda de la esquina superior izquierda de #container. Si #container lo hizo si no tiene position: relative establecido, las coordenadas de #box serían relativas a la esquina superior izquierda del puerto de vista del navegador.

Espero que eso ayude.

 350
Author: Bryan M.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-23 17:44:30

Debe establecer explícitamente la posición del contenedor padre junto con la posición del contenedor hijo. La forma típica de hacerlo es algo como esto:

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
Author: Stephen Deken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-24 08:49:40

Sé que llego tarde, pero espero que esto ayude.

A continuación se muestran los valores de la propiedad position.

  • estática
  • fijo
  • relativo
  • absoluto

Posición: estática

Esto es por defecto. Significa que el elemento ocurrirá en una posición que normalmente ocurriría.

#myelem {
    position : static;
}

Posición : fijo

Esto establecerá la posición de un elemento con respecto a la ventana del navegador (viewport). A fijo el elemento positioned permanecerá en su posición incluso cuando la página se desplace.

(Ideal si desea el botón de desplazamiento hacia arriba en la esquina inferior derecha de la página).

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

Posición : relativa

Para colocar un elemento en una nueva ubicación relativa a su posición original.

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

El CSS anterior moverá el elemento #myelem 30px a la izquierda y 30px desde la parte superior de su ubicación real.

Posición: absoluta

Si queremos un elemento a colocar en una posición exacta en la página.

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

El CSS anterior colocará el elemento #myelem en una posición 30px desde arriba y 300px desde la izquierda en la página y se desplazará con la página.

Y finalmente...

Posición relativa + absoluta

Podemos establecer la propiedad position de un elemento padre en relative y luego establecer la propiedad position del elemento hijo en absolute. De esta manera podemos posicionar al niño en relación con el padre en una posición absoluta.

#container {
    position : relative;
}

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

Posición absoluta de un elemento hijo w.r. t. a Elemento padre posicionado relativo.

Podemos ver en la imagen de arriba el elemento #div-2 está situado en la esquina superior derecha dentro del elemento #container.

GitHub: Puedes encontrar el HTML de la imagen anterior aquí y CSS aquí.

Espero que este tutorial ayude.

 9
Author: yusufshakeel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-29 08:09:41

El posicionamiento absoluto posiciona un elemento en relación con su antepasado posicionado más cercano. Así que pon position: relative en el contenedor, entonces para los elementos secundarios, top y left serán relativos a la parte superior izquierda del contenedor siempre y cuando los elementos secundarios tengan position: absolute. Más información está disponible en la especificación CSS 2.1 .

 3
Author: Jim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-19 19:53:05

Si necesita colocar un elemento en relación con su elemento que lo contiene primero debe agregar position: relative al elemento contenedor . El elemento hijo que desea posicionar relativamente al elemento padre debe tener position: absolute. La forma en que funciona el posicionamiento absoluto es que se hace en relación con el primer elemento padre relativamente (o absolutamente) posicionado. En caso de que no exista un padre relativamente posicionado, el elemento se posicionará relativo a la raíz element (directamente al elemento HTML).

Así que si desea colocar su elemento hijo en la parte superior izquierda del contenedor padre, debe hacer esto:

.parent {
  position: relative;
} 

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

Usted se beneficiará enormemente de leer este artículo . Espero que esto ayude!

 0
Author: Nesha Zoric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-16 14:17:21