Làm cách nào để loại bỏ phần tử bù đắp bằng CSS?


88

Tôi gặp sự cố định vị với một số yếu tố, khi kiểm tra công cụ IE8 Developer, tôi thấy điều này:

Sự bù đắp đến từ đâu?

Bây giờ tôi khá chắc chắn rằng vấn đề của tôi là bù đắp 12, nhưng làm cách nào để loại bỏ nó ? Tôi không thể tìm thấy bất kỳ đề cập nào về thuộc tính bù CSS. Chúng ta có cần một khoản chênh lệch ngoài ký quỹ không?

Đây là mã tạo ra điều này:

 <div id="wahoo" style="border: solid 1px black; height:100px;">

    <asp:TextBox ID="inputBox" runat="server" />

    <input id="btnDropDown" type="button" style="width:26px; height:26px; background-position: center center; border-left-color: buttonface; background-image: url(Images/WebResource.gif); border-bottom-color: buttonface; border-top-color: buttonface; background-repeat: no-repeat; border-right-color: buttonface;"  tabindex="99" />

    <div id="ListboxWrapper" style="display:none; position:absolute; onfocusout="this.style.display = 'none'"">
       <asp:ListBox ID="lstBoxCompany" runat="server" AutoPostBack="True" OnSelectedIndexChanged="lstBoxCompany_SelectedIndexChanged" style="z-index: 100;" Width="300px" />               
    </div>

</div>

Phần tử có phần bù là inputBox


Phần tử của bạn được định vị? Kiểm tra lefttopthuộc tính.
jessegavin

6
Một đoạn mã nhỏ sẽ rất hữu ích ở đây. Không có quy tắc 'bù đắp' trong CSS, nhưng IE có xu hướng thêm các pixel ngẫu nhiên vào những vị trí ngẫu nhiên. Nó thường làm với phao nổi và định vị
Alex

Tôi sẽ giả sử 'offset' là 'pixel liên quan đến các phần tử khác' - chẳng hạn như lề trên phần tử trước đẩy phần tử này xuống. Bây giờ tôi không có thời gian để thử nghiệm với các công cụ dành cho nhà phát triển IE để tìm hiểu.
Quentin

Tôi đã thêm hoàn chỉnh mã với inline CSS vì vậy chúng tôi có thể xem những gì đang diễn ra
m.edmondson

Có một ví dụ về trang web nào mà chúng ta có thể xem xét về điều này không - ví dụ như để chúng ta có thể trỏ firebug vào đó và hiểu trang rộng hơn. Ví dụ: kiểm soát đầu vào của bạn có kế thừa lề hoặc đệm từ một định nghĩa css khác không?
Kris C

Câu trả lời:


43

Độ lệch đó về cơ bản là vị trí x, y mà trình duyệt đã tính toán cho phần tử dựa trên thuộc tính css position của nó. Vì vậy, nếu bạn đặt một <br>trước nó hoặc bất kỳ phần tử nào khác, nó sẽ thay đổi phần bù. Ví dụ: bạn có thể đặt nó thành 0 bằng cách:

#inputBox{position:absolute;top:0px;left:0px;}

hoặc là

#inputBox{position:relative;top:-12px;left:-2px;}

Do đó, bất kỳ vấn đề định vị nào bạn gặp phải, không nhất thiết là vấn đề với độ lệch, mặc dù bạn luôn có thể khắc phục nó bằng cách chơi với các thuộc tính trên, trái, phải và dưới cùng.

Vấn đề của bạn là trình duyệt không tương thích?


2
Vui lòng xem nhận xét của Stony về căn chỉnh dọc. Việc sửa cài đặt căn chỉnh có vẻ thích hợp hơn là buộc phải ghi đè vị trí của phần tử trong trình duyệt.
Jeremy Condit

33

Đối với tôi, nó vertical-align: baselineso với vertical-align: topđiều đó đã gây ra sự bù đắp hàng đầu.

Cố gắng thiết lập vertical-align: top


2
Đây là tốt hơn so với sử dụng tuyệt đối vị trí
user1

