Có vr (quy tắc dọc) trong html không?


133

Tôi biết có một hr (quy tắc ngang) trong html, nhưng tôi không tin rằng có một vr (quy tắc dọc). Tôi có sai không và nếu không, tại sao không có quy tắc dọc?


17
Đây là một câu hỏi chết người, nhưng với thông số CSS3 hiện đã có, bạn có thể sử dụng biến đổi: xoay (90deg) để tạo quy tắc dọc, ngang.
Jules

3
Nếu bạn sử dụng flexbox làm các hàng (display: flex; flex-direction: row;) hrsẽ tự động trở thành dọc. Bạn chỉ cần đặt thuộc heighttính của nó (ví dụ: height: 80%;).
Rodrigo

Câu trả lời:


156

Không, không có quy tắc dọc.

Nó không có ý nghĩa logic để có một. HTML được phân tích cú pháp tuần tự, nghĩa là bạn bố trí mã HTML của mình từ trên xuống dưới, từ trái sang phải theo cách bạn muốn nó xuất hiện từ trên xuống dưới, từ trái sang phải (nói chung)

Thẻ vr không tuân theo mô hình đó.

Điều này rất dễ thực hiện bằng CSS, tuy nhiên. Ví dụ:

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

Lưu ý rằng bạn cần chỉ định chiều cao hoặc điền vào vùng chứa nội dung.


4
Các bảng có thể phân tách các mục theo chiều dọc, vì vậy những gì bạn đang nói không phải là lý do thực sự không có thẻ vr.
CiscoIPPhone

6
Đó không phải là lý do tại sao các bảng được thêm vào đặc tả HTML. Bảng để hiển thị dữ liệu được lập bảng. Hầu như mọi phần tử HTML đều có thể được sử dụng để phân tách các mục theo chiều dọc (mọi thứ bạn đặt để hiển thị: chặn và thả nổi: còn lại với bất kỳ chiều cao nào được đặt)
Andy Baird

19
erf. Tôi đã cố gắng nói rằng nếu mọi thứ đã có thể được phân tách theo chiều dọc thì làm thế nào để thêm một vr không tuân theo mô hình HTML?
CiscoIPPhone

4
@CiscoIPPhone - Phân tách dọc sẽ yêu cầu quy tắc ngang. Tách bên sẽ yêu cầu một quy tắc dọc. Ergo, Andy Baird là chính xác, tôi nghĩ vậy.
Joshua

3
Tôi không thể đồng ý rằng nó không tuân theo mô hình. Như bạn đã nói nó được phân tích tuần tự, từ trên xuống dưới, từ trái sang phải. Bạn có thể phân chia nội dung đi từ trái sang phải theo quy tắc dọc. Trong những ngày đầu của HTML, tôi đồng ý rằng nó sẽ không có ý nghĩa logic. Bây giờ một quy tắc dọc là một thứ được sử dụng trong html, mặc dù không có thẻ chính xác về mặt ngữ nghĩa cho nó. Chỉ hai xu của tôi.
Hendeca

37

Bạn có thể tạo một quy tắc dọc như thế này: <hr style="width: 1px; height: 20px; display: inline-block;">


16

Như những người khác đã chỉ ra, khái niệm quy tắc dọc không phù hợp với các ý tưởng ban đầu đằng sau cấu trúc và cách trình bày các tài liệu HTML. Tuy nhiên, những ngày này (đặc biệt là với sự phổ biến của các ứng dụng web) có một số ít kịch bản trong đó điều này thực sự hữu ích.

Ví dụ, hãy xem xét một menu điều hướng ngang được cố định ở phía trên màn hình, tương tự như thanh menu trong hầu hết các ứng dụng GUI có cửa sổ. Bạn có một số mục menu cấp cao nhất được sắp xếp từ trái sang phải mà khi nhấp vào mở menu thả xuống. Nhiều năm trước, người ta thường tạo ra cái này với một bảng đơn, nhưng đây là HTML xấu và được công nhận rộng rãi rằng cách chính xác để đi sẽ là một danh sách với CSS được tùy chỉnh rất nhiều.

Bây giờ, giả sử bạn muốn nhóm các mục tương tự, nhưng thêm một dấu phân cách dọc ở giữa các nhóm, để đạt được thứ gì đó như thế này:

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

Sử dụng <hr style="width: 1px; height: 100%; ..." />các tác phẩm, nhưng có thể được coi là không chính xác về mặt ngữ nghĩa vì bạn đang thay đổi yếu tố đó thực sự là để làm gì. Hơn nữa, bạn không thể sử dụng điều này trong một số yếu tố nhất định trong đó DTD HTML chỉ cho phép các yếu tố cấp độ nội tuyến (ví dụ: trong phạm vi<span> yếu tố).

<span style="display: inline-block; width:1px; height:100%; background:#000; margin: 0 2px;"></span>Tuy nhiên, một tùy chọn tốt hơn sẽ không phải là tất cả các trình duyệt hỗ trợ thuộc tính display: inline-block;CSS, do đó, tùy chọn cấp độ nội tuyến thực sự duy nhất là sử dụng một hình ảnh như vậy:

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

