vị trí: tương đối để lại một không gian trống


86

Mã ở đây: http://lasers.org.ru/vs/example.html

Làm thế nào để loại bỏ một không gian trống trong khối chính (#page)?


Ý bạn là phần đệm dưới cùng, hay để toàn bộ mọi thứ được căn giữa theo chiều dọc?
alex

Ý của bạn là khoảng cách giữa văn bản trong div #page và đường viền? Nếu không, tôi không chắc bạn đang nói về không gian nào.
Trận chiến Jeremy

@Jeremy Battle Tôi cũng không thể tìm ra, mặc dù Guffa dường như có .
alex

Còn ai khác không thấy vấn đề này không?
Myles Grey

Vui lòng tham khảo Câu trả lời được đánh dấu tại [ stackoverflow.com/questions/13722095/… [1]: stackoverflow.com/questions/13722095/…
Sohel Pathan,

Câu trả lời:


34

Vậy thì, đừng sử dụng định vị tương đối. Phần tử vẫn chiếm dung lượng ở vị trí ban đầu khi sử dụng định vị tương đối và bạn không thể loại bỏ điều đó. Ví dụ, bạn có thể sử dụng định vị tuyệt đối để thay thế hoặc làm cho các phần tử nổi bên cạnh nhau.

Tôi đã thử với bố cục một chút và tôi khuyên bạn nên thay đổi ba quy tắc sau thành:

#layout { width: 636px; margin: 0 auto; }
#menu { position: absolute; width: 160px; margin-left: 160px; }
#page { width: 600px; padding: 8px 16px; border: 2px solid #404241; }

27
"và bạn không thể thoát khỏi điều đó." - bạn có thể. Chỉ cần sử dụng lợi nhuận âm, giống như trong câu trả lời của plang.
Michał K

5
@ MichałK: Không, điều đó chỉ có nghĩa là bạn chồng lên không gian trống với một phần tử khác, không phải là bạn loại bỏ không gian trống. Bạn chỉ có thể sử dụng lề âm để chồng lên không gian trống từ vị trí tương đối với kích thước của phần tử.
Guffa

@ MichałK: Từ ​​chối câu trả lời này và các câu trả lời hoàn toàn không liên quan khác không giúp ích được gì, bạn vẫn không thể loại bỏ khoảng trống do định vị tương đối gây ra.
Guffa

1
@ MichałK: Vì bạn chỉ có thể bao phủ không gian chứ không thể loại bỏ nó, bạn phải có các yếu tố khác ít nhất bằng không gian trống để che nó. Ví dụ: nếu bạn có một không gian trống từ một phần tử cao 200px và chỉ có một phần tử cao 100px để che lỗ, bạn vẫn sẽ còn lại 100px cho lỗ.
Guffa

1
Tại sao lại ủng hộ? Nếu bạn không giải thích những gì bạn nghĩ là sai, nó không thể cải thiện câu trả lời.
Guffa

180

Một thủ thuật khác hiệu quả đối với tôi là sử dụng đáy âm trong phần tử tương đối mà bạn đã di chuyển. Không cần phải đi với định vị tuyệt đối.

Cái gì đó như:

position: relative;
left: 100px
top: -200px;
margin-bottom: -200px;

Tương tự (nếu không giống) với giải pháp tôi thấy bây giờ, từ màu xanh lá cây.


27
Một câu trả lời tuyệt vời, đơn giản. Và bằng chứng hoàn hảo rằng HTML / CSS là một trò kỳ quặc.
Synesso

1
@plang, Có vẻ như không hoạt động. Xem jsfiddle.net/u7sq8rL7/1 . Nền xanh lá cây vượt ra ngoài yếu tố cuối cùng.
Pacerier

1
@Pacerier Không sử dụng margin-bottom. Nó rõ ràng là không hoạt động (hãy nghĩ về nó); bạn cần margin-top.
William

2
Điều này hoạt động hoàn hảo. Và có, bạn sử dụng margin-bottomvới một số trừ vì bạn muốn loại bỏ không gian thừa ở dưới cùng.
phocks

một tốt, nếu bố trí của bạn có sức khỏe tốt điều này sẽ chỉ làm việc tốt
Vitaliy Terziev


1
#page {
  padding-bottom: 0;
}

không có đệm dưới


Đây là câu trả lời chính xác nhưng tôi muốn nói rằng bạn có lẽ tốt hơn nên sử dụng phần đệm vì nó dễ đọc hơn và chuẩn hơn trên web để có một số phần đệm.
Trận chiến Jeremy

@Jeremy Battle Chắc chắn, phần đệm trông đẹp hơn nhiều.
alex

@Kir Bạn thực sự có thể chỉ cần sửa đổi kiểu hiện tại của mình thành padding: 8px 16px 0px; để tránh có thêm một dòng trong CSS của bạn.
Trận chiến Jeremy

Tôi tin rằng không gian 300px bên dưới vùng chứa nội dung mới là vấn đề, không phải không gian bên trong vùng chứa ...
Guffa

Kịch bản sẽ tạo một hộp ẩn danh bên trong div (#page) và theo đặc tả CSS, không có cách nào khác để kiểm soát hộp ẩn danh trực tiếp và hộp ẩn danh này sẽ kế thừa thuộc tính từ cha của nó (trong trường hợp này là #page). Vì vậy, tốt hơn là thay đổi div cha bằng cách thay đổi thuộc tính của nó như @alex nói. Nếu những điều trên không đáp ứng các tiêu chí thì sử dụng ký quỹ âm cũng là một giải pháp trong trường hợp này.
kta

1

Hãy thử quy tắc này:

#page {
  border: 2px solid #404241;
  bottom: 0;
  padding: 8px 16px;
  position: absolute;
  top: 70px;
  width: 600px;
}

Tôi đã thay đổi vị trí thành tuyệt đối, điều này cho phép bạn sử dụng thuộc bottom: 0tính.


1

Tôi đã có một vấn đề tương tự. Cách đơn giản nhất là thay thế top on margin-topfor #page.


margin-top với giá trị âm, thay vì top + margin-bottom, là cách tốt nhất
xtian

1

Tôi gặp vấn đề tương tự. Lề âm không phù hợp với tôi vì nó để lại một vùng trắng lớn như trước đây. Tôi đã giải quyết vấn đề này trong trường hợp của mình bằng cách nhập chiều cao theo cách thủ công.

.maincontent {
    height: 675px;
}

1

Câu trả lời của tôi là muộn nhưng nó có thể giúp những người khác về vấn đề tương tự mà tôi đã gặp phải.

Tôi đã có một <div>với position: relative;nơi mà tất cả các yếu tố trẻ có position: absolute;phong cách. Điều này gây ra khoảng 20px khoảng trắng xuất hiện trên trang của tôi.

Để giải quyết vấn đề này, tôi đã thêm vào margin-top: -20px;phần tử anh chị em tiếp theo sau <div>với position: relative;.

Nếu bạn có một phần tử anh chị em trước đó, bạn có thể sử dụng margin-bottom: -20px;

section {
  height: 200px;
}
<h2>Extra Whitespace</h2>
<section>
  <div>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  <div style="position:relative;">
    <div style="position:relative; top: -20px; left:100px;">ABSOLUTE</div>
  </div>
  <div>
    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </div>
</section>


<h2>No Whitespace margin-top</h2>
<section>
  <div>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  <div style="position:relative;">
    <div style="position:relative; top: -20px; left:100px;">ABSOLUTE</div>
  </div>
  <div style="margin-top:-20px;">
    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </div>
</section>


<h2>No Whitespace margin-bottom</h2>
<section>
  <div style="margin-bottom:-20px;">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  <div style="position:relative;">
    <div style="position:relative; top: -20px; left:100px;">ABSOLUTE</div>
  </div>
  <div>
    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </div>
</section>


0

Tôi đã có thể loại bỏ các khoảng trắng bằng cách sử dụng khung sau:

Khung HTML-CSS

Và đây là đánh dấu

<div id="the-force-moved-element>I've been moved</div>
<div id="the-hack-part-1">
    <div id="the-hack-part-2>The quick brown fox jumps over the lazy dog</div>
</div>
<p>Lorem ipsum dolor sit amet...</p>

0

Câu hỏi này dường như đã được trả lời tốt - tuy nhiên tất cả các câu trả lời ở trên đều có tác dụng phụ xấu trong bố cục của tôi. Đây là những gì thực sự hiệu quả với tôi:

.moveUp {
    position: relative;
}
.moveUp > * {
    position: absolute;
    width: 100%;
    top: -75px;
}

/** This part is just design - ignore it ... ****/
.box1, .box2, .box3 {
    height: 100px;
    color: white;
}
.box1 {
    background: red;
}
.box2 {
    background: blue;
    height: 50px;
}
.box3 {
    background: green;
}
<div class="box1">Box 1</div>
<div class="moveUp"><div class="box2">Box 2 - 75px up</div></div>
<div class="box3">Box 3</div>


0

Giải pháp tốt nhất nếu bạn không muốn để lại khoảng trống bên dưới (tương đối)

Là sử dụng margin-top và vị trí: dính

#page {
     margin-top: -280px;
     position: sticky;
}
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.