2015-04-10 16 views
13

Tôi đang cố gắng xây dựng một trang web có nhiều hộp có chiều rộng và chiều cao bằng nhau. Ví dụ: tôi có một trang có 2 hộp kích thước bằng nhau cạnh nhau.Tại sao vw lại bao gồm thanh cuộn như một phần của khung nhìn?

Giải pháp đơn giản là đặt chiều rộng và chiều cao thành 50vw. Điều này làm việc tuyệt vời cho đến khi có một thanh cuộn. Tôi đã Googled xung quanh trong nhiều giờ và không thể hiểu tại sao trên trái đất vw và vh sẽ bao gồm các thanh cuộn như một phần của khung nhìn.

Dưới đây là một ví dụ về vấn đề của tôi

HTML

<div class="container"> 
    <div class="box red"></div> 
    <div class="box green"></div> 
</div> 
<div class="lotta-content"></div> 

CSS

body { 
    margin: 0; 
    padding: 0; 
} 

.container { 
    width: 100vw; 
} 

.box { 
    float: left; 
    width: 50vw; 
    height: 50vw; 
} 

.red { 
    background-color: red; 
} 

.green { 
    background-color: green; 
} 

.lotta-content { 
    height: 10000px; 
} 

Thông báo thanh cuộn ngang không mong muốn

https://jsfiddle.net/3z887swo/

Một giải pháp có thể là sử dụng tỷ lệ phần trăm cho chiều rộng, nhưng vw cho chiều cao, nhưng nó sẽ không bao giờ là một hộp hoàn hảo mà không phải là điều tồi tệ nhất trên thế giới, nhưng vẫn không lý tưởng. Đây là một mẫu

https://jsfiddle.net/3z887swo/1/

Có ai biết tại sao vw/vh bao gồm thanh cuộn như một phần của khung nhìn? Ngoài ra, nếu ai đó có một giải pháp tốt hơn của riêng tôi, tôi rất muốn nghe nó. Tôi đang tìm một giải pháp CSS tinh khiết. Tôi không có javascript.

+0

làm bạn có \t bao gồm trong đầu? – Dachi

+0

@Dachi Điều đó sẽ không tạo ra sự khác biệt. –

+0

http://www.w3.org/TR/css3-values/#viewport-relative-lengths nói: "Khi giá trị 'tràn' trên phần tử gốc là 'tự động', bất kỳ thanh cuộn nào được giả định là không tồn tại . " 'overflow: auto' là giá trị mặc định trên phần tử gốc. Tôi nghĩ rằng quyết định được đưa ra để giải quyết vấn đề sau, vòng lặp vô hạn: "chu kỳ phụ thuộc" của "sự hiện diện hoặc vắng mặt của thanh cuộn tùy thuộc vào giá trị của các đơn vị viewport" – mems

Trả lời

7

Sẽ thuận tiện nếu đơn vị khung nhìn không bao gồm thanh cuộn nhưng sau cùng là kích thước màn hình (màn hình). Đã nhìn vào giải pháp này với một yếu tố giả mặc dù:

http://www.mademyday.de/css-height-equals-width-with-pure-css.html

Làm cho một hình vuông trong ví dụ của bạn cũng như:

https://jsfiddle.net/3z887swo/4/

.box { 
    float: left; 
    width: 50%; 
} 

.box::before { 
    content: ""; 
    display: block; 
    padding-top: 100%; 
} 

Edit - nếu có ai là tự hỏi tại sao điều này công trình (đệm dọc đáp ứng chiều rộng của phần tử gốc) ... về cơ bản nó được định nghĩa như thế nào trong đặc điểm kỹ thuật:

Tỷ lệ phần trăm được tính theo chiều rộng của khối chứa ô đã tạo, ngay cả đối với 'padding-top' và 'padding-bottom'.

http://www.w3.org/TR/CSS2/box.html#padding-properties

+0

Fantastic sir. Đó là một mẹo nhỏ gọn gàng. – Kevin

+2

Chúc mừng, tôi cũng nghĩ như vậy. Ước gì tôi có thể nhận được tín dụng vì đã quá thông minh để tự mình nghĩ ra. :-) – Shikkediel

21

Tôi có một câu trả lời khác nhau, và cảm thấy cần phải chia sẻ sự thất vọng của tôi

VÌ TIÊU CHUẨN định ngu ngốc

(ủy ban, nói chung, luôn có những)

Một giải pháp đơn giản là giữ thanh cuộn luôn quanh và được xử lý với nó

html,body {margin:0;padding:0} 
html{overflow-y:scroll} 

(sử dụng overflow-x cho một bố trí sử dụng vh)

Tôi tin rằng họ nghiêm túc screwed chú chó trên thế này.

+7

Thật không may, làm cho thanh cuộn luôn ở đó vẫn không khắc phục được sự cố. 100vw cho dù thanh cuộn có thể nhìn thấy hay không không thay đổi giá trị kết thúc thực tế là 100vw. Mỗi trình duyệt cũng xử lý các thanh cuộn khác nhau. Safari và các trình duyệt Mac OS X khác che phủ chúng, Edge và tôi tin rằng các trình duyệt IE gần đây cũng phủ lên chúng. Trong khi một số thực sự sẽ chiếm không gian trong khung nhìn và di chuyển nội dung của bạn xung quanh. Nhưng cảm ơn đề nghị và tôi chia sẻ sự thất vọng của bạn – Kevin

+2

Họ nên làm một vw2 mà là với các thanh cuộn exluced ahhha! – Miguel

+1

+1 cho sự thất vọng. Chỉ cần phát hiện ra điều này quá và nó hoàn toàn phá vỡ bố cục của tôi khi có một thanh cuộn. May mắn thay, cách bố trí của tôi là như vậy mà tôi có thể thay thế 'calc (100vw - 50px)' bằng 'calc (100% - 50px)', nhưng không may bằng cách sử dụng tỷ lệ phần trăm là một giải pháp rất một phần so với tảng đá vững chắc 'vw' đơn vị - không quá vững chắc nữa ... :-(Tuy nhiên, trên một lưu ý thực tế hơn, có lẽ điều đúng đắn sẽ là gửi báo cáo PR hoặc lỗi hay gì đó? –

0
html { overflow-x: hidden; } 

dường như làm việc

+1

Bất kỳ ý tưởng nào tại sao? Điều gì về câu hỏi thực tế (liên quan đến 'vw')? – dakab

+0

Điều này không khắc phục được vấn đề, nó chỉ đơn giản là ẩn thanh cuộn ngang. Nội dung của bạn sẽ vẫn rộng hơn 100% của chế độ xem. – TheThirdMan

+0

I sử dụng điều này trên phần tử container của tôi.Với mục đích của tôi, giải pháp này là câu trả lời tốt nhất. – Ange

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