2009-02-04 42 views
16

Tôi muốn đảm bảo rằng không bao giờ có ngắt dòng giữa nút radio và bắt đầu nhãn liền kề. Tuy nhiên, tôi muốn văn bản trong phạm vi nhãn được phép quấn. Điều này có thể không? Bạn có thể thấy các lần thử không thành công của tôi bằng cách hiển thị HTML sau đây:Làm cách nào để ngăn chặn ngắt dòng giữa nút radio và nhãn của nó, trong khi vẫn cho phép ngắt dòng trong chính nhãn đó?

<html> 
<head> 
    <style type="text/css"> 
.box { 
    border: solid gray 2px; 
    width: 200px; 
    margin: 5px; 
} 
.chopped { 
    overflow: hidden; 
} 
    </style> 
</head> 
<body> 

Các hộp cần phải có chiều rộng cố định, vì vậy nội dung dài cần được gói, như được thấy trong hộp đầu tiên bên dưới. Và nếu ai đó cố gắng gửi một chuỗi ridiculously dài mà không có bất kỳ dấu cách, chúng ta cần nó để được rút ngắn, chứ không phải là mở rộng ra ngoài rìa của hộp - vấn đề là hiển thị trong hộp thứ hai:

<div class="box"> 
    <input type="radio"/> 
    <label>This is a really long string with no spaces</label> 
</div> 

<div class="box"> 
    <input type="radio"/> 
    <label>This_is_a_really_long_string_with_no_spaces</label> 
</div> 

<hr/> 

Vì vậy, tôi thêm "overflow: hidden", và điều này là hơi tốt hơn, nhưng tôi vẫn không thích cách hộp thứ hai có một ngắt dòng giữa nút radio và nhãn của nó:

<div class="chopped box"> 
    <input type="radio"/> 
    <label>This is a really long string with no spaces</label> 
</div> 

<div class="chopped box"> 
    <input type="radio"/> 
    <label>This_is_a_really_long_string_with_no_spaces</label> 
</div> 

<hr/> 

Nếu tôi thêm <nobr>, các nút radio nằm bên cạnh các nhãn của chúng và vì vậy chuỗi chưa được định vị giờ đây trông hoàn hảo. Tuy nhiên, điều này vi phạm chuỗi đầu tiên (chuỗi có dấu cách), vì nó không còn kết thúc tốt đẹp:

<div class="chopped box"> 
    <nobr> 
    <input type="radio"/> 
    <label>This is a really long string with no spaces</label> 
    </nobr> 
</div> 
<div class="chopped box"> 
    <nobr> 
    <input type="radio"/> 
    <label>This_is_a_really_long_string_with_no_spaces</label> 
    </nobr> 
</div> 

</body> 
</html> 

Trả lời

39

Trước tiên, di chuyển các nút radio bên trong nhãn của bạn. Điều này cho biết thêm tính năng tốt đẹp mà bạn có thể chọn các nút radio bằng cách nhấp vào văn bản. Sau đó, thêm một khoảng xung quanh văn bản.

<div class="chopped box"> 
<label> 
    <input type="radio"/> 
    <span class="wrappable">This is a really long string with no spaces</span> 
</label> 
</div> 

<div class="chopped box"> 
<label> 
    <input type="radio"/> 
    <span class="wrappable">This_is_a_really_long_string_with_no_spaces</span> 
</label> 
</div> 

Thứ hai, thêm phong cách sau đây để css của bạn:

label { 
    white-space:nowrap; 
} 

.wrappable { 
    white-space:normal; 
} 

Các trắng-không gian phong cách trên nhãn ngăn ngừa sự linebreak giữa nút radio và các văn bản, và nhịp xung quanh văn bản cho phép nó để bọc ngay trong văn bản.

+0

Điều này cũng có thể được biến đổi bên trong ra ngoài: sử dụng div.radioinput nơi nhãn là, và sử dụng nhãn thay cho span.wrappable. –

+0

Ồ, chắc chắn, và điều đó có thể làm cho ý nghĩa ngữ nghĩa hơn về nhãn là bao bọc xung quanh văn bản, nhưng sau đó bạn mất mát "bấm vào nhãn văn bản để chọn tính năng radiobutton" (bạn có thể lấy lại tính năng đó cho nút radio một id và sử dụng "for" trong nhãn). –

+3

Bạn có thể có tính năng chọn nút radion bằng cách nhấp vào nhãn dễ dàng hơn bằng cách xác định nhãn * cho * id, ví dụ nhãn cho = "ID_of_radio_button" – 0x4a6f4672

2

bạn đã thử không gian trắng: nowrap; bên trong định nghĩa .chopped của bạn?

+0

Đưa không gian trắng: nowrap trên toàn bộ div sẽ gây ra chuỗi dài thực sự có khoảng trống trong đó để dừng gói. –

1

Nếu bạn không nhớ đánh dấu ít gọn gàng hơn, bạn có thể nhận được những gì bạn muốn bằng cách loại bỏ khoảng trắng giữa văn bản <input><label>.

<div class="chopped box"> 
    <label><input type="radio"/>This is a really long string with no spaces</label> 
</div> 

<div class="chopped box"> 
    <label><input type="radio"/>This_is_a_really_long_string_with_no_spaces</label> 
</div> 

(<label> s đặt xung quanh <input> s mỗi gợi ý JacobM của.)

Nếu bạn muốn có một chút phòng giữa <input> và ký tự đầu tiên của nhãn, sử dụng một không gian không bị phá hủy (&nbsp;) thực thể.

0

Giải pháp được cung cấp bởi JacobM là dành cho trường hợp đặc biệt này là giải pháp tốt nhất. Nhưng vấn đề này vượt xa chỉ là một số nút radio với nhãn của họ. Giải pháp của tôi nói chung:

In line text blabla <span style="white-space: normal;"><element /></span> blabla 

Do đó như một giải pháp cho trường hợp cụ thể này, kết quả sẽ là:

<label> 
    <span style="white-space: normal;"> 
     <input type="radio" /> 
    </span> 
    This_is_a_really_long_string_with_no_spaces 
</label> 

PS: tình hình của tôi là một inline <input /> phần tử trong gói văn bản. Vấn đề là nó sẽ phá vỡ dòng sau phần tử thay vì văn bản ở cuối dòng.Thật khó để tìm kiếm vấn đề này bằng cách sử dụng một searchengine, tôi hy vọng điều này sẽ giúp người khác ra ngoài.

Các vấn đề liên quan