2
Câu trả lời của bạn thật tuyệt vời, thực tế là tôi phải đặt căn chỉnh dọc khi tôi có 4 div khối nội tuyến từ chối căn chỉnh là tăng. Bạn đã kết thúc giờ làm việc. Cảm ơn bạn.
Corey Ogburn

Làm việc với một phần tử <button>được nhúng trong <li>.
Amessihel

9

Sửa nhanh:

position: relative;
top: -12px;
left: -2px;

điều này sẽ cân bằng những khoảng cách đó, nhưng có thể bạn nên xem xét toàn bộ bố cục của mình và xem cách hộp đó tương tác với các hộp khác.

Đối với thuật ngữ, left, right, topbottomlà CSS bù đắp tài sản. Chúng được sử dụng để định vị các phần tử tại một vị trí cụ thể (khi được sử dụng với absolutehoặc fixedđịnh vị) hoặc để di chuyển chúng liên quan đến vị trí mặc định của chúng (khi được sử dụng với relativeđịnh vị). Mặt khác, lề chỉ định khoảng trống giữa các hộp và đôi khi chúng bị sụp xuống, vì vậy chúng không thể được sử dụng một cách đáng tin cậy như các phần bù.

Nhưng lưu ý rằng trong trường hợp của bạn, phần đó có thể không được tính (chỉ) từ các phần bù CSS.


Điều đó chỉ di chuyển khoảng trắng sang phía bên kia của phần tử.
Quentin

@David Khoảng trắng nào? Và tại sao bất kỳ thứ gì khác ngoài hộp được nhắm mục tiêu sẽ được di chuyển?
Alin Purcaru

Khoảng trắng là không gian không có gì trong đó. Những thứ khác ngoài hộp được nhắm mục tiêu sẽ không được di chuyển, đó là điểm chính. Nếu bạn có thứ gì đó 1px bên dưới và bạn di chuyển lên 12px, thì nó là 13px bên dưới thay vì 1px.
Quentin

2
@David Chúng tôi có thể không có cùng định nghĩa về khoảng trắng, nhưng tôi hiểu bạn đang muốn nói gì. Tôi đồng ý rằng khoảng trống sẽ được chuyển sang phía bên kia. Tôi đã gắn nhãn giải pháp là "sửa chữa nhanh" vì nó có thể sử dụng được hoặc không. Đó là điều duy nhất tôi có thể đề xuất cho đến khi người hỏi cung cấp thêm chi tiết.
Alin Purcaru

3

Đặt thuộc tính trên cùng và bên trái thành giá trị âm có thể không phải là một giải pháp tốt nếu vấn đề của bạn chỉ đơn giản là bạn đang ở chế độ kỳ quặc. Điều này có thể xảy ra nếu trang thiếu phần <!DOCTYPE>khai báo, khiến trang được hiển thị ở chế độ quirks trong IE8. Trong Công cụ dành cho nhà phát triển IE8, hãy đảm bảo rằng "Chế độ Quirks" không được chọn trong "Chế độ Tài liệu". Nếu nó được chọn, bạn có thể cần thêm <!DOCTYPE>khai báo thích hợp .


2

Nếu bạn đang sử dụng các công cụ dành cho nhà phát triển IE, hãy đảm bảo rằng bạn không vô tình để chúng ở một cài đặt cũ hơn. Tôi đã tự làm mình phát điên với vấn đề tương tự này cho đến khi tôi thấy rằng nó được đặt thành Tiêu chuẩn Internet Explorer 7. Đã thay đổi nó thành Tiêu chuẩn Internet Explorer 9 và mọi thứ đã ổn định.


1
Một số người trong chúng tôi vẫn còn người dùng trên IE7.
15ee8f99-57ff-4f92-890c-b56153

2

chuyển phần tử lên trên cùng: -12px hoặc định vị nó hoàn toàn không giải quyết được vấn đề mà chỉ che dấu nó

