2012-06-22 35 views
13

Tôi muốn có một phần tử tiêu đề với overflow-x:hiddenoverflow-y:visible. Tuy nhiên, vì lý do nào đó, thuộc tính overflow-y dường như không được tuân theo. Bạn có thể quan sát này đây (thử nghiệm trên Chrome và Firefox): http://jsfiddle.net/YgsAw/3/Tại sao tràn-x: clip ẩn hậu duệ của tôi?

Trong bản demo đó, tôi mong đợi để xem "jjjjj", nhưng thay vào đó là j của bị cắt đứt và trông giống như 1.

Nếu tôi đặt overflow-x:visible trên thẻ h1 thì đột nhiên chiều cao đầy đủ của văn bản hiển thị, nhưng thiết lập overflow-x:hidden sẽ bị cắt bớt. Tôi mong đợi hành vi này từ overflow-y, nhưng điều đó dường như không có hiệu lực. Tại sao điều này, và tôi có thể làm gì với nó?

+1

Cách giải quyết của tôi là thêm một chút đệm thừa vào cuối vùng chứa. – Qaz

+1

@ Qaz loại sửa chữa đó hoạt động --- và thực tế đây là những thứ mà tất cả chúng ta đều làm để hoàn thành công việc --- nhưng nó kích thích sâu sắc sự nhạy cảm của tôi. Làm thế nào nhiều đệm, chính xác, tôi cần phải được * chắc chắn * tất cả mọi thứ sẽ được hiển thị trên mọi nền tảng? Padding đó có ảnh hưởng đến bố cục của tôi và làm cho nó xấu hơn không? Có sự cân bằng để xem xét. Cuối cùng tôi đã chọn cho phép hack được đề xuất ở cuối câu trả lời được chấp nhận, bổ sung thêm các nút HTML bổ sung nhưng vẫn giữ quyền kiểm soát chính xác chiều cao phần tử và đảm bảo luồng tràn dọc sẽ luôn hiển thị. – Calvin

Trả lời

6

Tôi đã tìm thấy một số câu trả lời trong một previous question. Theo the specs:

Các giá trị tính toán của overflow-xoverflow-y đều giống nhau như các giá trị quy định của họ, ngoại trừ một số kết hợp với visible là không thể: nếu một được quy định như visible và thứ hai là scroll hoặc auto, sau đó visible được đặt thành auto. Giá trị tính toán của overflow bằng giá trị tính toán của overflow-x nếu overflow-y giống nhau; nếu không thì đó là cặp giá trị được tính toán của overflow-xoverflow-y.

Bên cạnh đó, trên this page tác giả đề cập rằng nhiều trình duyệt áp đặt hạn chế bổ sung:

Trong Gecko, Safari, Opera, 'nhìn thấy' trở thành 'auto' cũng là khi kết hợp với 'ẩn' (trong khác từ: 'visible' trở thành 'auto' khi kết hợp với bất kỳ thứ gì khác với 'visible').

Cùng một trang cũng cung cấp bản trình diễn cho tất cả các kết hợp có thể có hiệu lực này.

Tôi không biết cách giải quyết khả thi cho tình huống của mình.

EDIT

Tôi chắc rằng tôi có thể làm những gì tôi muốn bằng cách làm tổ thẻ tiêu đề của tôi trong một thẻ khác: <div><h1>title</h1></div>. Bên trong h1line-height:normal để hiển thị mọi thứ theo chiều dọc, cũng như overflow:hidden để làm cho nó cắt ngắn. Phần tử bên ngoài có thể có chiều cao giới hạn nghiêm ngặt và overflow:visible. Nó không phải là lý tưởng, nhưng nó có vẻ như là lựa chọn tốt nhất.

+0

Thông số kỹ thuật là tất cả những gì tôi có thể tìm thấy nhưng nó không liên quan đến câu hỏi của bạn - mặt khác tôi không biết về bất kỳ hành vi cụ thể nào của UA, và điều đó dường như đánh trúng ngay trên đầu. Thật vậy, dường như không có bất kỳ giải pháp khả thi nào cho tình huống của bạn. Tuy nhiên, điều thú vị là bạn có thể tập trung vào 'h1' và cuộn nó để xem hậu duệ :) (' tràn 'khác với' hiển thị' không ngăn điều gì đó di chuyển; nó chỉ gây ra hiện tượng cắt hình ảnh) – BoltClock

2

Có vẻ như thay đổi các yếu tố H1 thành một phần tử nội tuyến sẽ giúp bạn có được kết quả mong muốn:

h1 { 
    margin: 10px; 
    padding: 0;   
    overflow-x: hidden; 
    overflow-y: visible; 
    line-height: 0.5em; 
    display:inline; 
} 

Chỉ cần chắc chắn rằng các yếu tố sau đây là một yếu tố khối để nó không bắt đầu trong cùng một dòng. Điều đó hoặc sử dụng chiều cao dòng chính xác và sau đó sử dụng lề âm. Sau khi tất cả, tôi chỉ có thể đoán những gì bạn đang cố gắng để làm ... Chúc may mắn!

+1

Tôi nghĩ rằng điều này là bởi vì các yếu tố nội tuyến không tuân theo bất động sản tràn ở tất cả. Nó không có ý nghĩa đối với họ. Thật không may điều này sẽ không hiệu quả đối với tôi. Mục đích là sử dụng 'không gian trắng: nowrap' và' text-overflow: ellipsis' để làm cho tiêu đề tự cắt ngắn nếu nó quá dài. Tôi không nghĩ rằng tôi có thể làm cho điều này để làm việc đúng cho một yếu tố nội tuyến. – Calvin

+0

@Calvin: Vâng, đó là chính xác. Tôi chỉ xem xét các spec, mà nói [nó chỉ áp dụng cho khối container] (http://www.w3.org/TR/css3-box/#overflow) (điều này bao gồm các khối nội tuyến). – BoltClock

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