2015-05-22 22 views
7

Tôi gặp phải một vấn đề cụ thể mà dường như không được giải quyết ở bất kỳ đâu. Khi tôi có cả chiều rộng và chiều cao cố định trên div chứa, thì mọi văn bản bên trong div chỉ tràn theo chiều dọc, nhưng không theo chiều ngang.CSS - chiều rộng so với chiều cao - chiều rộng có mức độ ưu tiên

Ví dụ ở đây: http://jsfiddle.net/TgPRM/1382/

#container { 
    height:50px; 
    max-height:50px; 
    width:50px; 
} 

Bây giờ những gì thậm chí còn lạ chiều rộng có ưu tiên ngay cả khi tôi quấn văn bản bên trong một đoạn văn và thiết lập chiều cao cố định/max-height (nhưng không rộng!) trên đoạn đó. Văn bản chọn để không tôn trọng chiều cao được đặt trên phần tử gốc của nó và thay vào đó hãy tôn trọng độ rộng được đặt trên phần tử chính của nó.

Ví dụ ở đây: http://jsfiddle.net/TgPRM/1377/

Câu hỏi của tôi là, tại sao được đưa ra chiều rộng rất nhiều ưu tiên và những gì chúng ta có thể làm cho các văn bản tràn theo chiều ngang chứ không phải theo chiều dọc?

Chỉnh sửa: Tôi muốn giữ nguyên luồng : hiển thị để bất kỳ giải pháp nào dựa trên thuộc tính tràn không giải quyết được sự cố của tôi. Trắng-không gian: nowrap có vẻ là một giải pháp cực đoan, vì nó thậm chí không tôn trọng kích thước cửa sổ trình duyệt (thử một văn bản rất dài). Vì vậy, tôi chấp nhận giải pháp của Evan vì nó hoạt động chính xác như tôi mong đợi đã làm ví dụ của tôi để làm việc.

+1

Thay thế này để #container bạn {height: auto; max-height: auto;} – divy3993

+0

Bạn có muốn: (1) vùng chứa để kéo dài sao cho văn bản phù hợp với (2) ẩn văn bản nằm ngoài vùng chứa (3) người dùng có thể cuộn để tải xuống cho tất cả văn bản? – kaz

+0

bạn muốn văn bản bị tràn theo chiều ngang ngay cả với một widith cố định? – Evan

Trả lời

1

Điều này có đủ không?

http://jsfiddle.net/TgPRM/1385/

#wrapper{ 
 
    position:relative; 
 
    margin:0; 
 
    padding:0; 
 
} 
 

 
#container{ 
 
height:100px; 
 
max-height:100px; 
 
width:50px; 
 
background-color:red; 
 
} 
 

 
p { 
 
    background-color:green; 
 
    height:50px; 
 
    max-height:50px; 
 
    position:absolute; 
 
    padding:5px; 
 
}
<div id="wrapper"> 
 
    <div id="container"><p>hello this is a very long long long long paragraph</p></div></div>

+0

Vâng, hiện tại nó hoạt động chính xác như tôi mong đợi * nó hoạt động. Đó là: văn bản tràn đầu tiên theo chiều ngang và chỉ sau đó (nếu nó đến cuối trang) theo chiều dọc. Nhưng tại sao nó chỉ làm việc với vị trí đó? Có phải vì 'vị trí: tuyệt đối' tạo ra một bối cảnh định dạng khối mới? – smartly

+1

@smartly - không, đó là vì khối chứa của phần tử p, bởi vì nó là 'vị trí: tuyệt đối' là vị trí tổ tiên gần nhất, đó là div #wrapper. Bạn có thể thấy rằng nếu bạn đặt chiều rộng cho div đó, chiều rộng của phần tử p sẽ bị giới hạn ở độ rộng nhất định. – Alohci

+0

@Alohci Ồ tôi hiểu rồi. Ngoài ra, hãy thử đặt không chỉ chiều rộng, mà còn chiều cao cho div wrapper. Bây giờ chúng ta có hành vi đặc biệt giống như trong ví dụ ban đầu của tôi: văn bản chỉ tràn theo chiều dọc, nhưng không theo chiều ngang. – smartly

0

Điều này là do bạn chưa chỉ định cách bạn muốn trình duyệt xử lý tràn cho phần tử div để trình duyệt của bạn có thể chọn cho bạn. Để có được những gì tôi nghĩ rằng bạn muốn bạn sẽ cần một cái gì đó như thế này:

#container{ 
    height:50px; 
    max-height:50px; 
    width:50px; 
    background-color:red; 
    overflow-x: scroll; /* Scrolls horizontally */ 
    overflow-y: hidden; /* Doesn't scroll vertically */ 
    white-space: nowrap; /* Text doesn't automatically wrap due to width */ 
} 
3

Nó không phải là ưu tiên - nó đơn giản từ gói. Bạn có thể kiểm tra xem nó nếu word'll của bạn rất dài (http://jsfiddle.net/sergdenisov/y4wkmvcs/1/):

<div id="container"> 
    <p>hello_this_is_a_very_long_long_long_long_paragraph</p> 
</div> 

Bạn không thể phù hợp với bất kỳ nội dung trong container với cố định widthheight. Nếu bạn muốn, bạn không nên sử dụng cố định widthheight - có thể sử dụng min-width hoặc min-height.

Nếu bạn muốn chứa tràn nội dung chỉ theo chiều ngang, bạn có thể làm theo cách này (http://jsfiddle.net/sergdenisov/5079bkdr/):

p { 
    background-color:green; 
    height:50px; 
    max-height:50px; 
    display: inline-block; 
    white-space: nowrap; 
} 

Tất cả đều phụ thuộc vào vấn đề cụ thể của bạn.

+0

@smartly xem câu trả lời cập nhật của tôi. Bạn không cần 'position: absolute', bạn chỉ có thể sử dụng' display: inline-block' và 'white-space: nowrap'. –

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