2012-09-20 6 views
8

Tôi cần phải tạo dòng tiêu đề với các dòng có độ dài bằng nhau trên cả hai mặt của văn bản dòng tiêu đề và kích thước cố định giữa các dòng và văn bản. Văn bản sẽ thay đổi do đó không được đặt chiều rộng. Các dòng nên chiếm toàn bộ chiều rộng còn lại có sẵn trong vùng chứa dòng tiêu đề. Văn bản dòng tiêu đề không được đặt nền vì nền phía sau sẽ thay đổi. Một cái gì đó như thế này:Văn bản được căn giữa với dòng giống như giờ trên cả hai mặt, mà không cần sử dụng bảng

------------------------------------------ --------------- Một số tiếp theo --------------------------------- ------------------------

tôi giải quyết nó bằng cách sử dụng bảng:

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

Bạn có thể thử nó ra ở đây: http://jsfiddle.net/md2dF/3/

Ngữ nghĩa đây là giải pháp thực sự tồi, tiêu đề không liên quan gì đến dữ liệu dạng bảng. Làm thế nào bạn sẽ làm điều này mà không có một bảng?

Để tóm tắt (vì các giải pháp đề nghị đều bị bỏ qua một hoặc nhiều yêu cầu):

  • Tiêu đề không phải có chiều rộng cố định
  • Văn bản tiêu đề không phải có một nền tảng
  • Tiêu đề văn bản không được có chiều rộng cố định
  • Các dòng ở hai bên của văn bản phải chiếm tất cả chiều rộng còn lại
  • Đệm giữa các dòng và văn bản phải được cố định chiều rộng
  • Nếu nghi ngờ, hãy nhìn vào http://jsfiddle.net/md2dF/3/

Trả lời

21

Newer answer that works on newer versions of IE and Firefox

Nếu không có bất kỳ thủ đoạn:

fieldset.title { 
 
    border-top: 1px solid #aaa; 
 
    border-bottom: none; 
 
    border-left: none; 
 
    border-right: none; 
 
    display: block; 
 
    text-align: center; 
 
} 
 

 
fieldset.title legend { 
 
    padding: 5px 10px; 
 
}
<fieldset class="title"> 
 
    <legend>Some text</legend> 
 
</fieldset>

Live demo on jsfiddle

+1

Đã thêm 'fieldset {padding: 0}' và nó hoạt động tốt. Giải pháp khá sạch; làm sạch tất cả các SO khác: http://stackoverflow.com/questions/2812770/add-centered-text-to-the-middle-of-a-hr-like-line http://stackoverflow.com/questions/5214127/css-kỹ thuật-cho-một-ngang-dòng-với-từ-trong-the-trung http://stackoverflow.com/questions/10430557/how-to-add-some-text-to-a- hr-tag Phần tốt nhất về phương pháp này là không cần khai báo 'background/-color'. Cũng không cần định vị tuyệt đối, và tận dụng lợi thế của phần tử 'fieldset' sạch đã có tính năng được yêu cầu. Tốt đẹp! – LazerSharks

+0

Đây thực sự là một giải pháp tuyệt vời so với việc ẩn các đường có màu nền (không hoạt động cho hình ảnh). Cảm ơn! – Jason

+2

-1 Tôi đã thử trên Mac OS X 10.10.2 bằng cách sử dụng Safari 8.0.3 (công trình), Chrome 40.0.2214.115 (hoạt động) và Firefox 36.0 (không hoạt động). Tôi cũng đã thử tính năng này trên Windows 8.1 bằng Internet Explorer 11 (không hoạt động), Chrome 40.0.2214.115 (hoạt động) và Firefox 36.0 (không hoạt động). Một giải pháp không hoạt động trong Firefox hoặc Internet Explorer 11 không phải là một giải pháp tuyệt vời, theo ý kiến ​​của tôi. – Nick

0

Bạn có thể làm điều đó như vậy (đối với nền, bạn có thể tạo ra một hình ảnh 1px của sự lựa chọn màu sắc của bạn):

<h1><span>Some Text</span></h1> 

h1 { width: 100%; text-align: center; background: url(pixel.jpg) repeat-x left center; } 
h1 span { padding: 0 3px; background-color: #ffffff; } 

Edit: Không bg color:

.hr { width: 100%; height: 40px; line-height: 40px; } 
.hr span { width: 10%; text-align: center; float: left; margin: 0; display: inline-block; } 
.hr .line { width: 45%; height: 100%; background: url(pixel.jpg) repeat-x left center; float: left; } 
.hr .line.right { float: right;} 

<div class="hr"> 
<div class="line left"></div> 
<span>Some Text</span> 
<div class="line right"></div> 
</div> 

Bạn sẽ cần phải điều chỉnh phần trăm và không có gì, nhưng nó hoạt động nói chung.

+0

Như tôi đã nêu trong câu hỏi, các văn bản phải không có một màu nền. –

+0

Đã thêm giải pháp thứ hai cho bạn, hãy chụp ảnh đó? :) –

+0

Nó không hoạt động: http://jsfiddle.net/kajic/d5znr/ –

6

Edit:

Nếu không có bất kỳ màu nền hay hình ảnh:

<div> 
    <div><hr></div> 
    <span>Some text</span> 
    <div><hr></div> 
</div>​ 

CSS:

div { 
    width:300px; 
    text-align:center; 
    display:table; 
} 
div > div { 
    display:table-cell; 
    vertical-align:middle; 
} 
div > span { 
    white-space:nowrap; 
}​ 

trình trong IE8 +

Live demo


Original câu trả lời:

Nếu không có bất kỳ hình ảnh:

<div> 
<span>Some text</span> 
</div>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

CSS:

​div { 
    border-bottom:1px solid #000; 
    line-height:16px; 
    text-align:center; 
} 
span { 
    background:#FFF; 
    position:relative; 
    bottom:-8px; /* half of line-height */ 
    padding:0 15px; 
} 

Live demo

Bạn có thể sử dụng bất kỳ khối yếu tố bạn muốn (h1, h2, whatever) thay vì div.

+0

Như tôi đã nêu trong câu hỏi, văn bản không được có màu nền. –

+0

Xin lỗi, tôi đã bỏ lỡ phần đó. Tôi sẽ sửa câu trả lời của mình – Giona

+0

Câu trả lời mới cũng không chính xác. Các dòng phải chiếm toàn bộ chiều rộng còn lại. Của bạn không. –

6

Cách giải quyết này mà không biết chiều rộng và màu nền như sau:

Cấu trúc

<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%; 
} 

.strike > span:after { 
    left: 100%; 
} 

Ví dụ: http://jsfiddle.net/z8Hnz/

+0

Giải pháp tuyệt vời. Thay vì 'background: red', nếu bạn sử dụng' border: 1px solid red' hoặc 'border-top: 1px solid red', dòng này cũng sẽ hiển thị ở đầu ra được in. – Jasen

+0

nó hoạt động cho tôi ngay cả ngày hôm nay. –