เพิ่มข้อความกึ่งกลางที่กึ่งกลางของบรรทัด <hr /> - like


217

ฉันสงสัยว่ามีตัวเลือกใดใน xhtml 1.0 ที่เข้มงวดเพื่อสร้างบรรทัดทั้งสองด้านของข้อความที่ต้องการ:

หมวดที่หนึ่ง
----------------------- หัวข้อถัดไป -----------------------
มาตราสอง

ฉันคิดว่าจะทำสิ่งแฟนซีบางอย่างเช่นนี้:

<div style="float:left; width: 44%;"><hr/></div>
<div style="float:right; width: 44%;"><hr/></div>
Next section

หรืออีกทางเลือกหนึ่งเพราะข้างต้นมีปัญหาเกี่ยวกับการจัดตำแหน่ง (ทั้งแนวตั้งและแนวนอน):

<table><tr>
<td style="width:47%"><hr/></td>
<td style="vertical-align:middle; text-align: center">Next section</td>
<td style="width:47%"><hr/></td>
</tr></table>

นอกจากนี้ยังมีปัญหาการจัดตำแหน่งซึ่งฉันแก้ไขด้วยความยุ่งเหยิงนี้:

<table><tr>
<td style="border-bottom: 1px solid gray; width: 47%">&nbsp;</td>
<td style="vertical-align:middle;text-align:center" rowspan="2">Next section</td>
<td style="border-bottom: 1px solid gray; width: 47%">&nbsp;</td>
</tr><tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr></table>

นอกเหนือจากปัญหาการจัดตำแหน่งตัวเลือกทั้งสองรู้สึก 'เหลวไหล' และฉันจะต้องรับผิดชอบมากถ้าคุณเคยเห็นสิ่งนี้มาก่อนและรู้วิธีแก้ปัญหาที่สง่างาม


3
นี่เป็นอีกกระทู้ที่ไม่มีความท้าทายแท็ก - และเป็นทางออก! stackoverflow.com/questions/12648513/…
willoller

1
stackoverflow.com/questions/5214127/…ยังคงเป็นทางออกที่ดีที่สุด

คำตอบที่เป็นประโยชน์ที่นี่จะใช้ CSS Grid
Brian M. Hunt

เพิ่มคำตอบ (SCSS) ซึ่งเปลี่ยนองค์ประกอบเกือบทุกอย่างให้เป็นตัวแบ่งโดยไม่มีพื้นหลังที่กำหนดไว้และอนุญาตการตั้งค่า: สีและลักษณะจังหวะ (แข็ง, ประ, ประประ) ของตัวแบ่งตำแหน่งของข้อความ (ซ้าย, ขวา, กึ่งกลาง) รวมทั้ง ชั้นเรียนที่ใช้สิ่งนี้ (โดยค่าเริ่มต้น.divider)
เทา

ให้การสนับสนุน flexbox ปัจจุบันฉันคิดว่าคำตอบของฉันอาจทำให้มองเห็นได้บ้าง
MatTheCat

คำตอบ:


64

ฉันไม่ทราบว่าสิ่งนี้ได้รับการคิดออกมาหรือไม่ แต่ flexbox เสนอทางออกที่ค่อนข้าง:

<div class="separator">Next section</div>

.separator {
    display: flex;
    align-items: center;
    text-align: center;
}
.separator::before, .separator::after {
    content: '';
    flex: 1;
    border-bottom: 1px solid #000;
}
.separator::before {
    margin-right: .25em;
}
.separator::after {
    margin-left: .25em;
}

ดูhttp://jsfiddle.net/MatTheCat/Laut6zyc/สำหรับการสาธิต

วันนี้ความเข้ากันได้นั้นไม่เลวเลย (คุณสามารถเพิ่มซินแท็กซ์แบบเก่าทั้งหมดได้) และมันจะลดระดับลงอย่างงดงาม


คำตอบที่ดีที่สุดในการพิจารณา flexbox สนับสนุนวันนี้
akivajgordon

นี่เป็นทางออกที่ดี
Smaillns

217

เกี่ยวกับ:

<div style="width: 100%; height: 20px; border-bottom: 1px solid black; text-align: center">
  <span style="font-size: 40px; background-color: #F3F5F6; padding: 0 10px;">
    Section Title <!--Padding is optional-->
  </span>
</div>

ตรวจสอบJSFiddleนี้

คุณสามารถใช้vwหรือ%จะให้มันตอบสนอง


2
การได้รับมูลค่าสูงสุดที่แน่นอนนั้นค่อนข้างยาก มันไม่ตรง -0.5em
Mitar

สมบูรณ์ "Responsive" ด้วย
JimXC

4
ดูคำตอบของฉันสำหรับโซลูชันที่ไม่ต้องการให้คุณระบุสีพื้นหลังหรือความกว้าง
MartinF