Tôi đã gặp vấn đề tương tự - hãy kiểm tra xem bạn có trong một phần tử bao bọc bị trộn lẫn không: phần tử nổi với phần tử không nổi - phần tử không nổi của tôi đã gây ra sự chênh lệch kỳ lạ này cho phần tử nổi


Trong trường hợp của tôi, tôi đang cố gắng khớp giao diện của một trang web với giao diện của một nguyên mẫu. Tôi đã có một hàng div khối nội tuyến có cùng chiều rộng với nguyên mẫu, nhưng hiệu số của tôi đã giảm đi 4. Tôi phát hiện ra mình có sự kết hợp giữa div nổi và không nổi trên trang web. Làm cho tất cả chúng nổi loại bỏ phần bù thêm. Điều này đặc biệt khó hiểu vì tôi không thể thấy nhiều điểm khác biệt giữa CSS.
Clint Brown

1

xác định lề và phần đệm cho phần tử đang gặp vấn đề:

#element_id {margin: 0; padding: 0}  

và xem nếu vấn đề tồn tại. IE kết xuất trang với nhiều kế thừa không mong muốn hơn. bạn nên ngăn nó làm như vậy.


1

Điều này có vẻ lạ, nhưng bạn có thể thử thiết lập vertical-align: toptrong CSScho đầu vào. Điều đó khắc phục được nó trong IE8, ít nhất.


1

Tôi đã gặp vấn đề tương tự trên trang web dựa trên .NET của chúng tôi, chạy trên DotNetNuke (DNN) và điều đã giải quyết được vấn đề đó cho tôi về cơ bản là đặt lại lề đơn giản của thẻ biểu mẫu. Các trang web dựa trên .NET thường được bao bọc trong một biểu mẫu và nếu không đặt lại lề, bạn có thể thấy sự chênh lệch kỳ lạ đôi khi xuất hiện, chủ yếu là khi có một số tập lệnh bao gồm.

Vì vậy, nếu bạn đang cố gắng khắc phục sự cố này trên trang web của mình, hãy thử nhập thông tin này vào tệp CSS của bạn:

form {
  margin: 0;
}

Tôi đã gặp vấn đề tương tự và việc thay đổi lề biểu mẫu cũng có tác dụng với tôi.
David Derman,

0

Bạn có thể áp dụng css đặt lại để loại bỏ các 'mặc định' đó. Đây là một ví dụ về css đặt lại http://meyerweb.com/eric/tools/css/reset/ . Chỉ cần áp dụng các kiểu đặt lại TRƯỚC các kiểu của riêng bạn.


0

Tôi đã từng gặp vấn đề tương tự. Phần bù xuất hiện sau khi làm mới UpdatePanel. Giải pháp là thêm một thẻ trống trước UpdatePanel như sau:

<div></div>

...


1
UpdatePanel là một thứ ASP.NET, phải không? Bởi vì đây dường như không phải là một câu hỏi ASP.NET.
Joe Mabel

Trên thực tế, nếu bạn xem đoạn mã trong câu hỏi, bạn sẽ nhận thấy rằng đó là một câu hỏi ASP.NET.
mitkob

Ah. Xin lỗi, chỉ lướt qua, không để ý đến asp: TextBox. FWIW, vấn đề không phải là vấn đề ASP.NET . Khi vấn đề này xuất hiện, thông thường điều đó có nghĩa là phần bù được đề cập là do một số phần tử khác lớn hơn và nếu nó dẫn đến bố cục xấu, chìa khóa thường là giảm lề, phần đệm hoặc đường viền trên một số phần tử khác bên trong cùng một div cha.
Joe Mabel

0

Chỉ cần đặt đường viền không giống như thế này

[Định danh] {outline: none; }


0

Trong trường hợp của tôi, phần bù đắp đã được thêm vào một phần tử tùy chỉnh với bố cục lưới trong một li trong khi ul là một hộp uốn dọc.

nhập mô tả hình ảnh ở đây

Giải pháp khá đơn giản là đặt định nghĩa li là phần tử khối với

li {
 display: block;
}

Và phần bù đã biến mất

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.