html中是否有vr(垂直规则)?


133

我知道html中有一个hr(水平规则),但是我不相信有一个vr(垂直规则)。我错了吗?如果没有,为什么没有垂直定律?


17
这是一个尚待解决的问题,但是现在有了CSS3规范,您可以使用transform:rotate(90deg)来制作垂直,水平线。
Jules 2012年

3
如果将flexbox用作行(显示:flex; flex-direction:row;),hr元素将自动变为垂直。您只需要设置它的height属性即可(例如,高度:80%;)。
罗德里戈

Answers:


156

不,没有垂直的规则。

拥有一个没有逻辑意义。HTML是按顺序分析的,这意味着您要从上到下,从左到右排列您的HTML代码,从上到下,从左到右(通常)显示

vr标签不遵循该范例。

但是,使用CSS很容易做到这一点。例如:

<div style="border-left:1px solid #000;height:500px"></div>

请注意,您需要指定高度或将内容填充到容器中。


4
表格可以垂直分隔项目,因此您所说的并不是没有vr标签的真正原因。
CiscoIPPhone

6
这不是将表添加到HTML规范的原因。表格用于显示列表数据。几乎任何HTML元素都可以用于垂直分隔项目(您设置为显示,阻止和浮动:设置了任何高度的左侧)
Andy Baird

19
嗯 我试图说的是,如果事物已经可以在垂直方向上分开了,那么添加vr会不会遵循HTML范式呢?
CiscoIPPhone

4
@CiscoIPPhone-垂直分隔需要水平规则。横向分离需要垂直的规则。Ergo,安迪·贝尔德(Andy Baird)是正确的,我认为。
约书亚

3
我不能同意它不遵循范式。正如您所说的,它是从上到下,从左到右顺序解析的。您可以使用垂直规则从左到右划分内容。在HTML的早期,我同意这在逻辑上是没有道理的。现在,即使没有语义上正确的标记,垂直规则也是html中经常使用的东西。只是我的两分钱。
亨德卡

37

您可以像这样制作一条垂直规则: <hr style="width: 1px; height: 20px; display: inline-block;">


16

正如其他人指出的那样,垂直规则的概念与HTML文档的结构和表示形式背后的原始思想不符。但是,这些天(尤其是随着Web应用程序的普及)在少数情况下确实有用。

例如,考虑固定在屏幕顶部的水平导航菜单,类似于大多数窗口化GUI应用程序中的菜单栏。您具有从左到右排列的几个顶级菜单项,单击这些菜单项可打开下拉菜单。几年前,通常的做法是使用单行表创建此表,但这是不好的HTML,并且众所周知,正确的方法是使用高度自定义的CSS列表。

现在,假设您要对相似的项目进行分组,但要在各组之间添加一个垂直分隔符,以实现以下目的:

[Item 1a] [Item 1b] | [Item 2a] [Item 2b]

使用<hr style="width: 1px; height: 100%; ..." />作品,但在您更改该元素的实际用途时,可能会在语义上被认为是错误的。此外,您不能在HTML DTD仅允许内联级别的元素(例如,在<span>元素内)中的某些元素中使用此功能。

更好的选择是<span style="display: inline-block; width:1px; height:100%; background:#000; margin: 0 2px;"></span>,但是并非所有浏览器都支持display: inline-block;CSS属性,因此唯一真正的内联级别选项是使用如下图像:

<img src="pixel.gif" alt="|" style="width:1px; height:100%; background:#000; margin: 0 2px;" />

由于具有管道字符而不是图像,因此具有与纯文本浏览器(如lynx)兼容的附加优点。(这仍然让我感到烦恼的是,M $ IE错误地使用alt文本作为工具提示;这就是title属性的作用!)


8
<style type="text/css">
.vr
{
  display:inline;
  height:100%;
  width:1px;
  border:1px inset;
  margin:5px
}
</style>

<div style="font-size:50px">Vertical Rule: &rarr;<div class="vr"></div>&larr;</div>

试试看。


7

怎么样:

writing-mode:tb-rl

顶部->底部,右侧->左侧?

为此,我们将需要垂直规则。


那是个很好的观点。但是,这意味着以非常规的方式呈现页面,因为您必须与dom中的所有其他元素竞争。您是否曾经注意到有时浏览器之间存在渲染差异?;)〜尽管如此,非常好
jcolebrand

