posisi: relatif menyisakan ruang kosong

88

Kode ada di sini: http://lasers.org.ru/vs/example.html

Bagaimana cara menghapus ruang kosong di bawah blok utama (#halaman)?

Kir
sumber
Maksud Anda padding bawah, atau semuanya berada di tengah secara vertikal?
alex
Apakah yang Anda maksud adalah spasi antara teks di div #page dan batasnya? Kalau tidak, saya tidak yakin ruang apa yang Anda bicarakan.
Jeremy Battle
@ Pertarungan Jeremy Aku juga tidak bisa memahaminya, meskipun Guffa sepertinya tahu .
alex
Adakah orang lain yang tidak melihat masalah ini?
Myles Grey
Silakan lihat Jawaban yang ditandai di [ stackoverflow.com/questions/13722095/… [1]: stackoverflow.com/questions/13722095/…
Sohel Pathan

Jawaban:

36

Nah, jangan gunakan posisi relatif. Elemen tersebut masih menempati ruang tempat asalnya saat menggunakan pemosisian relatif, dan Anda tidak dapat menghilangkannya. Misalnya, Anda dapat menggunakan pemosisian absolut, atau membuat elemen mengapung di samping satu sama lain.

Saya bermain-main dengan tata letak sedikit, dan saya sarankan Anda mengubah tiga aturan ini menjadi:

#layout { width: 636px; margin: 0 auto; }
#menu { position: absolute; width: 160px; margin-left: 160px; }
#page { width: 600px; padding: 8px 16px; border: 2px solid #404241; }
Guffa
sumber
27
"dan Anda tidak bisa menyingkirkan itu." - kamu bisa. Gunakan margin negatif, seperti pada jawaban plang.
Michał K
5
@ MichałK: Tidak, itu hanya berarti bahwa Anda menimpa ruang kosong dengan elemen lain, bukan membuang ruang kosong tersebut. Anda hanya dapat menggunakan margin negatif untuk menimpa ruang kosong dari pemosisian relatif sebanyak ukuran elemennya.
Guffa
@ MichałK: Meremehkan jawaban ini dan jawaban lain yang sama sekali tidak terkait tidak membantu, Anda tetap tidak dapat menghilangkan ruang yang disebabkan oleh pemosisian relatif.
Guffa
1
@ MichałK: Karena Anda hanya dapat menutupi ruang dan tidak dapat membuangnya, Anda harus memiliki elemen lain yang berukuran paling kecil ruang kosong untuk menutupinya. Jika Anda misalnya memiliki ruang kosong dari elemen yang tingginya 200px, dan hanya memiliki elemen yang tingginya 100px untuk menutupi lubang, Anda masih memiliki 100px di kiri lubang.
Guffa
1
Mengapa suara negatif itu? Jika Anda tidak menjelaskan apa yang menurut Anda salah, itu tidak dapat memperbaiki jawabannya.
Guffa
183

Trik lain yang bekerja dengan baik bagi saya adalah menggunakan margin-bottom negatif di elemen relatif yang telah Anda pindahkan. Tidak perlu melakukan pemosisian absolut.

Sesuatu seperti:

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

Mirip (jika tidak identik) dengan solusi yang saya lihat sekarang, dari hijau.

plang
sumber
30
Jawaban yang bagus dan sederhana. Dan bukti sempurna bahwa HTML / CSS adalah pertunjukan yang aneh.
Synesso
1
@plang, Sepertinya tidak berhasil. Lihat jsfiddle.net/u7sq8rL7/1 . Latar belakang hijau melampaui elemen terakhir.
Pacerier
1
@Pacerier Jangan gunakan margin-bottom. Ini jelas tidak bekerja (pikirkanlah); Anda membutuhkan margin-top.
William
2
Ini bekerja dengan sempurna. Dan ya Anda gunakan margin-bottomdengan angka minus karena Anda ingin menghilangkan ruang ekstra di bagian bawah.
Phocks
bagus, jika tata letak Anda dalam keadaan sehat ini akan berfungsi dengan baik
Vitaliy Terziev
2

Coba aturan ini:

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

Saya mengubah posisi menjadi absolut, ini memungkinkan Anda untuk menggunakan bottom: 0properti.

Salman A
sumber
1
#page {
  padding-bottom: 0;
}

tidak ada bantalan bawah

alex
sumber
Ini adalah jawaban yang benar tetapi saya akan mengatakan Anda mungkin lebih baik DENGAN padding karena lebih mudah dibaca dan lebih standar di web untuk memiliki beberapa padding.
Jeremy Battle
@Jeremy Battle Pastinya, paddingnya terlihat jauh lebih baik.
alex
@Kir Anda sebenarnya dapat mengubah gaya Anda saat ini ke padding: 8px 16px 0px; untuk menghindari baris tambahan di CSS Anda.
Jeremy Battle
Saya percaya itu adalah ruang 300px di bawah wadah konten yang menjadi masalah, bukan ruang di dalam wadah ...
Guffa
Skenario akan membuat kotak anonim di dalam div (#page) dan sesuai dengan spesifikasi CSS, tidak ada cara lain untuk mengontrol kotak anonim secara langsung dan kotak anonim ini akan mewarisi properti dari induknya (dalam hal ini # halaman). Jadi lebih baik untuk mengubah div induk dengan mengubah propertinya seperti yang dikatakan @alex. Jika hal di atas tidak memenuhi kriteria maka penggunaan margin negatif juga menjadi solusi dalam skenario ini.
kta
1

Saya punya masalah serupa. Cara termudah adalah dengan mengganti atas pada margin-topuntuk #page.

hijau
sumber
margin-top dengan nilai negatif, bukan top + margin-bottom, adalah cara yang harus dilakukan
xtian
1

Saya memiliki masalah yang sama. Margin negatif tidak berhasil untuk saya karena meninggalkan area putih besar di tempat sebelumnya. Saya memecahkan masalah ini dalam kasus saya dengan memasukkan ketinggian secara manual.

.maincontent {
    height: 675px;
}
UkrVolk11
sumber
1

Jawaban saya terlambat tetapi dapat membantu orang lain dengan masalah serupa yang saya alami.

Aku punya <div>dengan position: relative;mana semua elemen anak memiliki position: absolute;gaya. Ini menyebabkan sekitar 20px ruang putih muncul di halaman saya.

Untuk menyiasati hal ini saya menambahkan margin-top: -20px;elemen sibling berikutnya setelah <div>with position: relative;.

Jika sebelumnya Anda memiliki elemen saudara, Anda dapat menggunakan 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>

Gabriel Gates
sumber
0

Saya bisa menghilangkan spasi menggunakan kerangka kerja berikut:

Kerangka HTML-CSS

Dan inilah markupnya

<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>
Abel Callejo
sumber
0

Pertanyaan ini tampaknya dijawab dengan baik - namun semua jawaban di atas memiliki efek samping yang buruk dalam tata letak saya. Inilah yang benar-benar berhasil bagi saya:

.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>

Gerfried
sumber
0

Solusi terbaik jika Anda tidak ingin meninggalkan spasi di bawah (relatif)

Apakah menggunakan margin-top dan position: sticky

#page {
     margin-top: -280px;
     position: sticky;
}
ztvmark
sumber