Eu sei que existe um hr (regra horizontal) em html, mas não acredito que exista um vr (regra vertical). Estou errado e, se não, por que não existe uma regra vertical?
Esta é uma questão inoperante, mas com a especificação CSS3 agora disponível, você pode usar transform: rotate (90deg) para criar uma regra vertical e horizontal.
Jules
3
Se você usar o flexbox como linhas (exibição: flex; direção da flexão: linha;) os hrelementos se tornarão automaticamente verticais. Você só precisa definir sua heightpropriedade (por exemplo, height: 80%;).
Rodrigo Rodrigo
Respostas:
156
Não, não há regra vertical.
Não faz sentido lógico ter um. O HTML é analisado sequencialmente, o que significa que você expõe seu código HTML de cima para baixo, da esquerda para a direita como deseja que ele apareça de cima para baixo, da esquerda para a direita (geralmente)
As tabelas podem separar itens verticalmente; portanto, o que você está dizendo não é o verdadeiro motivo para não haver uma tag vr.
CiscoIPPhone
6
Não foi por isso que as tabelas foram adicionadas à especificação HTML. As tabelas são para exibição de dados tabulados. Praticamente qualquer elemento HTML pode ser usado para itens separados verticalmente (qualquer coisa que você definido para display: block e float: left com qualquer conjunto de altura)
Andy Baird
19
erf. Eu estava tentando dizer que se as coisas já podem ser separadas verticalmente, como a adição de um vr não seguiria o paradigma de HTMLs?
CiscoIPPhone
4
@CiscoIPPhone - A separação vertical exigiria uma regra horizontal. A separação lateral exigiria uma regra vertical. Logo, Andy Baird está correto, eu acho.
Joshua
3
Não posso concordar que não siga o paradigma. Como você disse, ele é analisado sequencialmente, de cima para baixo, da esquerda para a direita. Você pode dividir o conteúdo que vai da esquerda para a direita com uma regra vertical. Nos dias anteriores do HTML, eu concordo que não faria sentido lógico. Agora, uma regra vertical é uma coisa frequentemente usada em html, mesmo que não exista uma tag semanticamente correta para ela. Apenas meus dois centavos.
Hendeca 24/05
37
Você pode fazer uma regra vertical como esta: <hr style="width: 1px; height: 20px; display: inline-block;">
Conforme apontado por outros, o conceito de regra vertical não se encaixa nas idéias originais por trás da estrutura e apresentação dos documentos HTML. No entanto, hoje em dia (especialmente com a proliferação de aplicativos da web), existe um pequeno número de cenários em que isso seria realmente útil.
Por exemplo, considere um menu de navegação horizontal fixo na parte superior da tela, semelhante à barra de menus na maioria dos aplicativos GUI em janelas. Você tem vários itens de menu de nível superior organizados da esquerda para a direita que, quando clicados, abrem os menus suspensos. Anos atrás, era prática comum criar isso com uma tabela de linha única, mas esse HTML é ruim e é amplamente reconhecido que o caminho correto a seguir seria uma lista com CSS altamente personalizado.
Agora, suponha que você queira agrupar itens semelhantes, mas adicione um separador vertical entre os grupos, para obter algo assim:
[Item1a][Item1b]|[Item2a][Item2b]
O uso de <hr style="width: 1px; height: 100%; ..." />obras, mas pode ser considerado semanticamente incorreto, pois você está alterando para que serve esse elemento. Além disso, você não pode usá-lo em certos elementos nos quais o DTD HTML permite apenas elementos em nível de linha (por exemplo, dentro de um <span>elemento).
Uma opção melhor seria <span style="display: inline-block; width:1px; height:100%; background:#000; margin: 0 2px;"></span>, no entanto, nem todos os navegadores suportam a display: inline-block;propriedade CSS, portanto, a única opção real em nível de linha é usar uma imagem da seguinte forma:
Isso tem a vantagem adicional de ser compatível com navegadores somente de texto (como o lynx), pois o caractere de barra vertical é exibido em vez da imagem. (Ainda me incomoda que o M $ IE use incorretamente o texto alternativo como uma dica de ferramenta; é para isso que serve o atributo title!)
Este é um bom ponto. No entanto, isso significa renderizar a página de maneira não convencional, porque você precisa competir com todos os outros elementos no domínio. Você já reparou que às vezes existem diferenças de renderização entre os navegadores? ;) ~ No entanto, ponto muito bom .
precisa saber é o seguinte
7
Um <hr> dentro de uma tela: flex fará com que ela seja exibida verticalmente.
O HTML tem pouco ou nenhum posicionamento vertical devido à natureza tipográfica do layout do conteúdo. A Regra Vertical simplesmente não se encaixa em sua semântica.
Pergunta antiga, mas eu resolvi isso com display:flex;e funciona muito bem:
<divstyle="display:flex;border:1px dotted black;margin-bottom:20px;"><div>
This is a div
</div><divstyle="border-left:1px solid black;margin:07.5px;"></div><div>
This is another div
</div></div>
No contexto de um item da lista sendo usado como navegação, uma tag <vr /> seria perfeitamente útil. A razão de não existir é porque "não faz sentido lógico ter um" no contexto do HTML há uma década.
Para uso em email em HTML para a maioria dos clientes de desktop, você precisa usar tabelas. Nesse caso, você pode usar a <hr>tag, com o estilo em linha necessário (mas simples), como:
<hrwidth="1"size="50">
É claro que o estilo com CSS é mais flexível, mas o GMail e similares não permitem o uso de nenhum estilo CSS além do embutido ...
* Você pode precisar se mexer um pouco display:inline-block|inlineporqueinline não se expandirá para conter a altura do elemento. Use a margem para centralizar a linha dentro de um contêiner.
<html><head><style>
vr {display: inline-block;// This is where you'd set the ruler color
background-color: black;// This is where you'd set the ruler width
width:2px;//this is where you'd set the spacing between the ruler and surrounding text
margin:0px5px0px5px;height:100%;vertical-align: top;}</style></head><body>
this is text <vr></vr> more text
</body></html>
(Se alguém souber como eu poderia transformar isso em uma tag "aberta", <hr>informe-me e eu a editarei)
Acho fácil criar uma imagem de uma linha e depois inseri-la no código como uma "regra", definindo a largura e / ou a altura conforme necessário. Todas essas foram imagens de regra horizontal, mas não há nada que me impeça de usar uma imagem de "regra vertical".
Isso é legal por vários motivos; você pode usar diferentes linhas, cores ou padrões facilmente como "regras" e, como elas não teriam texto, mesmo que você a tenha feito da maneira "normal" usando hr em HTML, isso não deve afetar o SEO ou outras coisas como aquele. E o arquivo de imagem seria / deveria ser muito pequeno (no máximo 1 ou 2 KB).
Você deve incluir código de exemplo para demonstrar a técnica que está sugerindo.
Adam Katz
0
Muitas respostas excessivamente complicadas. Basta criar uma tag TableData que abranja quantas linhas você deseja que ele use linhas. Em seguida, use a borda direita da barra real.
Porque as pessoas não acham que as tabelas devam ser usadas para isso (não diminuí o voto).
precisa saber é o seguinte
-2
Não, não há. E vou lhe contar uma pequena história sobre por que não é. Mas primeiro,
soluções rápidas:
a) Use a classe CSS para elementos básicos span/ div, por exemplo <span class="vr"></span>:
.vr{
display:inline-block;
vertical-align: middle;/* note that height must be precise, 100% does not work in some major browsers */
height:100px;
width:1px;
background-color:#000;}
b) Utilize uma borda unilateral e, possivelmente, o :first-childseletor CSS , se desejar aplicar divisores gerais entre os elementos irmãos / vizinhos.
A história sobre <vr>MONTAGEM no paradigma original, mas ainda não estando lá:
Muitas respostas aqui sugerem que o divisor vertical não se encaixa no paradigma / abordagem HTML original ... isso é completamente errado.As respostas também se contradizem bastante.
Essas mesmas pessoas provavelmente estão chamando seu CSS class "clearfix" clara - não há nada a correção sobre flutuante, você está apenas limpá-lo ... Havia até mesmo um elemento em HTML3: <clear>. Infelizmente, isso e a folga da flutuação são um dos poucos equívocos comuns.
De qualquer forma. "Naquela época" em "idades originais HTML", não havia nenhum pensamento sobre algo como inline-block, havia pouco blocks, inlinesetables .
O último é realmente a razão pela qual <vr>não existe.
Naquela época, supunha-se que: se você deseja dividir verticalmente algo e / ou criar mais blocos da esquerda para a direita =>
=> você está criando / deseja criar colunas =>
=> que implica a criação de uma tabela =>
= > tabelas têm bordas naturais entre suas células => não há razão para fazer uma<vr>
Essa abordagem ainda é válida, mas como o tempo mostrou, a sintaxe criada para as tabelas não é adequada para todos os casos, assim como para os estilos padrão.
Outra suposição, provavelmente mais tarde, foi que, se você não estiver criando uma tabela, provavelmente estará flutuando elementos de bloco . Isso significa que eles estão se unindo e, novamente, você pode definir uma borda , e esses dias provavelmente até usam o :first-childseletor que sugeri acima ...
hr
elementos se tornarão automaticamente verticais. Você só precisa definir suaheight
propriedade (por exemplo, height: 80%;).Respostas:
Não, não há regra vertical.
Não faz sentido lógico ter um. O HTML é analisado sequencialmente, o que significa que você expõe seu código HTML de cima para baixo, da esquerda para a direita como deseja que ele apareça de cima para baixo, da esquerda para a direita (geralmente)
Uma tag vr não segue esse paradigma.
Isso é fácil de usar usando CSS, no entanto. Ex:
Observe que você precisa especificar uma altura ou encher o contêiner com conteúdo.
fonte
Você pode fazer uma regra vertical como esta:
<hr style="width: 1px; height: 20px; display: inline-block;">
fonte
Conforme apontado por outros, o conceito de regra vertical não se encaixa nas idéias originais por trás da estrutura e apresentação dos documentos HTML. No entanto, hoje em dia (especialmente com a proliferação de aplicativos da web), existe um pequeno número de cenários em que isso seria realmente útil.
Por exemplo, considere um menu de navegação horizontal fixo na parte superior da tela, semelhante à barra de menus na maioria dos aplicativos GUI em janelas. Você tem vários itens de menu de nível superior organizados da esquerda para a direita que, quando clicados, abrem os menus suspensos. Anos atrás, era prática comum criar isso com uma tabela de linha única, mas esse HTML é ruim e é amplamente reconhecido que o caminho correto a seguir seria uma lista com CSS altamente personalizado.
Agora, suponha que você queira agrupar itens semelhantes, mas adicione um separador vertical entre os grupos, para obter algo assim:
O uso de
<hr style="width: 1px; height: 100%; ..." />
obras, mas pode ser considerado semanticamente incorreto, pois você está alterando para que serve esse elemento. Além disso, você não pode usá-lo em certos elementos nos quais o DTD HTML permite apenas elementos em nível de linha (por exemplo, dentro de um<span>
elemento).Uma opção melhor seria
<span style="display: inline-block; width:1px; height:100%; background:#000; margin: 0 2px;"></span>
, no entanto, nem todos os navegadores suportam adisplay: inline-block;
propriedade CSS, portanto, a única opção real em nível de linha é usar uma imagem da seguinte forma:<img src="pixel.gif" alt="|" style="width:1px; height:100%; background:#000; margin: 0 2px;" />
Isso tem a vantagem adicional de ser compatível com navegadores somente de texto (como o lynx), pois o caractere de barra vertical é exibido em vez da imagem. (Ainda me incomoda que o M $ IE use incorretamente o texto alternativo como uma dica de ferramenta; é para isso que serve o atributo title!)
fonte
Experimente.
fonte
E se:
Onde superior-> inferior, direita-> esquerda?
Vamos precisar de uma regra vertical para isso.
fonte
Um <hr> dentro de uma tela: flex fará com que ela seja exibida verticalmente.
JSFiddle: https://jsfiddle.net/w6y5t1kL/
Exemplo:
fonte
Não existe, para onde iria?
Use CSS para colocar uma borda à direita em um elemento, se você quiser algo assim.
fonte
O HTML tem pouco ou nenhum posicionamento vertical devido à natureza tipográfica do layout do conteúdo. A Regra Vertical simplesmente não se encaixa em sua semântica.
fonte
Experimente e você se conhecerá:
fonte
você pode fazer de duas maneiras:
fonte
Pergunta antiga, mas eu resolvi isso com
display:flex;
e funciona muito bem:https://jsfiddle.net/6qfd59vm/3/
Esta solução também não requer altura fixa.
fonte
Tente isso.
Você pode definir altura e largura em " div ", como o escopo para " hr ".
A margem de " hr " é usada para o alinhamento.
fonte
Sei que estou adicionando minha resposta muito tarde, mas valerá a pena. Você pode obter uma linha vertical usando
flex
ehr
Veja meu código aqui .
fonte
No contexto de um item da lista sendo usado como navegação, uma tag <vr /> seria perfeitamente útil. A razão de não existir é porque "não faz sentido lógico ter um" no contexto do HTML há uma década.
fonte
Para uso em email em HTML para a maioria dos clientes de desktop, você precisa usar tabelas. Nesse caso, você pode usar a
<hr>
tag, com o estilo em linha necessário (mas simples), como:É claro que o estilo com CSS é mais flexível, mas o GMail e similares não permitem o uso de nenhum estilo CSS além do embutido ...
fonte
Você pode usar css para simular uma linha vertical e usar a classe na div
fonte
Você pode fazer isso muito facilmente
fonte
Elementos personalizados em HTML5 (ou CSS puro)
1. javascript
Registre seu elemento.
*O
-
É obrigatório em todos os elementos personalizados.2. css
* Você pode precisar se mexer um pouco
display:inline-block|inline
porqueinline
não se expandirá para conter a altura do elemento. Use a margem para centralizar a linha dentro de um contêiner.3. instanciar
* Infelizmente, você não pode criar tags personalizadas de fechamento automático.
uso
exemplo: http://html5.qry.me/vertical-rule
Não quer mexer com javascript?
Simplesmente aplique esta classe CSS ao seu elemento designado.
css
* Veja as notas acima.
link para a resposta original no SO .
fonte
Você pode criar uma tag personalizada como tal:
(Se alguém souber como eu poderia transformar isso em uma tag "aberta",
<hr>
informe-me e eu a editarei)fonte
<vr />
Não há tags em HTML, mas você pode usar |.
fonte
Você pode usar a nova tag HTML5 SVG:
fonte
Acho fácil criar uma imagem de uma linha e depois inseri-la no código como uma "regra", definindo a largura e / ou a altura conforme necessário. Todas essas foram imagens de regra horizontal, mas não há nada que me impeça de usar uma imagem de "regra vertical".
Isso é legal por vários motivos; você pode usar diferentes linhas, cores ou padrões facilmente como "regras" e, como elas não teriam texto, mesmo que você a tenha feito da maneira "normal" usando hr em HTML, isso não deve afetar o SEO ou outras coisas como aquele. E o arquivo de imagem seria / deveria ser muito pequeno (no máximo 1 ou 2 KB).
fonte
Muitas respostas excessivamente complicadas. Basta criar uma tag TableData que abranja quantas linhas você deseja que ele use linhas. Em seguida, use a borda direita da barra real.
Exemplo:
Verifique se o "& nbsp" na segunda linha executa a mesma quantidade de linhas que a primeira. para que haja um espaçamento adequado entre os dois.
Essa técnica me serviu bastante bem do meu tempo em HTML5.
fonte
Hoje é possível com
CSS3
fonte
Para pessoas que estão tentando criar colunas para texto, há uma propriedade de regra de coluna que você deve considerar usar!
fonte
Facilmente pode ser feito usando uma div como esta
fonte
Não há.
Por quê? Provavelmente porque uma tabela com duas colunas funcionará.
fonte
Não, não há. E vou lhe contar uma pequena história sobre por que não é. Mas primeiro, soluções rápidas:
a) Use a classe CSS para elementos básicos
span
/div
, por exemplo<span class="vr"></span>
:Demonstração de uso => https://jsfiddle.net/fe3tasa0/
b) Utilize uma borda unilateral e, possivelmente, o
:first-child
seletor CSS , se desejar aplicar divisores gerais entre os elementos irmãos / vizinhos.A história sobre
<vr>
MONTAGEM no paradigma original,mas ainda não estando lá:
Muitas respostas aqui sugerem que o divisor vertical não se encaixa no paradigma / abordagem HTML original ... isso é completamente errado. As respostas também se contradizem bastante.
Essas mesmas pessoas provavelmente estão chamando seu CSS class "clearfix" clara - não há nada a correção sobre flutuante, você está apenas limpá-lo ... Havia até mesmo um elemento em HTML3:
<clear>
. Infelizmente, isso e a folga da flutuação são um dos poucos equívocos comuns.De qualquer forma. "Naquela época" em "idades originais HTML", não havia nenhum pensamento sobre algo como
inline-block
, havia poucoblocks
,inlines
etables
.O último é realmente a razão pela qual
<vr>
não existe.Naquela época, supunha-se que:
se você deseja dividir verticalmente algo e / ou criar mais blocos da esquerda para a direita =>
=> você está criando / deseja criar colunas =>
=> que implica a criação de uma tabela =>
= > tabelas têm bordas naturais entre suas células => não há razão para fazer uma
<vr>
Essa abordagem ainda é válida, mas como o tempo mostrou, a sintaxe criada para as tabelas não é adequada para todos os casos, assim como para os estilos padrão.
Outra suposição, provavelmente mais tarde, foi que, se você não estiver criando uma tabela, provavelmente estará flutuando elementos de bloco . Isso significa que eles estão se unindo e, novamente, você pode definir uma borda , e esses dias provavelmente até usam o
:first-child
seletor que sugeri acima ...fonte