ดูคำตอบของฉันสำหรับการตอบสนอง bg โปร่งใสลักษณะตัวแปรและความสูงของตัวแบ่งตำแหน่งของตัวแปรข้อความ นอกจากนี้ยังสามารถนำไปใช้กับตัวเลือกที่แตกต่างกันมากกว่าหนึ่งครั้งสำหรับการมีตัวแบ่งมากกว่าหนึ่งรูปแบบในโครงการเดียวกันโดยใช้ SCSS font-sizeทำงานร่วมกับใด ๆ
เทา

193

วิธีแก้ปัญหานี้โดยไม่ทราบความกว้างและสีพื้นหลังมีดังนี้

โครงสร้าง

<div class="strike">
   <span>Kringle</span>
</div>

CSS

.strike {
    display: block;
    text-align: center;
    overflow: hidden;
    white-space: nowrap; 
}

.strike > span {
    position: relative;
    display: inline-block;
}

.strike > span:before,
.strike > span:after {
    content: "";
    position: absolute;
    top: 50%;
    width: 9999px;
    height: 1px;
    background: red;
}

.strike > span:before {
    right: 100%;
    margin-right: 15px;
}

.strike > span:after {
    left: 100%;
    margin-left: 15px;
}

ตัวอย่าง: http://jsfiddle.net/z8Hnz/

เส้นคู่

ในการสร้างเส้นคู่ให้ใช้หนึ่งในตัวเลือกต่อไปนี้:

1) แก้ไขช่องว่างระหว่างบรรทัด

.strike > span:before,
.strike > span:after {
    content: "";
    position: absolute;
    top: 50%;
    width: 9999px;
    border-top: 4px double red;

ตัวอย่าง: http://jsfiddle.net/z8Hnz/103/

2) ช่องว่างที่กำหนดเองระหว่างบรรทัด

.strike > span:before,
.strike > span:after {
    content: "";
    position: absolute;
    top: 50%;
    width: 9999px;
    height: 5px; /* space between lines */
    margin-top: -2px; /* adjust vertical align */
    border-top: 1px solid red;
    border-bottom: 1px solid red;
}

ตัวอย่าง: http://jsfiddle.net/z8Hnz/105/


รุ่น SASS (SCSS)

จากโซลูชันนี้ฉันได้เพิ่ม SCSS "with color property" หากสามารถช่วยคน ...

//mixins.scss
@mixin bg-strike($color) {

    display: block;
    text-align: center;
    overflow: hidden;
    white-space: nowrap; 

    > span {

        position: relative;
        display: inline-block;

        &:before,
        &:after {
            content: "";
            position: absolute;
            top: 50%;
            width: 9999px;
            height: 1px;
            background: $color;
        }

        &:before {
            right: 100%;
            margin-right: 15px;
        }

        &:after {
            left: 100%;
            margin-left: 15px;
        }
    }
}

ตัวอย่างการใช้งาน:

//content.scss
h2 {
    @include bg-strike($col1);
    color: $col1;
}

รุ่นนี้ทำงานได้ดีขึ้นหากคุณใช้ภาพสำหรับบรรทัด - หรืออย่างน้อยก็ง่ายกว่าที่จะแก้ไขและยังตอบสนองได้
tehlivi

เป็นงานที่ดีมาก! คุณสามารถใช้ตัวช่วยสร้างของคุณเพื่อสร้างเส้นคู่ได้หรือไม่? (มิฉะนั้นผมก็จะหันไปใช้ภาพพื้นหลังซ้ำเล็ก ๆ .)
wloescher

3
ตัวอย่างที่ยอดเยี่ยม! ขอบคุณ :)
plong0

2
นี่เป็นคำตอบที่ดีที่สุดเพราะมันจะทำงานได้โดยไม่ต้องตั้งค่าพื้นหลังและเมื่อคุณต้องตั้งค่าพื้นหลังโปร่งใส
Dinesh Dabhi

1
ตัวอย่างแรกนั้นยอดเยี่ยมมาก! ยินดีด้วย! มันควรจะเป็นคำตอบที่ถูกต้อง!
Luiz Eduardo

87

คุณสามารถทำสิ่งนี้ได้ด้วย :: ก่อนและ :: หลังจากโดยไม่ทราบความกว้างของคอนเทนเนอร์หรือสีพื้นหลังและเพื่อให้ได้สไตล์การแบ่งบรรทัดมากขึ้น ตัวอย่างเช่นสิ่งนี้สามารถแก้ไขได้เพื่อสร้างเส้นคู่เส้นประ ฯลฯ

JSFiddle

การใช้ CSS และ HTML:

