2017-09-20 22 views
6

Bir merdiven gibi sol ve aşağı giden bir dizi divum var. Belki bunu yapmak için daha iyi bir yol var, ama anladım.İç boşluklara göre div ayarlama

Şimdi bütün bu "merdivenler" etrafında bir div istiyorum. Bunun gibi bir şey: IMAGE

Bu merdivenlerin sayfada ortada (yatay olarak) başladığına dikkat edin. Boy ve genişliği yazmadan bu merdivenlere göre bu dış divı nasıl yapabilirim?

Diğer önemli bir not, bazen sadece 4 adımın olması, yani div'in gerçekten de görüntülenen divlara göre ayarlanması gerektiği anlamına gelir. İşte

PLUNKER

yukarıda belirtilen "merdiven"

.box1 { 
 
    text-align: center; 
 
    border: 1px solid #eaeaea; 
 
    border-radius: 2px; 
 
    margin-left: 30%; 
 
    width: 8%; 
 
    height: 40px; 
 
} 
 

 
.box2 { 
 
    text-align: center; 
 
    margin-left: 38%; 
 
    border: 1px solid #eaeaea; 
 
    border-radius: 2px; 
 
    width: 8%; 
 
    height: 40px; 
 
} 
 

 
.box3 { 
 
    text-align: center; 
 
    margin-left: 46%; 
 
    border: 1px solid #eaeaea; 
 
    border-radius: 2px; 
 
    width: 8%; 
 
    height: 40px; 
 
} 
 

 
.box4 { 
 
    text-align: center; 
 
    margin-left: 54%; 
 
    border: 1px solid #eaeaea; 
 
    border-radius: 2px; 
 
    width: 8%; 
 
    height: 40px; 
 
} 
 

 
.box5 { 
 
    text-align: center; 
 
    margin-left: 62%; 
 
    border: 1px solid #eaeaea; 
 
    border-radius: 2px; 
 
    width: 8%; 
 
    height: 40px; 
 
} 
 

 
.box6 { 
 
    text-align: center; 
 
    margin-left: 70%; 
 
    border: 1px solid #eaeaea; 
 
    border-radius: 2px; 
 
    width: 8%; 
 
    height: 40px; 
 
}
<div class="boxContainer"> 
 
    <div class="row box1"> 
 
    hello 1 
 
    </div> 
 
    <div class="row box2"> 
 
    hello 2 
 
    </div> 
 
    <div class="row box3"> 
 
    hello 3 
 
    </div> 
 
    <div class="row box4"> 
 
    hello 4 
 
    </div> 
 
    <div class="row box5"> 
 
    hello 5 
 
    </div> 
 
    <div class="row box6"> 
 
    hello 6 
 
    </div> 
 
</div>

+0

mi? O zaman bunu, dış div için bir sınıfla ele almayı öneririm. –

+0

Dış div için hangi CSS denediniz? Bir satır içi blok olarak göstermeyi denediniz mi? Esnek bir düzen kullanmayı denediniz mi? – kojow7

+0

"0 auto" olarak ayarlanmış stil marjı olan kutulu div'lerin etrafına bir sarıcı oluşturun, daha sonra şu an yaptığınız bir viewport'u değil, wrapper (bu kutulu divlerin bir miktarına göre) içindeki kutulu divlerin genişliğini ve dolgularını hesaplamak için JavaScript'i kullanın . – JackTheKnife

cevap

2

Sorununuzu tam olarak anlayabiliyor muyum bilmiyorum. Bunun gibi bir şey mi demek istiyorsun?

Ben Custom Property (nam-ı diğer CSS değişkeni) kullandım

* { 
 
    box-sizing: border-box; 
 
} 
 

 
.boxContainer { 
 
    border-radius: 5px; 
 
    border: 3px solid black; 
 
    padding: 5px 5px 5px 30px; /* Approach to OP's image */ 
 
    --steps: 6; 
 
} 
 

 
.box { 
 
    --size: calc(100%/var(--steps)); 
 
    border: 1px solid black; 
 
    width: var(--size); 
 
    height: 40px; 
 
    text-align: center; 
 
    position: relative; 
 

 
} 
 

 
.box:nth-child(2) { 
 
    left: var(--size); 
 
} 
 

 
.box:nth-child(3) { 
 
    left: calc(2 * var(--size)); 
 
} 
 

 
.box:nth-child(4) { 
 
    left: calc(3 * var(--size)); 
 
} 
 

 
.box:nth-child(5) { 
 
    left: calc(4 * var(--size)); 
 
} 
 

 
.box:nth-child(6) { 
 
    left: calc(5 * var(--size)); 
 
}
<div class="boxContainer"> 
 
    <div class="row box"> 
 
    hello 1 
 
    </div> 
 
    <div class="row box"> 
 
    hello 2 
 
    </div> 
 
    <div class="row box"> 
 
    hello 3 
 
    </div> 
 
    <div class="row box"> 
 
    hello 4 
 
    </div> 
 
    <div class="row box"> 
 
    hello 5 
 
    </div> 
 
    <div class="row box"> 
 
    hello 6 
 
    </div> 
 
</div>

--steps yüzden boxContainer olacak kaç adım tanımlayabilir. Yalnızca kabın içine 4 kutu varsa