Điều này có thêm lợi thế là tương thích với các trình duyệt chỉ có văn bản (như lynx) khi ký tự ống được hiển thị thay vì hình ảnh. (Tôi vẫn khó chịu khi M $ IE sử dụng không chính xác văn bản thay thế làm công cụ; đó là thuộc tính tiêu đề dành cho!)


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>

Hãy thử nó.


7

Làm thế nào về:

writing-mode:tb-rl

Trường hợp trên cùng-> dưới cùng, phải-> trái?

Chúng ta sẽ cần quy tắc dọc cho việc này.


Đó là một điểm hay. Tuy nhiên, điều đó có nghĩa là hiển thị trang theo cách độc đáo vì bạn phải cạnh tranh với tất cả các yếu tố khác trong dom. Bạn đã bao giờ nhận thấy rằng đôi khi có sự khác biệt kết xuất giữa các trình duyệt? ;) ~ Tuy nhiên, điểm rất tốt .
jcolebrand

7

Một <hr> bên trong màn hình: flex sẽ làm cho nó hiển thị theo chiều dọc.

Mã thông báo: https://jsfiddle.net/w6y5t1kL/

Thí dụ:

<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

Không có, nó sẽ đi đâu?

Sử dụng CSS để đặt một đường viền bên phải trên một phần tử nếu bạn muốn một cái gì đó tương tự.


2

HTML có ít hoặc không có định vị dọc do tính chất chính tả của bố cục nội dung. Quy tắc dọc chỉ không phù hợp với ngữ nghĩa của nó.


2

Hãy thử nó và bạn sẽ biết chính mình:

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

2

bạn có thể làm theo 2 cách:

  1. tạo kiểu như bạn đã đưa vào div nhưng thay đổi viền trái sang viền phải
  2. chụp ảnh và làm cho chiều rộng của nó 1-2 px

2

Câu hỏi cổ xưa nhưng tôi đã giải quyết vấn đề này display:flex;và nó hoạt động rất tốt:

<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/

Giải pháp này cũng không yêu cầu chiều cao cố định.


Giải pháp của tương lai, nhưng có lẽ phải đến 2017-18 + :)
jave.web

2

Thử cái này.

Bạn có thể đặt chiều cao và chiều rộng trên " div ", như phạm vi cho " hr ".

Lề của " hr " được sử dụng để căn chỉnh.

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


2

Tôi biết tôi đang thêm câu trả lời của mình rất muộn, nhưng nó chắc chắn sẽ có giá trị. Bạn có thể đạt được đường thẳng đứng bằng cách sử dụngflexhr

Xem codepen của tôi ở đây .


2
Muộn còn hơn không!
Jry9972

1

Trong ngữ cảnh của một mục danh sách đang được sử dụng làm điều hướng, thẻ <vr /> sẽ hoàn toàn hữu ích. Lý do nó không tồn tại là vì "Nó không có ý nghĩa logic để có một cái" trong bối cảnh HTML một thập kỷ trước.


1

Để sử dụng trong email HTML cho hầu hết các máy khách để bàn, bạn phải sử dụng bảng. Trong trường hợp này, bạn có thể sử dụng <hr>thẻ, với kiểu dáng nội tuyến cần thiết (nhưng đơn giản), như:

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

Tất nhiên, kiểu dáng với CSS linh hoạt hơn, nhưng GMail và tương tự không cho phép sử dụng bất kỳ kiểu CSS nào khác ngoài ...


1

Bạn có thể sử dụng css để mô phỏng một đường thẳng đứng và sử dụng lớp trên div

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

1

Bạn có thể rất dễ dàng làm điều này bằng cách

hr{
 transform: rotate(90deg);
}
<html>
<head>
</head>
<body>
<hr>
</body> 
</html>
Hãy cẩn thận về chiều cao và chiều rộng của hr


1

Các yếu tố tùy chỉnh HTML5 (hoặc CSS thuần túy)

nhập mô tả hình ảnh ở đây

1. javascript

Đăng ký yếu tố của bạn.

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

*Các - này là bắt buộc trong tất cả các yếu tố tùy chỉnh.

2. css

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

* Bạn có thể cần mân mê một chút với display:inline-block|inlineinline sẽ không mở rộng để chứa chiều cao của phần tử. Sử dụng lề để căn giữa dòng trong một container.

3. khởi tạo

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

* Thật không may, bạn không thể tạo các thẻ tự đóng tùy chỉnh.

sử dụng

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

nhập mô tả hình ảnh ở đây

ví dụ: http://html5.qry.me/vertical-rule


Bạn không muốn gây rối với javascript?

Đơn giản chỉ cần áp dụng lớp CSS này cho phần tử được chỉ định của bạn.

css

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

* Xem ghi chú ở trên.

liên kết đến câu trả lời ban đầu về SO .


0

Bạn có thể tạo một thẻ tùy chỉnh như vậy:

