2015-11-09 12 views
13

Như đã đề cập trong tiêu đề, có thể tính toán vw mà không có thanh cuộn chỉ trong css không?Có thể tính chiều rộng khung nhìn (vw) không có thanh cuộn không?

Ví dụ: màn hình của tôi có chiều rộng là 1920px. vw trả lại 1920px, tuyệt vời. Nhưng chiều rộng cơ thể thực tế của tôi chỉ là một cái gì đó giống như 1903px.

Có cách nào để tôi lấy giá trị 1903px chỉ với css (không chỉ cho trẻ em trực tiếp của body), hay tôi hoàn toàn cần JavaScript cho điều này?

+1

nhưng ... thanh cuộn không được bao gồm trong chiều rộng khung nhìn !? – Danield

+0

@Danield, thường thì không. Khi nó được, nó thường là một trong đó biến mất khi không di chuyển, vì vậy câu hỏi là khá vô nghĩa. –

+0

@Danield xin lỗi, tôi cập nhật myquestion –

Trả lời

0

Theo the specs, đơn vị độ dài tương đối chế độ xem không lấy thanh cuộn vào tài khoản (và trên thực tế, giả sử rằng chúng không tồn tại).

Vì vậy, bất kể hành vi mong muốn của bạn là gì, bạn không thể xem xét thanh cuộn khi sử dụng các đơn vị này.

+0

xin lỗi, tôi đã cập nhật yêu cầu –

+0

Một lần nữa, 'vw', theo thông số kỹ thuật, không nhận thức được sự tồn tại của thanh cuộn. Vì vậy, bạn không thể đưa họ vào tài khoản. –

+0

Theo các thông số kỹ thuật, vw không lấy chiều rộng thanh cuộn đi UNLESS tràn là tự động, sau đó nó hoạt động như "ẩn" cho giá trị vw. Vì vậy, nếu trang phải tràn, hãy đặt trang đó thành "cuộn". Với overflow-x & overflow-y bạn chọn thanh cuộn nào để hiển thị. – Kulvar

0

Trình duyệt webkit loại trừ các thanh cuộn, bao gồm các thanh cuộn khác trong chiều rộng được trả lại. Điều này tất nhiên có thể dẫn đến các vấn đề: ví dụ nếu bạn có nội dung được tạo theo thực tế với ajax thêm chiều cao một cách tối ưu, Safari có thể chuyển từ bố cục này sang bố cục khác trong khi hiển thị trang ... Ok, nó không xảy ra thường xuyên, nhưng một cái gì đó để được nhận thức về. Trên thiết bị di động, ít sự cố hơn, khiến thanh cuộn thường không được hiển thị.

Đó là nói, nếu vấn đề của bạn là tính toán exacly chiều rộng khung nhìn mà không thanh cuộn trong tất cả các trình duyệt, như xa như tôi biết, một phương pháp tốt là thế này:

width = $('body').innerWidth(); 

khi trước đây thiết lập:

body { 
    margin:0; 
    } 
25

Một cách để làm điều này là với calc. Theo tôi biết, 100% là chiều rộng bao gồm cả thanh cuộn. Vì vậy, nếu bạn làm:

body { 
    width: calc(100vw - (100vw - 100%)); 
} 

Bạn nhận được 100vw trừ đi chiều rộng của thanh cuộn.

Bạn có thể làm điều này với chiều cao là tốt, nếu bạn muốn có một hình vuông đó là 50% của khung nhìn ví dụ (trừ 50% chiều rộng scollbar)

.box { 
    width: calc(50vw - ((100vw - 100%)/2)) 
    height: 0 
    padding-bottom: calc(50vw - ((100vw - 100%)/2)) 
} 
+0

Vì một lý do nào đó, mặc dù có nhiều câu trả lời cho loại câu hỏi này ở nơi khác, đó là câu trả lời phù hợp nhất với tôi - nó rất hoàn hảo và nhanh chóng, tôi đang chờ đợi một phần lớn "gotcha"! – Daniel

+0

Điều này làm việc hoàn hảo cho tôi. Cảm ơn! – Husky

+4

Điều này thật tuyệt vời, nhưng tiếc là chỉ hoạt động nếu phần tử bạn định kích thước là con trực tiếp của 'body', hoặc một phần tử có cùng chiều rộng với' body' (nếu không '100%' sẽ chỉ chiều rộng của phần tử sai) . Trong trường hợp đó bạn chỉ có thể sử dụng tỷ lệ phần trăm. Trừ khi tôi đang thiếu một cái gì đó? – Nateowami

0

Đơn vị vw không lấy overflow-y thanh cuộn vào tài khoản khi overflow-y được đặt thành auto.

Thay đổi thành overflow-y: scroll; và đơn vị vw sẽ là chế độ xem không có thanh cuộn.

Nhược điểm duy nhất để tính đến. Nếu nội dung vừa với màn hình, thanh cuộn sẽ được hiển thị. Giải pháp có thể thay đổi từ auto thành scroll trong javascript.

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