ฉันรู้ว่ามี hr (กฎแนวนอน) ใน html แต่ฉันไม่เชื่อว่ามี vr (กฎแนวตั้ง) ฉันผิดหรือไม่ถ้าไม่ทำไมไม่มีกฎแนวตั้ง
hr
องค์ประกอบจะกลายเป็นแนวตั้งโดยอัตโนมัติ คุณต้องตั้งค่าheight
คุณสมบัติ (เช่นความสูง: 80%;)
ฉันรู้ว่ามี hr (กฎแนวนอน) ใน html แต่ฉันไม่เชื่อว่ามี vr (กฎแนวตั้ง) ฉันผิดหรือไม่ถ้าไม่ทำไมไม่มีกฎแนวตั้ง
hr
องค์ประกอบจะกลายเป็นแนวตั้งโดยอัตโนมัติ คุณต้องตั้งค่าheight
คุณสมบัติ (เช่นความสูง: 80%;)
คำตอบ:
ไม่ไม่มีกฎแนวตั้ง
มันไม่สมเหตุสมผลที่จะมีอย่างใดอย่างหนึ่ง HTML ถูกแยกวิเคราะห์ตามลำดับซึ่งหมายความว่าคุณจัดวางโค้ด HTML ของคุณจากบนลงล่างซ้ายไปขวาตามที่คุณต้องการให้ปรากฏจากบนลงล่างซ้ายไปขวา (โดยทั่วไป)
แท็ก vr ไม่เป็นไปตามกระบวนทัศน์นั้น
วิธีนี้ทำได้ง่ายโดยใช้ CSS Ex:
<div style="border-left:1px solid #000;height:500px"></div>
โปรดทราบว่าคุณต้องระบุความสูงหรือเติมเนื้อหาลงในคอนเทนเนอร์
คุณสามารถสร้างกฎแนวตั้งได้ดังนี้: <hr style="width: 1px; height: 20px; display: inline-block;">
ตามที่ผู้อื่นชี้ให้เห็นแนวคิดของกฎแนวตั้งไม่สอดคล้องกับแนวคิดดั้งเดิมที่อยู่เบื้องหลังโครงสร้างและการนำเสนอเอกสาร HTML อย่างไรก็ตามทุกวันนี้ (โดยเฉพาะอย่างยิ่งกับการแพร่หลายของเว็บแอป) มีสถานการณ์จำนวนน้อยที่สิ่งนี้จะเป็นประโยชน์อย่างแน่นอน
ตัวอย่างเช่นให้พิจารณาเมนูการนำทางแนวนอนที่อยู่ด้านบนของหน้าจอซึ่งคล้ายกับแถบเมนูในแอปพลิเคชัน 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 ใช้ข้อความแสดงแทนเป็นคำแนะนำเครื่องมืออย่างไม่ถูกต้องนั่นคือสิ่งที่แอตทริบิวต์หัวเรื่องมีไว้สำหรับ!)
<style type="text/css">
.vr
{
display:inline;
height:100%;
width:1px;
border:1px inset;
margin:5px
}
</style>
<div style="font-size:50px">Vertical Rule: →<div class="vr"></div>←</div>
ลองใช้งาน
<hr> ภายในจอแสดงผล: flex จะทำให้แสดงในแนวตั้ง
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>
เกี่ยวกับ:
writing-mode:tb-rl
ที่ไหนบน -> ล่างขวา -> ซ้าย?
เราต้องการกฎแนวตั้งสำหรับสิ่งนี้
มันจะไปไหน?
ใช้ CSS เพื่อใส่เส้นขอบให้กับองค์ประกอบหากคุณต้องการอะไรแบบนั้น
HTML มีการวางตำแหน่งแนวตั้งเพียงเล็กน้อยหรือไม่มีเลยเนื่องจากลักษณะการพิมพ์ของเค้าโครงเนื้อหา Vertical Rule ไม่เหมาะกับความหมาย
ลองดูแล้วคุณจะรู้เอง:
<body>
rokon<br />
rkn <hr style="width: 1px; height: 10px; display: inline; margin-left: 2px; margin-right: 2px;" />rockon<br />
rocks
</body>
</html>
ทำได้ 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/
โซลูชันนี้ยังไม่ต้องการความสูงคงที่
ลองทำตามนี้
คุณสามารถกำหนดความสูงและความกว้างบน " div " เช่นขอบเขตสำหรับ " hr "
ระยะขอบของ " hr " ใช้ในการจัดตำแหน่ง
<div style="display: inline-flex; width: 25px; height: 100px;">
<hr style="margin: 0px 0px 0px 12.5px;">
</div>
ในบริบทของรายการที่ใช้เป็นการนำทางแท็ก <vr /> จะมีประโยชน์อย่างสมบูรณ์ เหตุผลที่ไม่มีก็เพราะว่า "มันไม่สมเหตุสมผลที่จะมีอย่างใดอย่างหนึ่ง" ในบริบทของ HTML เมื่อทศวรรษที่แล้ว
สำหรับการใช้งานในอีเมล HTML สำหรับไคลเอนต์เดสก์ท็อปส่วนใหญ่คุณต้องใช้ตาราง ในกรณีนี้คุณสามารถใช้<hr>
แท็กโดยใช้สไตล์อินไลน์ที่จำเป็น (แต่เรียบง่าย) เช่น:
<hr width="1" size="50">
แน่นอนว่าการจัดแต่งทรงผมด้วย CSS นั้นยืดหยุ่นกว่า แต่ GMail และสิ่งที่คล้ายกันไม่อนุญาตให้ใช้สไตล์ CSS ใด ๆ นอกเหนือจากอินไลน์ ...
คุณสามารถใช้ css เพื่อจำลองเส้นแนวตั้งและใช้คลาสบน div
.vhLine {
border-left: thick solid #000000;
}
คุณสามารถทำได้อย่างง่ายดายโดย
ลงทะเบียนองค์ประกอบของคุณ
var vr = document.registerElement('v-r'); // vertical rule please, yes!
* -
จำเป็นในองค์ประกอบที่กำหนดเองทั้งหมด
v-r {
height: 100%;
width: 1px;
border-left: 1px solid gray;
/*display: inline-block;*/
/*margin: 0 auto;*/
}
* คุณอาจต้องใช้ความสูงเล็กน้อยdisplay:inline-block|inline
เนื่องจากinline
จะไม่ขยายไปถึงความสูงขององค์ประกอบ ใช้ระยะขอบเพื่อจัดกึ่งกลางเส้นภายในคอนเทนเนอร์
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
เพียงแค่ใช้คลาส CSS นี้กับองค์ประกอบที่คุณกำหนด
.vr {
height: 100%;
width: 1px;
border-left: 1px solid gray;
/*display: inline-block;*/
/*margin: 0 auto;*/
}
คุณสามารถสร้างแท็กที่กำหนดเองได้ดังนี้:
<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 />
ไม่มีแท็กใน HTML แต่คุณสามารถใช้ |.
คุณสามารถใช้แท็ก HTML5 SVG ใหม่:
<svg style="position:absolute;width:100%;height:100%;">
<line id="myVerticalLine" y1="0" y2="100" x1="0" x2="0">
</line>
</svg>
ฉันคิดว่ามันง่ายที่จะสร้างภาพของเส้นแล้วแทรกลงในโค้ดเป็น "กฎ" โดยตั้งค่าความกว้างและ / หรือความสูงตามต้องการ ทั้งหมดนี้เป็นรูปภาพแนวนอน แต่ไม่มีอะไรหยุดฉัน (หรือคุณ) จากการใช้รูปภาพ "กฎแนวตั้ง"
สิ่งนี้ยอดเยี่ยมด้วยเหตุผลหลายประการ คุณสามารถใช้เส้นสีหรือรูปแบบต่างๆเป็น "กฎ" ได้อย่างง่ายดายและเนื่องจากจะไม่มีข้อความแม้ว่าคุณจะใช้วิธี "ปกติ" โดยใช้ hr ใน HTML แต่ก็ไม่ควรส่งผลกระทบต่อ SEO หรือสิ่งอื่น ๆ เช่น ที่. และไฟล์ภาพจะ / ควรมีขนาดเล็กมาก (มากที่สุด 1 หรือ 2KB)
คำตอบที่ซับซ้อนเกินไปมากเกินไป เพียงสร้างแท็ก TableData ที่ครอบคลุมจำนวนแถวที่คุณต้องการโดยใช้ rowspan จากนั้นใช้เส้นขอบด้านขวาสำหรับแถบจริง
ตัวอย่าง:
<td rowspan="5" style="border-right-color: #000000; border-right-width: thin; border-right-style: solid"> </td>
<td rowspan="5"> </td>
ตรวจสอบให้แน่ใจว่า "& nbsp" ในบรรทัดที่สองทำงานในจำนวนเดียวกันกับบรรทัดแรก เพื่อให้มีระยะห่างระหว่างทั้งสองอย่างเหมาะสม
เทคนิคนี้ให้บริการฉันค่อนข้างดีกับเวลาใน HTML5
วันนี้เป็นไปได้ด้วย CSS3
hr {
background-color:black;
color:black;
-webkit-transform:rotate(90deg);
position:absolute;
width:100px;
height:2px;
left:100px;
}
สำหรับผู้ที่พยายามสร้างคอลัมน์สำหรับข้อความมีคุณสมบัติของกฎคอลัมน์ที่คุณควรพิจารณาใช้!
.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>
<div style="width:1px;background-color:red;height:30px;float:right;"></div>
ทำได้อย่างง่ายดายโดยใช้ div เช่นนี้
นั่นไม่ใช่.
ทำไม? อาจเป็นเพราะตารางที่มีสองคอลัมน์จะทำ
ไม่มีไม่มี และฉันจะเล่าเรื่องราวเล็ก ๆ น้อย ๆ ให้คุณฟังว่าทำไมถึงไม่เป็นเช่นนั้น แต่ก่อนอื่น วิธีแก้ปัญหาอย่างรวดเร็ว:
ก) ใช้คลาส 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) ใช้เส้นขอบด้านเดียวและอาจเป็น:first-child
ตัวเลือกCSS หากคุณต้องการใช้ตัวแบ่งทั่วไประหว่างองค์ประกอบพี่น้อง / คู่หู
<vr>
FITTINGในกระบวนทัศน์เดิมคำตอบมากมายในที่นี้ชี้ให้เห็นว่าตัวแบ่งแนวตั้งไม่เหมาะกับกระบวนทัศน์ / วิธีการดั้งเดิมของ HTML ... ซึ่งผิดอย่างสิ้นเชิง นอกจากนี้คำตอบยังขัดแย้งกับตัวเองมาก
ผู้คนเดียวกันอาจจะเรียกคลาส CSS ของพวกเขาชัดเจน "clearfix" - มีอะไรที่จะแก้ไขปัญหาเกี่ยวกับการลอยคุณเป็นเพียงการล้างมัน ... แม้จะมีองค์ประกอบใน HTML3 <clear>
คือ: น่าเศร้าที่สิ่งนี้และการลอยตัวเป็นหนึ่งในความเข้าใจผิดทั่วไปไม่กี่อย่าง
อย่างไรก็ตาม. "กลับมาแล้ว" ใน "วัยเดิม HTML" มีความคิดเกี่ยวกับบางสิ่งบางอย่างที่ไม่เหมือนใครinline-block
, มีเพียงblocks
, และinlines
tables
สุดท้ายคือสาเหตุที่<vr>
ไม่มีอยู่จริง
ย้อนกลับไปมีการสันนิษฐานว่า:
หากคุณต้องการแบ่งบางสิ่งในแนวตั้งและ / หรือสร้างบล็อกเพิ่มเติมจากซ้ายไปขวา =>
=> คุณกำลังสร้าง / ต้องการสร้างคอลัมน์ =>
=> ซึ่งหมายความว่าคุณกำลังสร้างตาราง =>
= > ตารางมีเส้นขอบตามธรรมชาติระหว่างเซลล์ => ไม่มีเหตุผลที่จะสร้างไฟล์<vr>
วิธีนี้ยังใช้ได้จริง แต่เมื่อเวลาผ่านไปไวยากรณ์ที่สร้างขึ้นสำหรับตารางไม่เหมาะสำหรับทุกกรณีรวมถึงรูปแบบเริ่มต้น
:first-child
ตัวเลือกที่ฉันแนะนำไว้ข้างต้น ...