7

display:flex内的<hr>将使其垂直显示。

JSFiddle:https://jsfiddle.net/w6y5t1kL/

例:

<div style="display:flex;">
  <div>
    Content
    <ul>
      <li>Continued content...</li>
    </ul>
  </div>
  <hr>
  <div>
    Content
    <ul>
      <li>Continued content...</li>
    </ul>
  </div>
</div>

3

没有,它会去哪里?

如果您想要这样的话,请使用CSS在元素上添加右边框。


2

由于内容布局的印刷性质,HTML几乎没有垂直定位。垂直规则不符合其语义。


2

尝试一下,您将了解自己:

<body>
rokon<br />
rkn <hr style="width: 1px; height: 10px; display: inline; margin-left: 2px; margin-right: 2px;" />rockon<br />
rocks
</body>
</html>

2

你可以用两种方式做:

  1. 按照您已经在div中给出的方式创建样式,但将border-left更改为border-right
  2. 拍摄图像并使其宽度为1-2像素

2

古老的问题,但是我用来解决了display:flex;,并且效果很好:

<div style="display:flex;border:1px dotted black;margin-bottom:20px;">
    <div>
        This is a div
    </div>
    <div style="border-left:1px solid black;margin:0 7.5px;"></div>
    <div>
        This is another div
    </div>  
</div>

https://jsfiddle.net/6qfd59vm/3/

此解决方案也不需要固定高度。


未来的解决方案,但可能要到2017年18
jave.web

2

试试这个。

您可以在“ div ” 上设置高度和宽度,例如“ hr ”的范围 ”。

hr ” 的边距用于对齐。

<div style="display: inline-flex; width: 25px; height: 100px;">
  <hr style="margin: 0px 0px 0px 12.5px;">
</div>



1

在将列表项用作导航的上下文中,<vr />标记将非常有用。它不存在的原因是因为十年前在HTML上下文中“拥有一个逻辑上不合逻辑”。


1

要在大多数台式机客户端的HTML电子邮件中使用,必须使用表格。在这种情况下,您可以使用<hr>带有必要(但简单)内联样式的标记,例如:

<hr width="1" size="50">

当然,使用CSS进行样式设置更为灵活,但是GMail和类似工具不允许使用内联以外的任何CSS样式...


1

您可以使用CSS模拟一条垂直线,并在div上使用该类

.vhLine {
  border-left: thick solid #000000;
}

1

您可以很容易地做到这一点

hr{
 transform: rotate(90deg);
}
<html>
<head>
</head>
<body>
<hr>
</body> 
</html>
注意hr的高度和宽度


1

HTML5 自定义元素(或纯CSS)

在此处输入图片说明

1. JavaScript

注册您的元素。

var vr = document.registerElement('v-r'); // vertical rule please, yes!

* -在所有自定义元素中都是必填项。

2. CSS

v-r {
    height: 100%;
    width: 1px;
    border-left: 1px solid gray;
    /*display: inline-block;*/    
    /*margin: 0 auto;*/
}

*您可能需要摆弄一些东西,display:inline-block|inline因为它inline不会扩展到包含元素的高度。使用边距使线在容器内居中。

3.实例化

js: document.body.appendChild(new vr());
or
HTML: <v-r></v-r>

*很遗憾,您无法创建自定义自动关闭标签。

用法

 <h1>THIS<v-r></v-r>WORKS</h1>

在此处输入图片说明

例如:http//html5.qry.me/vertical-rule


不想惹JavaScript?

只需将此CSS类应用于您指定的元素。

的CSS

.vr {
    height: 100%;
    width: 1px;
    border-left: 1px solid gray;
    /*display: inline-block;*/    
    /*margin: 0 auto;*/
}

*请参阅上面的注释。

链接到SO的原始答案


0

您可以这样创建一个自定义标签:

<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: 0px 5px 0px 5px;
height: 100%;
vertical-align: top;
}
</style>
</head>
<body>
this is text <vr></vr> more text
</body>
</html>

(如果有人知道我可以将其变成“开放式”标签的方式,例如<hr>让我知道,我将对其进行编辑)


您可以将其短标记为<vr />
jave.web,2016年


0

您可以使用新的HTML5 SVG标签:

<svg style="position:absolute;width:100%;height:100%;">
    <line id="myVerticalLine" y1="0" y2="100" x1="0" x2="0">
    </line>
