Div yan yana nasıl yerleştirilir


241

% 100 genişlik ayarlanmış bir ana sarıcı div var. İçinde biri sabit genişlikli diğeri de boşluğu dolduran iki bölüm var. Alanın geri kalanını doldurmak için ikinci div'i nasıl yüzerim. Herhangi bir yardım için teşekkürler.


2
Bir dahaki sefere örnek kodunuzu da yerleştirin, böylece soru burada geliştiriciler için daha net hale gelir ..
Rob

1
: mutlak bir seçenek nedir? konumu kabın yanlarına ayarlayabilirsiniz ve div yeni boyutu alacaktır.
AlexanderMP

Yanıtlar:


363

İstediğinizi yapmanın birçok yolu vardır:

  1. CSS floatözelliğini kullanma :

    <div style="width: 100%; overflow: hidden;">
        <div style="width: 600px; float: left;"> Left </div>
        <div style="margin-left: 620px;"> Right </div>
    </div>
  2. S'nindisplay aşağıdaki divgibi davranmasını sağlamak için kullanılabilen CSS özelliğini kullanma table:

    <div style="width: 100%; display: table;">
        <div style="display: table-row">
            <div style="width: 600px; display: table-cell;"> Left </div>
            <div style="display: table-cell;"> Right </div>
        </div>
    </div>

Daha fazla yöntem var, ancak bu ikisi en popüler olanları.


17
@Filoxo'dan HTML 5 çözümü, bunun yerine kullanın
TheMcMurder

1
Önceki yorumcunun söyledikleri: filoxo başına HTML5 çözümünü # 3 olarak eklemeyi düşünün.
Ahmed Fasih

2
@TheMcMurder: Eski tarayıcıları (ör. IE <11) desteklemesi gereken bizim için bu bir seçenek değil.
Oyvind

@Oyvind, kesinlikle haklısın. Kullanım durumunuza bağlıdır. IE 8, 9 veya 10'u destekliyorsanız, çoklu dolgu desteği almanız gerekir, polyfill.io cdn.polyfill.io/v2/docs veya github.com/10up/flexibility gibi bir hizmet öneririm ama gerçekten çoklu dolguların kullanılmasını önleyen gereksinimler.
TheMcMurder

1
taşma: gizli ne yapar? belirli bir yüksekliğe sahip elemanlar için değil mi?
michael

177

CSS3, bu davranışı da başarabilen esnek kutular (esnek kutu) olarak adlandırdı.

Sadece ilk div'in genişliğini tanımlayın ve ikincisine , üst öğenin kalan genişliğini doldurmasına izin verecek bir flex-growdeğer verin 1.

.container{
    display: flex;
}
.fixed{
    width: 200px;
}
.flex-item{
    flex-grow: 1;
}
<div class="container">
  <div class="fixed"></div>
  <div class="flex-item"></div>
</div>

jsFiddle demosu

