Khối hiển thị không có 100% chiều rộng


95

Tôi muốn đặt một phần tử span xuất hiện bên dưới một phần tử khác bằng cách sử dụng thuộc tính hiển thị. Tôi đã thử áp dụng khối nội tuyến nhưng không thành công và nhận ra rằng tôi có thể sử dụng khối nếu bằng cách nào đó tôi tránh được việc cung cấp cho phần tử chiều rộng 100% (tôi không muốn phần tử "giãn ra"). Điều này có thể được thực hiện, hoặc nếu không, phương pháp tốt để giải quyết loại vấn đề này là gì?

Ví dụ: danh sách tin tức mà tôi muốn đặt liên kết "đọc thêm" ở cuối mỗi bài đăng (lưu ý: <a>thay vì <span>)

<li>
<span class="date">11/15/2012</span>
<span class="title">Lorem ipsum dolor</span>
<a class="read-more">Read more</a> 
</li>


Cập nhật: Đã giải quyết. Trong CSS, hãy áp dụng

li {
    clear: both;
}
li a {
    display: block;
    float: left;
    clear: both;
}

1
Bạn có bất kỳ đánh dấu nào (HTML hoặc CSS) để cho chúng tôi xem không? Thật khó để giải quyết vấn đề mà không có bất cứ điều gì để thực sự giải quyết. Ngoài ra, một bản demo trên jsfiddle sẽ rất tốt.
Tom Oakley

Tôi nghĩ rằng tôi không cần bất kỳ mã mẫu nào vì nó chỉ là định vị một phần tử span. Xem bài cập nhật.
Staffan Estberg

Bạn có thể cắt giảm nghiêm túc tất cả đánh dấu đó bằng cách chỉ sử dụng một dòng mã như tôi đã đề cập bên dưới.
ha404

Câu trả lời:


73

Nếu tôi hiểu đúng câu hỏi của bạn, CSS sau sẽ thả nổi một câu hỏi của bạn bên dưới các nhịp và giữ cho nó không có chiều rộng 100%:

a {
    display: block; 
    float: left; 
    clear: left; 
}

Tôi đã thử áp dụng điều này nhưng vì các phần tử span (tiêu đề và ngày, trong ví dụ) không có float nên liên kết được định vị trước nhịp cuối cùng. Đoán một giải pháp là làm cho tất cả các phần tử con trong li là float.
Staffan Estberg

Điều này hoạt động nếu tôi áp dụng một clearfix cho cha mẹ li. Sẽ đi với giải pháp này, cảm ơn PJ.
Staffan Estberg

157

Sử dụng display: table.

Câu trả lời này phải có ít nhất 30 ký tự; Tôi đã bước vào tuổi 20, vì vậy đây là một vài điểm khác.


13
Giải pháp thiên tài. margin: 0 auto;nếu bạn cần nó tập trung.
Mafia

4
Tôi nghĩ bạn thật tuyệt.
billynoah

1
display: table;hoạt động, nhưng không chấp nhận bất kỳ phần đệm nào.
donquixote

@ ha404 bạn nói đúng, padding hoạt động! jsfiddle.net/wgj7xvLe/4 ít nhất trong trình duyệt của tôi (Chromium).
donquixote

3
@donquixote nó sẽ chấp nhận padding miễn là bạn sử dụng border-sập: riêng biệt. chỉ có vấn đề đó.
Brad

30

bạn có thể dùng:

width: max-content;

Lưu ý: hỗ trợ bị giới hạn, hãy kiểm tra tại đây để biết bảng phân tích đầy đủ về các trình duyệt hỗ trợ


Tôi chưa bao giờ nghe nói về điều này! Hấp dẫn.
Ryan

Tốt kể từ Chrome 46 và FF 66. Nên chấp nhận câu trả lời. inline-blocket al đã phá vỡ bố cục của tôi.
i336_

1
@ i336_ Cho đến hôm nay, nó vẫn chưa được trình duyệt Edge hỗ trợ.
ChrisW

Edge hay Chromium Edge? (Nói rõ hơn; cái cũ sẽ được chuyển đổi trong một thời gian khá dài ...)
i336_

Theo caniuse.com, nó được hỗ trợ trong Edge kể từ khi Edge 79 phát hành ngày 14 tháng 1 năm 2020. Tổng cộng có 92% xếp hạng hỗ trợ. caniuse.com/?search=max-content Đây là một lời chào mừng đến với tôi. Khi tôi nghe về nó lần đầu tiên gần 2 năm trước, nó không có đủ hỗ trợ để tôi sử dụng trong sản xuất nhưng bây giờ thì có.
Xandor

7

Tôi sẽ giữ mỗi hàng thành div riêng của nó, vì vậy ...

<div class="row">
    <div class="cell">Content</div>
</div>
<div class="row">
    <div class="cell">Content</div>
</div>

Và sau đó đối với CSS:

.cell{display:inline-block}

Thật khó để cung cấp cho bạn một giải pháp mà không nhìn thấy mã gốc của bạn.


1
Cảm ơn, nhưng tôi không muốn trộn lẫn vào bất kỳ phần tử div nào.
Staffan Estberg

5

Một lần nữa: một câu trả lời có thể hơi muộn (nhưng dù sao thì đối với những người tìm thấy trang này sẽ có câu trả lời).

Thay vì display:block;sử dụngdisplay:inline-block;


2

Thử cái này:

li a {
    width: 0px;
    white-space:nowrap;
}

1

Tôi đã gặp sự cố này, tôi đã giải quyết nó như vậy:

.parent {
  white-space: nowrap;
  display: table;
}

.child {
  display: block;
}

"white-space: nowrap" đảm bảo rằng các phần tử con (nếu có) không chuyển sang dòng mới nếu không đủ dung lượng.

không có "khoảng trắng: nowrap":

nhập mô tả hình ảnh ở đây

với "white-space: nowrap":

nhập mô tả hình ảnh ở đây


chỉnh sửa: có vẻ như nó cũng chỉ hoạt động mà không có phần chặn con đối với tôi, vì vậy điều này có vẻ hoạt động tốt.

.parent {
  white-space: nowrap;
  display: table;
}

0

Bạn có thể sử dụng như sau:

display: inline-block;

Hoạt động tốt trên các liên kết và các yếu tố khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.