<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>

(Nếu bất cứ ai biết một cách mà tôi có thể biến thẻ này thành thẻ "kết thúc mở", như <hr>cho tôi biết và tôi sẽ chỉnh sửa nó trong)


Bạn có thể gắn thẻ ngắn vào<vr />
jave.web


0

Bạn có thể sử dụng thẻ HTML5 SVG mới:

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

0

Tôi thấy thật dễ dàng để tạo một hình ảnh của một dòng , sau đó chèn nó vào mã dưới dạng "quy tắc", đặt chiều rộng và / hoặc chiều cao nếu cần. Đây đều là những hình ảnh quy tắc ngang, nhưng không có gì ngăn tôi (hoặc bạn) sử dụng hình ảnh "quy tắc dọc".

Điều này là mát mẻ vì nhiều lý do; bạn có thể dễ dàng sử dụng các dòng, màu hoặc mẫu khác nhau làm "quy tắc" và vì chúng sẽ không có văn bản, ngay cả khi bạn đã thực hiện theo cách "bình thường" bằng cách sử dụng hr trong HTML, nó không ảnh hưởng đến SEO hoặc các thứ khác như cái đó. Và tệp hình ảnh sẽ / rất nhỏ (tối đa 1 hoặc 2KB).


Bạn nên bao gồm mã mẫu để thể hiện kỹ thuật bạn đang đề xuất.
Adam Katz

0

Quá nhiều câu trả lời quá phức tạp. Chỉ cần tạo một thẻ TableData kéo dài bao nhiêu hàng bạn muốn nó sử dụng hàngpan. Sau đó sử dụng đường viền bên phải cho thanh thực tế.

Thí dụ:

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

Đảm bảo rằng "& nbsp" trong dòng thứ hai chạy cùng số lượng dòng như dòng đầu tiên. để có khoảng cách thích hợp giữa cả hai.

Kỹ thuật này đã phục vụ tôi khá tốt với thời gian của tôi trong HTML5.


0

Hôm nay là có thể với CSS3

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

0

Đối với những người đang cố gắng tạo cột cho văn bản, có một thuộc tính quy tắc cột mà bạn nên xem xét sử dụng!

.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>

Có thể dễ dàng thực hiện bằng cách sử dụng div như thế này


-1

Không có.

Tại sao? Có lẽ bởi vì một bảng có hai cột sẽ làm.


23
Bởi vì mọi người không nghĩ các bảng nên được sử dụng cho việc này (tôi đã không downvote).
erikkallen

-2

Không có. Và tôi sẽ kể cho bạn một câu chuyện nhỏ về lý do tại sao không. Nhưng trước tiên, giải pháp nhanh chóng:

a) Sử dụng lớp CSS cho các thành phần cơ bản span/ div, ví dụ <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;
}

Trình diễn sử dụng => https://jsfiddle.net/fe3tasa0/

b) Sử dụng đường viền một phía và có thể CSS:first-child bộ chọn nếu bạn muốn áp dụng một bộ chia chung giữa các phần tử anh chị em / neigbour.

Câu chuyện về <vr> PHÙ HỢP trong mô hình ban đầu,
nhưng vẫn không có ở đó:

Nhiều câu trả lời ở đây cho thấy, bộ chia dọc không phù hợp với mô hình / cách tiếp cận HTML gốc ... điều đó hoàn toàn sai. Ngoài ra các câu trả lời mâu thuẫn với nhau rất nhiều.

Những người đó có lẽ đang gọi lớp CSS rõ ràng của họ là "Clearfix" - không có gì phải sửa về việc nổi, bạn chỉ đang xóa nó ... Thậm chí còn có một yếu tố trong HTML3 : <clear>. Đáng buồn thay, điều này và giải phóng mặt bằng nổi là một trong số ít những quan niệm sai lầm phổ biến.

Dù sao. "Trước đó" trong "thời đại HTML gốc", không có suy nghĩ về một cái gì đó như inline-block, có blocks, inlinestables.

Cái cuối cùng thực sự là lý do tại sao <vr>không tồn tại.
Trước đó, người ta cho rằng:
Nếu bạn muốn chia dọc một thứ gì đó và / hoặc tạo thêm các khối từ trái sang phải =>
=> bạn đang tạo / muốn tạo cột =>
=> có nghĩa là bạn đang tạo bảng =>
= > bảng có đường viền tự nhiên giữa các ô của chúng =>
không có lý do để tạo<vr>

Cách tiếp cận này thực sự vẫn còn hiệu lực, nhưng theo thời gian cho thấy, cú pháp được tạo cho các bảng không phù hợp với mọi trường hợp cũng như kiểu mặc định của nó.


Một giả định khác, có lẽ sau này, là nếu bạn không tạo bảng, bạn có thể là các phần tử khối nổi . Điều đó có nghĩa là chúng dính vào nhau và một lần nữa, bạn có thể đặt đường viền và những ngày đó thậm chí có thể sử dụng :first-childbộ chọn mà tôi đã đề xuất ở trên ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.