Esnek kutuların eski tarayıcılarla geriye dönük uyumlu olmadığını, ancak modern tarayıcıları hedeflemek için mükemmel bir seçenek olduğunu unutmayın (ayrıca Caniuse ve MDN'ye bakın ). Esnek kutuların nasıl kullanılacağına dair kapsamlı ve kapsamlı bir kılavuz CSS Tricks'te mevcuttur .


5
Bir çözüm bulmak tüm gün sürdü ve bu cevap çözdü! Yan yana 4 panelim var, bazen 3. ve 4. panellerde bazen hiçbir şey yok. Hepsi çevrelerinde bir sınır bulunan bir div içinde yaşıyorlar. Tüm kayan nokta: ilk div durumunda kalan beni altta kenarlıktan geçen bir div bıraktı çünkü üretilen etiketler dinamik. Etiketler, ASP'nin bunları oluşturduğu için açıklıklardır. Kayan noktaya sahip olmamak: sol aynı satırdaki div'ların sadece 3'ünü yaptı. Ve bir tablo kullanmak söz konusu değil. Teşekkür ederim!
Aydınlık

Böyle bir şey kullanmak için geriye dönük uyumlu bir yöntem var mı, yani IE 8-10'u desteklemesi gereken yoksul
saplar için

@ BenA.Hilleli, gereksinimlerinize (ör. Aşamalı geliştirme veya zarif bozulma ) bağlı olabilir, ancak hızlı bir arama, "gerçek dünyada flexbox nasıl kullanılır" kılavuzunun yanı sıra Flexie.js'yi de verdi. IE6-9'u destekler. Alternatif olarak, aynı soruyu elde ettikleri için bu sorunun diğer cevaplarını deneyin.
filoxo

20

HTML ve CSS tasarım stratejileri hakkında fazla bir şey bilmiyorum, ancak basit bir şey arıyorsanız ve ekrana otomatik olarak sığacaksa (benim gibi) en basit çözümün div'lerin kelimeler gibi davranması olduğuna inanıyorum bir paragraf. Belirtmeyi deneyindisplay: inline-block

<div style="display: inline-block">
   Content in column A
</div>
<div style="display: inline-block">
   Content in column B
</div>

DIV'lerin genişliğini belirtmeniz gerekebilir veya gerekmeyebilir


5
Muhtemelen display:flexen iyi çözümdür, ancak bence inline-blockde mükemmel çünkü daha fazla tarayıcıda çalışıyor. Bu arada, <div style="white-space:nowrap">yeniden boyutlandırmanın bozulmasını önlemek için her iki div öğesini a ile sarmanız gerekebilir .
John Henckel

Bu şablonlama için iyi bir çözümdür. Tek sorun, daha az içeriğe sahip bir div'ı aşağıya doğru itmesidir. Nasıl zirveye itilir?
neredeyse bir acemi

1
nvm, sadece aramak için gerekli, çözüm: vertical-align: top;
neredeyse bir acemi

@JohnHenckel, tüm tarayıcılar için geçerli olmadığı anlamına gelir, tüm tarayıcılar için aynı şekilde çalışmayabilir mi? inline-blockkodu.
Kavindu Gayantha

@guillermo iyi çalışmıyor. tüm div'ler yan yana yerleştirilmiyor. Neden. açık değil.
Kavindu Gayantha

14

Bunu elde etmek için CSS ızgarasını kullanabilirsiniz, bu çizim amacıyla uzun el versiyonudur:

div.container {
    display: grid;
    grid-template-columns: 220px 20px auto;
    grid-template-rows: auto;
}

div.left {
    grid-column-start: 1;
    grid-column-end: 2;
    grid-row-start: row1-start
    grid-row-end: 3;
    background-color: Aqua;
}

div.right {
    grid-column-start: 3;
    grid-column-end: 4;
    grid-row-start: 1;
    grid-row-end; 1;
    background-color: Silver;
}

div.below {
    grid-column-start: 1;
    grid-column-end: 4;
    grid-row-start: 2;
    grid-row-end; 2;
}
<div class="container">
    <div class="left">Left</div>
    <div class="right">Right</div>
    <div class="below">Below</div>
</div>

Ya da şamandıra ve marj kullanarak daha geleneksel yöntem.

Bu örneğe, şeylerin nerede olduğunu ve yüzen alanın altındaki içerikle ne yapılacağını göstermeye yardımcı olacak bir arka plan rengi ekledim.

Stillerinizi gerçek hayatta satır içine koymayın, bir stil sayfasına çıkarın.

div.left {
    width: 200px;
    float: left;
    background-color: Aqua;
}

div.right {
    margin-left: 220px;
    background-color: Silver;
}

div.clear {
    clear: both;
}
    <div class="left"> Left </div>
    <div class="right"> Right </div>
    <div class="clear">Below</div>

<div style="width: 200px; float: left; background-color: Aqua;"> Left </div>
<div style="margin-left: 220px; background-color: Silver;"> Right </div>
<div style="clear: both;">Below</div>

2

İlk div'e bir şamandıra sol ve sabit, ikinci div'a% 100 genişlikte bir şamandıra bırakın. Hile yapmalı. Eğer altına öğeleri yerleştirmek istiyorsanız, açık bir şekilde ihtiyacınız var: her ikisi de aşağıya yerleştirmek istediğiniz öğenin üzerine


2
<div class="container" style="width: 100%;">
    <div class="sidebar" style="width: 200px; float: left;">
        Sidebar
    </div>
    <div class="content" style="margin-left: 202px;">
        content 
    </div>
</div>

Bu çapraz tarayıcı uyumlu olacaktır. Kenar boşluğu bırakmadığınız takdirde, içerik kenar çubuğunuzdan daha uzunsa, içeriğin en sola kadar çalışmasına neden olan sorunlarla karşılaşırsınız.


1

IE6'yı hedeflemiyorsanız, ikincisini yüzdürün <div>ve ilk <div>sabit genişliğine eşit (veya belki biraz daha büyük) bir kenar boşluğu verin .

HTML:

<div id="main-wrapper">
    <div id="fixed-width"> lorem ipsum </div>
    <div id="rest-of-space"> dolor sit amet </div>
</div>

CSS:

#main-wrapper {
    100%;
    background:red;
}
#fixed-width {
    width:100px;
    float:left
}
#rest-of-space {
    margin-left:101px;
        /* May have to increase depending on borders and margin of the fixd width div*/
    background:blue;
}

Marj, 'alanın geri kalanının' <div>'sabit genişlikten' daha fazla içerik içerme olasılığını açıklar <div>.

Sabit genişliğe arka plan vermeyin; bunları farklı 'sütunlar' olarak görünür bir şekilde görmeniz gerekiyorsa Sahte Sütunlar hilesini kullanın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.