Estou tentando criar um gráfico de barras horizontal 100% empilhado usando HTML e CSS. Gostaria de criar as barras usando DIVs
cores de fundo e larguras de porcentagem, dependendo dos valores que quero representar graficamente. Também quero ter linhas de grade para marcar uma posição arbitrária ao longo do gráfico.
Nas minhas experiências, já consegui empilhar as barras horizontalmente, atribuindo a propriedade CSS float: left
. No entanto, eu gostaria de evitar isso, pois realmente parece mexer com o layout de maneiras confusas. Além disso, as linhas de grade não parecem funcionar muito bem quando as barras são flutuadas.
Eu acho que o posicionamento CSS deve ser capaz de lidar com isso, mas ainda não sei como fazê-lo. Quero poder especificar a posição de vários elementos em relação ao canto superior esquerdo do contêiner. Eu me deparo com esse tipo de problema regularmente (mesmo fora deste projeto gráfico específico), então gostaria de um método que seja:
- Entre navegadores (idealmente sem muitos hacks)
- Executa no modo Quirks
- O mais limpo / limpo possível, para facilitar personalizações
- Feito sem JavaScript, se possível.
fonte
Respostas:
Você está certo de que o posicionamento CSS é o caminho a percorrer. Aqui está uma rápida descrição:
position: relative
fará o layout de um elemento em relação a si mesmo. Em outras palavras, os elementos são dispostos no fluxo normal, depois são removidos do fluxo normal e compensados pelos valores que você especificou (superior, direito, inferior, esquerdo). É importante observar que, por ser removido do fluxo, outros elementos ao seu redor não serão alterados com ele (use margens negativas, se você quiser esse comportamento).No entanto, é provável que você esteja interessado em
position: absolute
posicionar um elemento em relação a um contêiner. Por padrão, o contêiner é a janela do navegador, mas se um elemento pai o tiverposition: relative
ouposition: absolute
estiver definido, ele atuará como o pai para posicionar as coordenadas de seus filhos.Para demonstrar:
Nesse exemplo, o canto superior esquerdo de
#box
100px para baixo e 50px à esquerda do canto superior esquerdo de#container
. Se#container
não tiverposition: relative
definido, as coordenadas de#box
serão relativas ao canto superior esquerdo da porta de visualização do navegador.fonte
Você deve definir explicitamente a posição do contêiner pai, juntamente com a posição do contêiner filho. A maneira típica de fazer isso é algo como isto:
fonte
Eu sei que estou atrasado, mas espero que isso ajude.
A seguir estão os valores para a propriedade position.
posição: estático
Isso é o padrão. Isso significa que o elemento ocorrerá em uma posição que normalmente ocorreria.
posição: fixo
Isso definirá a posição de um elemento em relação à janela do navegador (janela de visualização). Um elemento posicionado fixo permanecerá em sua posição mesmo quando a página rolar.
(Ideal se você quiser o botão de rolagem para cima no canto inferior direito da página).
posição: relativa
Para colocar um elemento em um novo local em relação à sua posição original.
O CSS acima moverá o elemento #myelem 30px para a esquerda e 30px a partir do topo de sua localização real.
posição: absoluto
Se queremos que um elemento seja colocado em uma posição exata na página.
O CSS acima posicionará o elemento #myelem em uma posição 30px a partir do topo e 300px a partir da esquerda na página e rolará com a página.
E finalmente...
posição relativa + absoluta
Podemos definir a propriedade position de um elemento pai como relativa e, em seguida, definir a propriedade position do elemento filho como absoluta . Dessa forma, podemos posicionar o filho em relação ao pai em uma posição absoluta.
Podemos ver na imagem acima o elemento # div-2 está posicionado no canto superior direito dentro do elemento #container .
GitHub: Você pode encontrar o HTML da imagem acima aqui e o CSS aqui .
Espero que este tutorial ajude.
fonte
O posicionamento absoluto posiciona um elemento em relação ao seu ancestral posicionado mais próximo. Então, coloque
position: relative
o contêiner, depois os elementos filho,top
eleft
será relativo à parte superior esquerda do contêiner, desde que os elementos filhos tenhamposition: absolute
. Mais informações estão disponíveis na especificação CSS 2.1 .fonte
Se você precisar posicionar um elemento em relação ao elemento que contém primeiro, será necessário adicionar
position: relative
ao elemento do contêiner . O elemento filho que você deseja posicionar em relação ao pai deve terposition: absolute
. A maneira como o posicionamento absoluto funciona é que ele é feito em relação ao primeiro elemento pai relativamente (ou absolutamente) posicionado . Caso não haja um pai relativamente posicionado, o elemento será posicionado em relação ao elemento raiz (diretamente ao elemento HTML).Portanto, se você deseja posicionar seu elemento filho no canto superior esquerdo do contêiner pai, faça o seguinte:
Você se beneficiará muito com a leitura deste artigo . Espero que isto ajude!
fonte