Bu şekilde, gibi, bu değişken inline üzerine yazabilirsiniz:

<div class="boxContainer" style="--steps: 4"> 

Ve her şey CSS başka herhangi bir değişiklik olmadan uyabilecek.

Bu değişikliği yapmak için JS'yi kullanabilir veya biçimlendirmeyi oluşturmak için sunucu tarafında bir dil kullanıyorsanız, daha da kolay ... ör. PHP'de:

<?php $boxes = ['hello 1', 'hello 2', 'hello 3', 'hello 4']; ?> 
<div class="boxContainer" style="--steps: <?= count($boxes) ?>"> 
<?php foreach ($boxes as $box): ?> 
    <div class="row box"><?= $box ?></div> 
<?php endforeach ?> 
</div> 
+0

CSS'nizi oluşturduğum plunker'a eklemeyi denedim ve sayfadaki gibi çalışmıyor mu? –

+0

Burada benim kodumla bir Plunker var, @ N.Car: https://plnkr.co/edit/7VpOFhnSbZlLb3xXublo?p=preview –

+1

mükemmel çalışıyor. Büyük konteynırda bir kenar boşluğu olsaydı, hepsi mükemmel bir şekilde içeride tutar. Teşekkür ederim :) JS –

1
ile css stil var: Eğer bunu kontrol etmek istiyorsanız Buraya

Eğer küçük plunker var

Bu biraz dağınık, ama şunu deneyebilirsiniz:

.row { 
 
    border: 1px solid black; 
 
    width: 80px; 
 
    height: 25px; 
 
    position: absolute; 
 
    left: 100%; 
 
    top: 100%; 
 
} 
 

 
.boxContainer { 
 
    position: relative; 
 
    display: inline-block; 
 
} 
 

 
.wrapper { 
 
    position: relative; 
 
}
<div class="boxContainer"> 
 
    <div class="row box1"> 
 
     <div class="wrapper"> 
 
     hello 1 
 
     </div> 
 
     <div class="row"> 
 
      <div class="wrapper"> 
 
      hello 2 
 
      </div> 
 
      <div class="row"> 
 
      <div class="wrapper"> 
 
       hello 3 
 
      </div> 
 
       <div class="row"> 
 
       <div class="wrapper"> 
 
        hello 4 
 
       </div> 
 
       </div> 
 
      </div> 
 
     </div> 
 
    </div> 
 
</div>

Bu şekilde mutlak pozisyon ve bağıl çalışmalarıyla oynar.

+0

Tam olarak resmim gibi değil. Ama zaman ayırdığın için teşekkürler. Zaten bir cevap var :) –

+0

@ N.Car Peki tüm nokta JS kullanmadan merdiven efekti elde etmek içindi. Şu anki css genişliğini sabitlemeye dayanıyor, oysa benimki yok. –

+0

Evet, merdiven almak için iyi bir çözüm :) teşekkürler –

0

Bunu denemek olabilir: her zaman 6 veya 4 div'ler

.boxContainer{ 
 
    border: solid 2px #000; 
 
    border-radius: 8px; 
 
    padding: 10px; 
 
} 
 

 
.box1 { 
 
    text-align: center; 
 
    border: 1px solid #eaeaea; 
 
    border-radius: 2px; 
 
    margin-left: 30%; 
 
    width: 8%; 
 
    height: 40px; 
 
} 
 

 
.box2 { 
 
    text-align: center; 
 
    margin-left: 38%; 
 
    border: 1px solid #eaeaea; 
 
    border-radius: 2px; 
 
    width: 8%; 
 
    height: 40px; 
 
} 
 

 
.box3 { 
 
    text-align: center; 
 
    margin-left: 46%; 
 
    border: 1px solid #eaeaea; 
 
    border-radius: 2px; 
 
    width: 8%; 
 
    height: 40px; 
 
} 
 

 
.box4 { 
 
    text-align: center; 
 
    margin-left: 54%; 
 
    border: 1px solid #eaeaea; 
 
    border-radius: 2px; 
 
    width: 8%; 
 
    height: 40px; 
 
} 
 

 
.box5 { 
 
    text-align: center; 
 
    margin-left: 62%; 
 
    border: 1px solid #eaeaea; 
 
    border-radius: 2px; 
 
    width: 8%; 
 
    height: 40px; 
 
} 
 

 
.box6 { 
 
    text-align: center; 
 
    margin-left: 70%; 
 
    border: 1px solid #eaeaea; 
 
    border-radius: 2px; 
 
    width: 8%; 
 
    height: 40px; 
 
}
<div class="boxContainer"> 
 
    <div class="row box1"> 
 
    hello 1 
 
    </div> 
 
    <div class="row box2"> 
 
    hello 2 
 
    </div> 
 
    <div class="row box3"> 
 
    hello 3 
 
    </div> 
 
    <div class="row box4"> 
 
    hello 4 
 
    </div> 
 
    <div class="row box5"> 
 
    hello 5 
 
    </div> 
 
    <div class="row box6"> 
 
    hello 6 
 
    </div> 
 
</div>

+0

kullanarak başka bir çözüm buldum Dış kutu tüm sayfa genişliği, sadece merdivenlere sahip olmamalıdır. Birisi zaten iyi bir cevap verdi. Zaman ayırdığın için teşekkürler :) –