2013-09-22 38 views
6

Tôi đã cố gắng để có được một tiêu đề kép (gạch chân). Đầu tiên là chiều rộng đầy đủ, thứ hai chỉ là chiều rộng văn bản. Biên giới nên chồng chéo Có một giải pháp dễ dàng với hai yếu tố lồng nhau như thế:Đường viền đôi với chỉ một phần tử

<h1><span>Title</span></h1> 

và css:

h1 { 
    border-bottom: 1px solid red; 
} 

h1 span { 
    display: inline-block; 
    padding: 0 0 10px; 
    margin-bottom: -1px; 
    border-bottom: 1px solid blue; 
} 

Span có inline-block sở hữu màn hình để nó có chiều rộng đúng.

Tôi tự hỏi liệu có thể có được hiệu ứng tương tự với các bộ chọn :after, :before và chỉ h1 yếu tố.

Trả lời

3

Nó có thể được thực hiện. Tôi đã sử dụng vw đơn vị.

Hãy xem này Working Fiddle

HTML:

<h1 class="SpecialBorder">Title</h1> 

CSS:

* 
{ 
    margin: 0; 
    padding: 0; 
} 
.SpecialBorder 
{ 
    display: inline-block; 
    position: relative; 
} 
.SpecialBorder:before , .SpecialBorder:after 
{ 
    content:''; 
    position: absolute; 
    left: 0; 
    bottom: 0; 
} 
.SpecialBorder:before 
{ 
    width: 100vw; 
    border-bottom: 1px solid red; 
} 
.SpecialBorder:after 
{ 
    width: 100%; 
    border-bottom: 1px solid blue; 
} 

Giải thích: các before & after các phần tử giả là các phần tử vẽ đường viền. cả hai đều là các phần tử trống. với chiều rộng nhất định làm cho đường viền của chúng hiển thị.

chúng hoàn toàn nằm ở cuối phụ huynh <h1> của chúng.

before: chịu trách nhiệm về đường viền màu đỏ. vì vậy chiều rộng của nó được đặt thành '100%' của chế độ xem. after: chịu trách nhiệm về đường viền màu đỏ. nên hes chiều rộng được thiết lập để 100% của cha mẹ mình (các <h1>), đó là lý do tại sao h1 được thiết lập để 'display: inline-block;"(vì vậy nó sẽ kéo dài ony cũng giống như nội dung của mình)

vw đơn vị được hỗ trợ bởi new browsers only.

lưu ý rằng nếu bạn không thể sử dụng vw đơn vị, bạn vẫn có thể làm quen với điều đó. xóa display:inline-block; từ h1 (gây ra nó để span tất cả các cách trở lại) thay đổi độ rộng của before-100% (để làm cho nó trải rộng tất cả các cách), thay đổi với các after một số giá trị cố định của sự lựa chọn của bạn.

Chỉnh sửa: như thgaskell được nêu trong bình luận thứ,

có một lỗi nơi vw đơn vị không cập nhật đúng trên webkit trình duyệt khi cửa sổ được thay đổi kích cỡ.

Chỉnh sửa 2: để làm yếu tố để hiển thị sau khi tiêu đề, bạn có thể sử dụng một thẻ <br />, hoặc thanh toán bù trừ các kỹ thuật như cho thấy here.

+0

Một cách tiếp cận thú vị, nhưng bạn nên giải thích cách làm việc này và làm rõ các điều kiện mà nó hoạt động (trình duyệt bảo hiểm); “CSS3” chỉ là tên tập thể cho thông số kỹ thuật và bản nháp. –

+0

@ JukkaK.Korpela Đã chỉnh sửa câu trả lời của tôi với nhiều giải thích hơn. – avrahamcool

+1

Điều đáng nói đến là có lỗi trong đó các đơn vị 'vw' không cập nhật đúng trên trình duyệt webkit khi cửa sổ được thay đổi kích thước. – thgaskell

0

Tôi không chắc chắn nếu đó là những gì bạn muốn, nhưng bạn có thể làm những quy tắc:

h1 { 
    ... 
} 

/* here are the direct children of every h1 */ 
h1>* { 
    ... 
} 

::after::before selectors sẽ có ý nghĩa khi chèn nội dung mới (lưu ý các dấu hai chấm kép). Dưới đây là một số MDN trên ::after chọn và một số ví dụ:

https://developer.mozilla.org/en-US/docs/Web/CSS/::after

+4

Việc thêm quy tắc cho 'h1> *' không có hiệu lực nếu 'h1' không có con và câu hỏi là chỉ sử dụng một phần tử. –

+0

Nhưng tôi nghĩ đó là vấn đề? Nếu 'h1' không có con, bạn phải gạch dưới nội dung như thế nào? Bạn muốn nhấn mạnh điều gì? Đó là * nghĩa vụ * không có hiệu lực trong trường hợp đó. Và nó đang sử dụng một phần tử, trong một biểu định kiểu ** - nó chỉ sử dụng các phần tử 'h1'. Đó là những gì tôi nghĩ khi lần đầu tiên tôi đọc nó. Nếu tác giả có nghĩa là chỉ sử dụng một phần tử trong một tài liệu, anh ta có thể cụ thể hơn. – Tomalla