.hr-sect {
	display: flex;
	flex-basis: 100%;
	align-items: center;
	color: rgba(0, 0, 0, 0.35);
	margin: 8px 0px;
}
.hr-sect::before,
.hr-sect::after {
	content: "";
	flex-grow: 1;
	background: rgba(0, 0, 0, 0.35);
	height: 1px;
	font-size: 0px;
	line-height: 0px;
	margin: 0px 8px;
}
<div class="hr-sect">CATEGORY</div>

รุ่น SCSS:

.hr-sect {
    display: flex;
    flex-basis: 100%;
    align-items: center;
    color: rgba(0, 0, 0, 0.35);
    margin: 8px 0;

    &:before, &:after {
        content: "";
        flex-grow: 1;
        background: rgba(0, 0, 0, 0.35);
        height: 1px;
        font-size: 0;
        line-height: 0;
        margin: 0 8px;
    }
}

1
วิธีแก้ปัญหาที่สง่างามแม้ว่าจะมีหนึ่งข้อแม้: หากไม่มีข้อความคุณจะยังคงมีช่องว่างระหว่างบรรทัด
Farside

13
นี่เป็นคำตอบที่สะอาดที่สุดในชุดข้อความนี้เพื่อความซื่อสัตย์ปัญหาที่ไม่มีข้อความสามารถมองข้ามได้เนื่องจากคุณต้องการให้ตัวแบ่งที่มีข้อความอยู่เสมอ
Robert

51

ลองสิ่งนี้:

.divider {
	width:500px;
	text-align:center;
}

.divider hr {
	margin-left:auto;
	margin-right:auto;
	width:40%;

}

.left {
	float:left;
}

.right {
	float:right;
}
<div class="divider">
    <hr class="left"/>TEXT<hr class="right" />
</div>

ตัวอย่างสดบนjsFiddle


4
มันทำงานได้อย่างสมบูรณ์และใช้ <hr /> ดังนั้นสิ่งที่อาจผิดกับคำตอบนี้? ฉันไม่พูดอะไร
เคอร์บี้

