Vì vậy, tôi có DIV #Wrapper
có chiều rộng cố định. Bên trong DIV đó, tôi có một DIV #Panel
mà cũng có chiều rộng cố định:Tại sao scrollWidth chỉ bao gồm phần đệm trái?
<div id="Wrapper">
<p>...</p>
<div id="Panel">Panel</div>
<p>...</p>
</div>
Đôi khi, chiều rộng của Panel là lớn hơn so với với các Wrapper, và trong những trường hợp tôi muốn mở rộng Wrapper thông qua JavaScript, để nó kết thúc tốt đẹp Bảng điều khiển.
Live Demo:http://jsfiddle.net/H6rML/
tôi dự định sử dụng .scrollWidth
trên Wrapper để xác định độ rộng của Panel. Tuy nhiên, vấn đề là Wrapper có đệm ngang, và .scrollWidth
vì một số lý do chỉ bao gồm phần đệm bên trái của trình bao bọc. Vì vậy:
Wrapper.scrollWidth === Wrapper.LeftPadding + Panel.Width
Vì vậy, đưa ra:
#Wrapper {
width: 200px;
padding: 10px;
}
#Panel {
width: 300px;
}
Wrapper.scrollWidth
lợi nhuận 310px
, mà không phải là rất hữu ích. Nếu .scrollWidth
không bao gồm bất kỳ phần đệm nào và chỉ trả lại chiều rộng của Bảng điều khiển, tôi có thể làm việc với điều đó (tôi sẽ thêm phần đệm theo cách thủ công vào giá trị đó). Nếu cả hai paddings được bao gồm, tôi có thể làm việc với điều đó quá. Nhưng tại sao chỉ có padding bên trái? (Btw hành vi này dường như là qua trình duyệt.)
Một vài lưu ý thêm:
tôi không thể thiết lập chiều rộng trên Wrapper trực tiếp. Trong mã thực tế của tôi, tôi đặt chiều rộng trên một phần tử tổ tiên là một số cấp trên Wrapper, và tôi sử dụng một API tùy chỉnh để thiết lập chiều rộng. Đây là lý do tại sao tôi cần lấy giá trịđầy đủ.
Tôi muốn một giải pháp không phụ thuộc vào nội dung của Trình bao bọc. Trong demo của tôi nó là một Panel, nhưng trong các kịch bản khác có thể có một yếu tố khác nhau mà tràn, hoặc thậm chí nhiều yếu tố. Đó là lý do tại sao tôi đã đi với
.scrollWidth
trên Wrapper.
Có cách nào để lấy giá trị 320px
mà không cần phải tự thêm các đệm đúng với giá trị .scrollWidth
?
Btw, theo tiêu chuẩn, các padding đúng nên được bao gồm:
Thuộc tính scrollWidth phải trả lại kết quả của việc chạy các bước sau:
Nếu phần tử không có bất kỳ hộp bố cục CSS được liên kết nào trả về số không và chấm dứt các bước này.
Nếu phần tử là phần tử gốc và Tài liệu không ở chế độ quirks trả về tối đa (chiều rộng nội dung tài liệu, giá trị của innerWidth).
Nếu phần tử là phần tử nội dung HTML và Tài liệu ở chế độ quirks trả về tối đa (chiều rộng nội dung tài liệu, giá trị của innerWidth).
Trả lại giá trị được tính của thuộc tính 'padding-left', cộng với giá trị được tính toán của 'padding-right', cộng với chiều rộng nội dung của phần tử.
Nguồn: http://www.w3.org/TR/cssom-view/
Tại sao không phải là trình duyệt cư xử cho phù hợp?
Để nâng cao hơn nữa rõ ràng của bài viết của tôi, hãy để tôi tổng hợp hai câu hỏi chính:
(1) Nếu các quốc gia tiêu chuẩn mà các padding đúng nên được tính vào giá trị .scrollWidth
, thì tại sao sao các trình duyệt không hoạt động?
(2) Có thể truy lục giá trị chính xác (320px
trong trường hợp của tôi) mà không phải thêm thủ công đệm đúng không?
Câu hỏi này đã được trả lời trong một chủ đề
Câu trả lời cho câu hỏi này nằm ở đây: When a child element overflows horizontally, why is the right padding of the parent ignored?
http://jsfiddle.net/ytByf/ –
@ RokoC.Buljan tôi không thể thiết lập chiều rộng trên Wrapper trực tiếp. Vui lòng đọc các bình luận bên dưới câu trả lời của Elliot. Tôi sẽ cập nhật câu hỏi của mình để làm rõ điều đó. –
Tại sao bạn cần phải tính toán lại chiều rộng '# Wrapper'? Sau khi '# Panel' được bọc hoàn toàn, tôi sẽ không bận tâm nhiều hơn nữa :) –