</svg>

0

我发现制作线条图像很容易,然后将其作为“规则”插入代码中,并根据需要设置宽度和/或高度。这些都是水平规则图像,但是没有什么阻止我(或您)使用“垂直规则”图像。

这很酷,原因很多。您可以轻松地使用不同的线条,颜色或图案作为“规则”,并且由于它们没有文本,即使您使用hr在HTML中以“常规”方式进行操作,也不会影响SEO或其他类似内容那。并且图像文件应该/应该很小(最多1或2KB)。


您应该包括示例代码来演示您所建议的技术。
亚当·卡兹

0

答案过于复杂。只需制作一个TableData标记即可使用rowspan跨越您想要的行数。然后使用右边界表示实际的条形图。

例:

<td rowspan="5" style="border-right-color: #000000; border-right-width: thin; border-right-style: solid">&nbsp;</td>
<td rowspan="5">&nbsp;</td>

确保第二行中的“&nbsp”行数与第一行相同。因此两者之间要有适当的间距。

在HTML5中,这项技术对我的工作非常有益。


0

今天有可能 CSS3

hr {
  background-color:black;
  color:black;
  -webkit-transform:rotate(90deg);
  position:absolute;
  width:100px;
  height:2px;
  left:100px;
}

0

对于试图为文本创建列的人,您应该考虑使用column-rule属性!

.content{
  margin: 20px 5%;
  padding: 5px;
  
}
.content p{
  -webkit-column-count: 3;
  -moz-column-count:3;
  -o-column-count:3;
  column-count: 3; 
  -webkit-column-rule: 1px solid #ccc;
  -moz-column-rule: 1px solid #ccc;
  -o-column-rule: 1px solid #ccc;
  column-rule: 1px solid #ccc;
 
  text-align: justify;
}
<div class="content">
  <p>
    Lorizzle ipsum tellivizzle sit amizzle, consectetizzle adipiscing elit. Nullam away things, shizznit stuff, suscipizzle shiz, gravida vizzle, funky fresh. Doggy phat tortizzle. Check it out its fo rizzle. Bizzle izzle shizzle my nizzle crocodizzle dapibus turpizzle tempizzle i'm in the shizzle. Mauris gizzle nibh et ghetto. Vestibulum ass phat. Pellentesque eleifend nizzle nisi. Fo shizzle my shizz shiznit fo shizzle dizzle. Donec dapibus. That's the shizzle uhuh ... yih! urna, pretium eu, mattizzle cool, shit things, nunc. Fizzle suscipizzle. Shizzlin dizzle semper daahng dawg boofron bow wow wow.



  </p>
  
  
</div>


0
<div style="width:1px;background-color:red;height:30px;float:right;"></div>

可以使用div这样轻松完成



-2

不,那里没有。我会告诉你一个为什么没有的小故事。但首先, 快速解决方案:

a)将CSS类用于基本元素span/ div,例如<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;
}

使用演示=> https://jsfiddle.net/fe3tasa0/

b)利用单边边框和CSS:first-child如果您想在同级/近邻元素之间应用通用分隔线,选择器。

关于在原始范式中进行<vr> 拟合的故事,
但仍然没有出现:

这里有许多答案表明,垂直分隔符不适合原始的HTML范式/方法...这是完全错误的。 答案也彼此矛盾。

那些人可能将其清晰的CSS类称为“ clearfix”-浮动没有任何可修复的地方,您只是清除了它……HTML3中甚至还有一个元素:<clear>。可悲的是,这和浮动的清除是为数不多的常见误解之一。

无论如何。“那时候”,在“原始的HTML时代”,有没有关于类似的思想inline-block,有刚blocksinlinestables

最后一个实际上<vr>是不存在的原因。
当时的假设是:
如果您想垂直划分对象和/或从左到右制作更多块=>
=>您正在/想要创建列=>
=>则意味着您正在创建表=>
= >表格在其单元格之间具有自然边界=>
没有理由<vr>

这种方法实际上仍然有效,但是正如时间所表明的那样,表的语法并不适合所有情况,也不适合默认样式。


另一个可能是在以后的假设是,如果不创建表,则可能是浮动块元素。这意味着他们在一起,然后又可以设置边框,而那些日子可能甚至使用:first-child我上面建议的选择器...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.