4
+1 ไม่จำเป็นต้องยุ่งกับสีพื้นหลังหรือใช้แท็กด้วยวิธีที่ไม่ได้ตั้งใจ ข้อเสียอย่างหนึ่งคือ.divider hrความกว้างนั้นขึ้นอยู่กับความยาวของข้อความ คำแนะนำ: .dividerและ.divider hrความกว้างควรระบุไว้ในemหน่วย ในการรับhrความกว้างให้ใช้ ( .dividerความกว้างลบ # ของตัวอักษร) / 2
เคลวิน

12
มันไม่ใช่ทางออกที่ดีที่สุด ถ้าคุณไม่มีความมั่นใจเกี่ยวกับความกว้างของข้อความ ทั้งหมดจะถูกทำลายเมื่อข้อความยาวขึ้น
Iwona Trąbka

นี่คือคำตอบที่ดีที่สุดและง่ายที่สุด
ha9u63ar

1
40% ผิดที่นี่ หากข้อความยาวขึ้นก็จะจัดตำแหน่งผิด
TomSawyer

21

ฉันเพิ่งเจอปัญหาเดียวกันนี่คือวิธีหนึ่งในการแก้ไข:

<table width="100%">
  <tr>
    <td><hr /></td>
    <td style="width:1px; padding: 0 10px; white-space: nowrap;">Some text</td>
    <td><hr /></td>
  </tr>
</table>

มันทำงานได้โดยไม่ต้องตั้งค่าพื้นหลังในองค์ประกอบข้อความเช่นมันจะดูดีโดยไม่คำนึงถึงพื้นหลังที่อยู่ด้านหลัง

คุณสามารถลองได้ที่นี่: http://jsfiddle.net/88vgS/


ไม่สามารถแก้ปัญหา OP ได้ ที่สร้างสองบรรทัดด้วยข้อความระหว่างพวกเขา เขาต้องการให้บรรทัดที่ขาดหายไปและมีข้อความอยู่ที่ส่วนที่ขาดจากนั้นเส้นจะดำเนินต่อไป
Dracorat

2
มันทำในสิ่งที่ OP ต้องการจริงๆ คุณสามารถดูได้ที่jsfiddle.net/88vgS
Robert Kajic

นอกจากนี้เส้นแบ่งส่วนผ่านอะไรกับข้อความที่ส่วนที่ขาดถ้าไม่ใช่สองบรรทัดที่มีข้อความอยู่ระหว่างกลาง
Robert Kajic

คุณควรโยนแท็ก TR ที่เหมาะสมไว้ในนั้น ฉันคิดว่านั่นเป็นสิ่งที่ทำให้ฉันสับสนสักครู่ ตอนแรกฉันคิดว่าด้วยเหตุผลบางอย่างมันเป็นสามบรรทัดไม่ใช่สามคอลัมน์ มาร์กอัปที่ถูกต้องอาจไม่ทำให้ฉันเห็นอย่างนั้น ไม่ว่าจะเป็นทางออกที่แน่นอน
Dracorat

1
แต่นี่ใช้ตารางนั่นคือไม่อนุญาต! โอ้แค่ล้อเล่น GRIDS มีสถานที่ของพวกเขาเกือบทุกเฟรมเวิร์ค GUI XML อื่น ๆ รู้จักและใช้มันได้ทุกที่ (เช่น WPF / XAML) ขอบคุณสำหรับการแก้ปัญหาเพื่อน! สมควรได้รับคะแนนมากกว่า 3 คะแนน ฉันสงสัยว่าความเกลียดชังของผู้คนต่อโต๊ะที่เกลียดชังนั้นจะเป็นอุปสรรค
Nicholas Petersen

10

UPDATE:สิ่งนี้จะไม่ทำงานโดยใช้ HTML5

ให้ตรวจสอบคำถามนี้เพื่อหาเทคนิคเพิ่มเติม: ความท้าทาย CSS ฉันสามารถทำได้โดยไม่แนะนำ HTML เพิ่มเติมหรือไม่


ฉันใช้line-height:0เพื่อสร้างเอฟเฟกต์ในส่วนหัวของเว็บไซต์ของฉันguerilla-alumnus.com

<div class="description">
   <span>Text</span>
</div>

.description {
   border-top:1px dotted #AAAAAA;
}

.description span {
   background:white none repeat scroll 0 0;
   line-height:0;
   padding:0.1em 1.5em;
   position:relative;
}

อีกวิธีที่ดีคือเปิด http://robots. Thoughtbot.com/

เขาใช้ภาพพื้นหลังและลอยเพื่อให้ได้ผลที่ยอดเยี่ยม


1
ฉันชอบสิ่งนี้มันดูดีในเว็บไซต์ของคุณ แต่ฉันไม่สามารถใช้งานได้ (ฉันสงสัยว่ามีการรบกวนจาก jQuery css) :( แต่มันเจ๋งจริงๆ
บ. เอ็ม. ฮันท์

ฉันคิดว่า h1 ของคุณกำลังเพิ่มระยะเวลาลง
imns

1
นี่คือ "แฮ็ค" ที่ใช้พฤติกรรมการแสดงผลที่แตกต่างกันสำหรับ DOCTYPE XTHML 1.0 Transitional หากคุณใช้ DOCTYPE html (สำหรับ HTML5) มันจะไม่ทำงาน
ปีเตอร์

6
<div style="text-align: center; border-top: 1px solid black">
  <div style="display: inline-block; position: relative; top: -10px; background-color: white; padding: 0px 10px">text</div>
</div>

6

หากคุณสามารถใช้ CSS และยินดีที่จะใช้alignแอตทริบิวต์ที่คัดค้านfieldset / legend ที่มีสไตล์จะทำงาน:

<style type="text/css">
fieldset { 
    border-width: 1px 0 0 0;
}
</style>

<fieldset>
<legend align="center">First Section</legend>
Section 1 Stuff
</fieldset>

<fieldset>
<legend align="center">Second Section</legend>
Section 2 Stuff
</fieldset>

วัตถุประสงค์ที่ตั้งใจไว้ของ fieldset คือการจัดกลุ่มเขตข้อมูลในรูปแบบตรรกะ ในฐานะที่เป็น willoler ชี้ให้เห็นเป็นtext-align: centerสไตล์จะไม่ทำงานสำหรับlegendองค์ประกอบ align="center"เลิกใช้ HTML แต่ควรจัดกึ่งกลางข้อความให้ถูกต้องในทุกเบราว์เซอร์


คำอธิบายโดยละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่ฉันกำลังทำอยู่
dclowd9901

ผมค่อนข้างมั่นใจว่า<legend>จะใช้เวลาในลักษณะการแสดงผลของblockหรือinline-blockองค์ประกอบที่จะสามารถเบาะและ margined ซึ่งหมายความว่าtext-align:centerไม่ควรทำงาน ...
dclowd9901

ใช่ตำนานเป็นสิ่งที่ดีสำหรับความหมาย - ฉันใช้พวกเขาสำหรับกลุ่มวิทยุห่อ แต่พวกเขาจะดื้อรั้นฉาวโฉ่
Willoller

ฉันแก้ไขคำตอบของฉัน แต่น่าเสียดายเนื่องจากความดื้อรั้นของเบราว์เซอร์บางอย่างในการจัดแต่งทรงผมที่legendองค์ประกอบalign="center"เป็นทางออกเดียวที่ฉันจะพบว่าน่าเชื่อถือศูนย์ legend
แต้ม Hunner

6

ตาราง Bootstrap:

HTML:

  <div class="row vertical-center">
    <div class="col-xs-5"><hr></div>
    <div class="col-xs-2" style="color: white"> Text</div>
    <div class="col-xs-5"><hr></div>
  </div>

CSS:

.vertical-center{
  display: flex;
  align-items: center;
}

1
vertical-centerชั้นไม่มีอยู่ในบูต (4.3.1) คุณช่วยอัพเดทคำตอบให้พูดได้align-items-centerไหม?
Cameron Hudson

5

คุณสามารถใช้ตำแหน่งสัมพัทธ์และตั้งค่าความสูงบนพาเรนต์

.fake-legend {
  height: 15px;
  width:100%;
  border-bottom: solid 2px #000;
  text-align: center;
  margin: 2em 0;
}
.fake-legend span {
  background: #fff;
  position: relative;
  top: 0;
  padding: 0 20px;
  line-height:30px;
}
<p class="fake-legend"><span>Or</span>
</p>


5

นี่เป็นคำตอบง่ายๆด้วย css เท่านั้นไม่มีเทคนิคพื้นหลัง ...

.center-separator {
    display: flex;
  line-height: 1em;
  color: gray;
}

.center-separator::before, .center-separator::after {
    content: '';
    display: inline-block;
    flex-grow: 1;
    margin-top: 0.5em;
    background: gray;
    height: 1px;
    margin-right: 10px;
    margin-left: 10px;
  }

HTML:

  <div class="center-separator">
    centered text
  </div>

ตัวอย่างซอ: https://jsfiddle.net/0Lkj6wd3/


โซลูชันที่ยอดเยี่ยมและนำกลับมาใช้ใหม่ได้เช่นคลาสยูทิลิตี้
Vignesh

3
<fieldset style="border:0px; border-top:1px solid black">
    <legend>Test</legend>
</fieldset>

แฮ็คชั่วร้าย ...


1
ฉันจะไม่เรียกมันว่าแฮ็ค แต่ฉันจะทดสอบว่ามันทำงานได้ในทุกเบราว์เซอร์ที่คุณต้องการสนับสนุน
Nick Larsen

fieldset ไม่ต้องการที่จะใช้เช่นนั้นมันถูกแฮ็กเข้าที่ ;-)
Dänu

3

กระแทกโพสต์เก่า 2 ปี แต่นี่คือวิธีที่ฉันเข้าหาสถานการณ์เหล่านี้โดยใช้เพียงองค์ประกอบเดียวและ CSS

​h1 {
    text-align: center;
}

h1:before,
h1:after {
    content: "";
    background: url('http://heritageonfifth.com/images/seperator.png') left center repeat-x;
    width: 15%;
    height: 30px;
    display: inline-block;
    margin: 0 15px 0 0;
}

h1:after{
    background-position: right center;
    margin: 0 0 0 15px;
}

และนี่คือซอที่จะลองดู: http://jsfiddle.net/sRhBc/ (ภาพสุ่มจาก Google ถ่ายไปที่ชายแดน)

ข้อเสียเปรียบเพียงอย่างเดียวของวิธีนี้คือมันไม่รองรับ IE7


3

เพียงแค่ใช้

    hr
    {
        padding: 0;
        border: none;
        border-top: 1px solid #CCC;
        color: #333;
        text-align: center;
        font-size: 12px;
        vertical-align:middle;
    }
    hr:after
    {
        content: "Or";
        display: inline-block;
        position: relative;
        top: -0.7em;
        font-size: 1.2em;
        padding: 0 0.25em;
        background: white;
    }

2

Woohoo โพสต์แรกของฉันแม้ว่านี่จะเป็นปี เพื่อหลีกเลี่ยงปัญหาการระบายสีพื้นหลังด้วย wrappers คุณสามารถใช้ inline-block กับ hr (ไม่มีใครพูดอย่างชัดเจน) การจัดแนวข้อความควรอยู่กึ่งกลางอย่างถูกต้องเนื่องจากอยู่ในองค์ประกอบอินไลน์

<div style="text-align:center">
    <hr style="display:inline-block; position:relative; top:4px; width:45%" />
       &nbsp;New Section&nbsp;
    <hr style="display:inline-block; position:relative; top:4px; width:45%" />
</div>

2

ฉันใช้ a h1โดยมีช่วงตรงกลาง

ตัวอย่าง HTML:

<h1><span>Test archief</span></h1>

ตัวอย่าง CSS:

.archive h1 {border-top:3px dotted #AAAAAA;}
.archive h1 span { display:block; background:#fff; width:200px; margin:-23px auto; text-align:center }

เรียบง่ายเหมือนที่


ยินดีต้อนรับสู่ StackOverflow Youri แทนที่จะเป็นคุณอาจพิจารณาใช้span divมันมีจุดประสงค์เดียวกันยกเว้นเป็นองค์ประกอบของบล็อก :)
ระวัง

@Nix บล็อกองค์ประกอบภายในองค์ประกอบแบบอินไลน์? ไม่เป็นไรช่วงเวลาเป็นตัวเลือกที่ดี
Jonathan Azulay

1
@MrAzulay h1เป็นองค์ประกอบอินไลน์ spanเป็นสิ่งที่ดีสำหรับสิ่งห่อ แต่เหตุผลที่ฉันชอบdivในกรณีนี้เป็นเพราะ Youri CSS ใช้การตั้งค่าไปspan display:block;ฉันไม่เห็นจุดที่ทำให้องค์ประกอบอินไลน์เป็นองค์ประกอบบล็อกเมื่อมีองค์ประกอบบล็อกที่เหมาะสม ( div) พร้อมใช้งาน
ห้าม

@ ห้ามนี่เป็นเรื่องธรรมดาที่ต้องทำใช่ไหม ในขณะที่การวางบล็อกด้านในแบบอินไลน์คือการปฏิบัติที่ไม่ดี นี่เป็นบทความที่ดีเกี่ยวกับเรื่องนี้skypoetsworld.blogspot.se/2008/10/…
Jonathan Azulay

อุ๊ปส์ฉันพิมพ์ผิดในความคิดเห็นล่าสุดของฉัน ฉันยอมรับว่าคุณไม่ควรวางบล็อกไว้ในองค์ประกอบอินไลน์ แต่h1จริงๆแล้วเป็นองค์ประกอบ BLOCK ขอโทษสำหรับความสับสน. ถึงกระนั้นฉันยังไม่เห็นจุดที่จะทำให้เป็นspanองค์ประกอบบล็อก แต่ยุติธรรมพอ
ห้าม

2

เมื่อมองไปด้านบนฉันได้ปรับเปลี่ยนเป็น:

CSS

.divider {
    font: 33px sans-serif;
    margin-top: 30px;
    text-align:center;
    text-transform: uppercase;
}
.divider span {
    position:relative;
}
.divider span:before, .divider span:after {
    border-top: 2px solid #000;
    content:"";
    position: absolute;
    top: 15px;
    right: 10em;
    bottom: 0;
    width: 80%;
}
.divider span:after {
    position: absolute;
    top: 15px;
    left:10em;
    right:0;
    bottom: 0;
}

HTML

<div class="divider">
    <span>This is your title</span></div>

ดูเหมือนว่าจะทำงานได้ดี


2

การแก้ปัญหาของ @kajic และใส่สไตล์ใน CSS:

<table class="tablehr">
  <td><hr /></td>
  <td>Text!</td>
  <td><hr /></td>
</table>

จากนั้น CSS (แต่ขึ้นอยู่กับ CSS3 ในการใช้ตัวเลือกที่ n):

.tablehr { width:100%; }
.tablehr > tbody > tr > td:nth-child(2) { width:1px; padding: 0 10px; white-space: nowrap; }

ไชโย

(PS บน tbody และ tr, Chrome, IE และ Firefox อย่างน้อยแทรก tbody และ tr โดยอัตโนมัติซึ่งเป็นสาเหตุที่ตัวอย่างของฉันเช่น @ kajic's ไม่ได้รวมสิ่งเหล่านี้เพื่อให้สิ่งต่าง ๆ สั้นลงในมาร์กอัป HTML ที่ต้องการโซลูชันนี้ ได้รับการทดสอบกับ IE, Chrome และ Firefox รุ่นใหม่ล่าสุดตั้งแต่ปี 2013)


2

DEMO PAGE

HTML

<header>
  <h1 contenteditable>Write something</h1>
</header>

CSS

header{ 
  display:table;
  text-align:center; 
}
header:before, header:after{ 
  content:'';
  display:table-cell; 
  background:#000; 
  width:50%;
  -webkit-transform:scaleY(0.3);
  transform:scaleY(0.3);
}
header > h1{ white-space:pre; padding:0 15px; }

2

สิ่งนี้ใช้ได้สำหรับฉันและไม่ต้องการสีพื้นหลังด้านหลังข้อความเพื่อซ่อนเส้นขอบ แต่ใช้แท็กชมจริงแทน คุณสามารถเล่นกับความกว้างเพื่อให้ได้ขนาดเส้นที่แตกต่างกันของ HR

<div>
    <div style="display:inline-block;width:45%"><hr width='80%' /></div>
    <div style="display:inline-block;width: 9%;text-align: center;vertical-align:90%;text-height: 24px"><h4>OR</h4></div>
    <div style="display:inline-block;width:45%;float:right" ><hr width='80%'/></div>
</div>

2

ฉันทำซอที่ใช้ FlexBox และจะให้สไตล์ที่แตกต่างของ HR (สองบรรทัด, สัญลักษณ์ที่อยู่ตรงกลางของบรรทัด, ปล่อยเงา, สิ่งที่ใส่เข้าไป, เส้นประ, ฯลฯ )

CSS

button {
    padding: 8px;
    border-radius: 4px;
    background-color: #fff;
    border: 1px solid #ccc;
    margin: 2px;
  }

  button:hover {
    cursor: pointer;
  }

  button.active {
    background-color: rgb(34, 179, 247);
    color: #fff;
  }

  .codeBlock {
    display: none;
  }

  .htmlCode, .cssCode {
    background-color: rgba(34, 179, 247, 0.5); 
    width: 100%;
    padding: 10px;
  }

  .divider {
    display: flex;
    flex-direction: row;
    flex-flow: row;
    width: 100%;
  }

  .divider.fixed {
    width: 400px;
  }

  .divider > label {
    align-self: baseline;
    flex-grow: 2;
    white-space: nowrap;
  }

  .divider > hr {
    margin-top: 10px;
    width: 100%;
    border: 0;
    height: 1px;
    background: #666;
  }

  .divider.left > label {
    order: 1;
    padding-right: 5px;
  }

  .divider.left > hr {
    order: 2
  }

  .divider.right > label {
    padding-left: 5px;
  }
  /* hr bars with centered text */
  /* first HR in a centered version */

  .divider.center >:first-child {
    margin-right: 5px;
  }
  /* second HR in a centered version */

  .divider.center >:last-child {
    margin-left: 5px;
  }
  /** HR style variations **/

  hr.gradient {
    background: transparent;
    background-image: linear-gradient(to right, #f00, #333, #f00);
  }

  hr.gradient2 {
    background: transparent;
    background-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(255, 0, 0, 0.5), rgba(0, 0, 0, 0));
  }

  hr.dashed {
    background: transparent;
    border: 0;
    border-top: 1px dashed #666;
  }

  hr.dropshadow {
    background: transparent;
    height: 12px;
    border: 0;
    box-shadow: inset 0 12px 12px -12px rgba(0, 0, 0, 0.5);
  }

  hr.blur {
    background: transparent;
    border: 0;
    height: 0;
    /* Firefox... */
    box-shadow: 0 0 10px 1px black;
  }

  hr.blur:after {
    background: transparent;
    /* Not really supposed to work, but does */
    content: "\00a0";
    /* Prevent margin collapse */
  }

  hr.inset {
    background: transparent;
    border: 0;
    height: 0;
    border-top: 1px solid rgba(0, 0, 0, 0.1);
    border-bottom: 1px solid rgba(255, 255, 255, 0.3);
  }

  hr.flared {
    background: transparent;
    overflow: visible;
    /* For IE */
    height: 30px;
    border-style: solid;
    border-color: black;
    border-width: 1px 0 0 0;
    border-radius: 20px;
  }

  hr.flared:before {
    background: transparent;
    display: block;
    content: "";
    height: 30px;
    margin-top: -31px;
    border-style: solid;
    border-color: black;
    border-width: 0 0 1px 0;
    border-radius: 20px;
  }

  hr.double {
    background: transparent;
    overflow: visible;
    /* For IE */
    padding: 0;
    border: none;
    border-top: medium double #333;
    color: #333;
    text-align: center;
  }

  hr.double:after {
    background: transparent;
    content: "§";
    display: inline-block;
    position: relative;
    top: -0.7em;
    font-size: 1.5em;
    padding: 0 0.25em;
  }

HTML

<div class="divider left">
  <hr />
  <label>Welcome!</label>
</div>
<p>&nbsp;</p>
<div class="divider right">
  <hr />
  <label>Welcome!</label>
</div>
<p>&nbsp;</p>
<div class="divider center">
  <hr />
  <label>Welcome!</label>
  <hr />
</div>
<p>&nbsp;</p>
<div class="divider left fixed">
  <hr />
  <label>Welcome!</label>
</div>
<p>&nbsp;</p>
<div class="divider right fixed">
  <hr />
  <label>Welcome!</label>
</div>
<p>&nbsp;</p>
<div class="divider center fixed">
  <hr />
  <label>Welcome!</label>
  <hr />
</div>

หรือนี่คือซอ Fiddle: http://jsfiddle.net/mpyszenj/439/


2

คุณสามารถลองทำfieldsetและจัดองค์ประกอบ "คำอธิบายแผนภูมิ" (ข้อความ "ส่วนถัดไป" ของคุณ) ให้ตรงกลางของฟิลด์ด้วยการborder-topตั้งค่าเท่านั้น ฉันไม่แน่ใจเกี่ยวกับการจัดวางตำแหน่งตำนานตามองค์ประกอบ fieldset ฉันคิดว่าอาจเป็นเรื่องง่ายที่margin: 0px autoจะทำเคล็ดลับ

ตัวอย่าง:

<fieldset>
      <legend>Title</legend>
</fieldset>

1

<hr />คุณสามารถทำได้โดยไม่ต้อง ความหมายควรออกแบบด้วย CSS ในกรณีนี้มันเป็นไปได้ทีเดียว

div.header
{
  position: relative;
  text-align: center;
  padding: 0 10px;
  background: #ffffff;
}

div.line
{
  position: absolute;
  top: 50%;
  border-top: 1px dashed;
  z-index: -1;
}

<div class="header">
  Next section
  <div class="line">&nbsp;</div>
</div>

1

มี FIELDSET เก่าที่ดีอยู่เสมอ

 fieldset
 {
border-left: none;
border-right: none;
border-bottom: none;
 }
 fieldset legend
 {
text-align: center;
padding-left: 10px;
padding-right: 10px;
 }

ควรใช้ Fieldsets กับแบบฟอร์มเท่านั้น
tehlivi

1

HTML

<div style="display: grid; grid-template-columns: 1fr 1fr 1fr;" class="add-heading">
    <hr class="add-hr">
    <h2>Add Employer</h2>
    <hr class="add-hr">
</div>

CSS

.add-hr { 
    display: block; height: 1px;
    border: 0; border-top: 4px solid #000;
    margin: 1em 0; padding: 0; 
  }

.add-heading h2{
  text-align: center;
}

0

CSS

.Divider {
width: 100%; height: 30px;  text-align: center;display: flex;
}
.Side{
width: 46.665%;padding: 30px 0;
}
.Middle{
width: 6.67%;padding: 20px 0;
}

HTML

<div class="Divider">
    <div class="Side"><hr></div>
    <div class="Middle"><span>OR</span></div>
    <div class="Side"><hr></div>
</div>

คุณสามารถแก้ไขความกว้างในคลาส "ด้าน" และ "กลาง" ตามความยาวของข้อความในแท็ก "span" ตรวจสอบให้แน่ใจว่าความกว้างของ "กลาง" บวก 2 เท่าของความกว้างของ "ด้าน" เท่ากับ 100%


0

พื้นหลังตอบสนองโปร่งใสความสูงของตัวแปรและสไตล์ของตัวแบ่งตำแหน่งตัวแปรของข้อความระยะห่างที่ปรับได้ระหว่างตัวคั่นและข้อความ ยังสามารถนำมาใช้หลายครั้งด้วยตัวเลือกที่แตกต่างกันสำหรับหลายรูปแบบตัวแบ่งในโครงการเดียวกัน
SCSS ด้านล่าง

มาร์กอัป (HTML):

<div class="divider" text-position="right">Divider</div>

CSS :

.divider {
  display: flex;
  align-items: center;
  padding: 0 1rem;
}

.divider:before,
.divider:after {
  content: '';
  flex: 0 1 100%;
  border-bottom: 5px dotted #ccc;
  margin: 0 1rem;
}

.divider:before {
  margin-left: 0;
}

.divider:after {
  margin-right: 0;
}

.divider[text-position="right"]:after,
.divider[text-position="left"]:before {
  content: none;
}

โดยไม่text-positionได้เริ่มต้นที่ศูนย์

การสาธิต:

และSCSSเพื่อแก้ไขอย่างรวดเร็ว:

$divider-selector    : ".divider";
$divider-border-color: rgba(0,0,0,.21);
$divider-padding     : 1rem;
$divider-border-width: 1px;
$divider-border-style: solid;
$divider-max-width   : 100%;

#{$divider-selector} {
    display: flex;
    align-items: center;
    padding: 0 $divider-padding;
    max-width: $divider-max-width;
    margin-left: auto;
    margin-right: auto;

    &:before,
    &:after {
        content: '';
        flex: 0 1 100%;
        border-bottom: $divider-border-width $divider-border-style $divider-border-color;
        margin: 0 $divider-padding;
        transform: translateY(#{$divider-border-width} / 2)
    }

    &:before {
        margin-left: 0;
    }

    &:after {
        margin-right: 0;
    }

    &[text-position="right"]:after,
    &[text-position="left"]:before {
        content: none;
    }
}

ซอนี่


สวัสดีฉันขอขอบคุณข้อมูลโค้ดของคุณ ถ้าฉันใส่ข้อความที่มีตัวแบ่งอื่นที่ไม่ใช่ภาษาอังกฤษ (ในกรณีของฉันคือเกาหลี) ข้อความจะแบ่งเป็นสองตัวอักษร คุณคิดว่าทำไม
cadenzah


0
<div class="divider-line-x"><span>Next section</span></div>
/***** Divider *****/

.divider-line-x {
    position: relative;
    text-align: center; 
    font-family: Arial; 
    font-weight: bold;
    font-size: 12px;    
    color: #333;
    border-bottom: 1px dashed #ccc;
}

.divider-line-x span {
    position: relative; 
    top: 10px;
    padding: 0 25px;    
    background: #fff;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.