<div> öğelerini yan yana hizala


127

Bunun oldukça basit bir soru olduğunu biliyorum ama hayatım boyunca çözemiyorum. Bir arka plan resmi uyguladığım iki bağlantım var. Şu anda göründüğü gibi (gölge için özür dileriz, sadece bir düğmenin kaba bir taslağı):

görüntü açıklamasını buraya girin

Ancak, bu iki düğmenin yan yana olmasını istiyorum. Hizalama ile ne yapılması gerektiğini gerçekten anlayamıyorum.

İşte HTML

<div id="dB"}>
    <a href="http://notareallink.com" title="Download" id="buyButton">Download</a> 
</div>
<div id="gB">
    <a href="#" title="Gallery" onclick="$j('#galleryDiv').toggle('slow');return false;" id="galleryButton">Gallery</a>     
</div>

İşte CSS

#buyButton {
    background: url("assets/buy.png") 0 0 no-repeat;
    display:block;
    height:80px;
    width:232px;
     text-indent:-9999px;
}
#buyButton:hover{
width: 232px;
height: 80px;
background-position: -232px 0;
}
#buyButton:active {
width: 232px;
height: 80px;
background-position: -464px 0;
}

#galleryButton {
    background: url("images/galleryButton.png") 0 0 no-repeat;
    display:block;
    height:80px;
    width:230px;
     text-indent:-9999px;
}
#galleryButton:hover{
width: 230px;
height: 80px;
background-position: -230px 0;
}
#galleryButton:active {
width: 230px;
height: 80px;
background-position: -460px 0;
}

5
Sadece başlığı okuyarak akla ilk gelenfloat:left;
JCOC611

2
@ JCOC611: float:left;Her ikisine de başvurmak divmükemmel bir şekilde yaptı. Yorumunuzu cevap olarak gönderebilir misiniz? Teşekkürler!
sudo rm -rf

1
İkincisi, display: inline-block;ancak daha az destekleniyor ...
JV

1
float: bir konteynerin içinde bırakılması işe yarar, ancak düğmeler için <div> yerine iki <span> etiketi kullanmayı denerdim.
shiftycow

Daha önce de belirtildiği gibi, float: left; #buyButton ve #galleryButton'a, ardından clear ile başka bir öğe ekleyin: both; yüzen alanı temizlemek için. <a> sarmalamak için neden div'ler (blok öğeleri) kullanılıyor?
ludesign

Yanıtlar:


154

float:left;Her iki div'e de uygulayarak onları yan yana koymalısınız.


Yanılıyor muyum yoksa clear:both;oraya bir yere gitmem gerekiyor mu? Hiçbir zaman CSS uzmanı olmadım, ancak netleri görmek için kayan sayılar gördüğümde tipik görünüyor.
Brad Christie

4
clear:bothtam tersini yapacak. "Kayan öğeden sonraki öğeler onun etrafında akacaktır. Bunu önlemek için clear özelliğini kullanın."
JCOC611

@ JCOC611: Ah, anlık bir kayma yeteneği istediğinizde genellikle bunu izliyor musunuz? Mantıklı. Ders için teşekkürler. ;-)
Brad Christie

7
Sadece "açık" olmak <br style="clear: both;" />gerekirse (korkunç, biliyorum), hizalanmış ikisinin altında istediğiniz üçüncü bir div'iniz varsa kullanmanız gerekirdi .
Tass

3
@Tass, yalnızca üçüncü div'inizin böyle olması gerekir: <div style="clear: both;">...</div>(br gerekmez)
intrepidis

137

Dikkat edin float: left… 🤔

... öğeleri yan yana hizalamanın birçok yolu vardır.

İki unsuru yan yana gerçekleştirmenin en yaygın yolları aşağıdadır…

Demo: Codepen'de aşağıdaki tüm örnekleri görüntüleyin / düzenleyin


Aşağıdaki tüm örnekler için temel stiller…

Bu örneklerdeki bazı temel css stilleri parentve childöğeleri:

.parent {
  background: mediumpurple;
  padding: 1rem;
}
.child {
  border: 1px solid indigo;
  padding: 1rem;
}

yüzer: left

floatÇözümü kullanmak, diğer unsurlar üzerinde istenmeyen etkime neden olur. (İpucu: Bir düzeltme kullanmanız gerekebilir .)

html

<div class='parent'>
  <div class='child float-left-child'>A</div>
  <div class='child float-left-child'>B</div>
</div>

css

.float-left-child {
  float: left;
}

Ekran: sıralı blok

html

<div class='parent'>
  <div class='child inline-block-child'>A</div>
  <div class='child inline-block-child'>B</div>
</div>

css

.inline-block-child {
  display: inline-block;
}

Not : Bu iki alt öğe arasındaki boşluk, div etiketleri arasındaki boşluk kaldırılarak kaldırılabilir:

ekran: satır içi blok (boşluk yok)

html

<div class='parent'>
  <div class='child inline-block-child'>A</div><div class='child inline-block-child'>B</div>
</div>

css

.inline-block-child {
  display: inline-block;
}

Ekran: Esnek

html

<div class='parent flex-parent'>
  <div class='child flex-child'>A</div>
  <div class='child flex-child'>B</div>
</div>

css

.flex-parent {
  display: flex;
}
.flex-child {
  flex: 1;
}

display: inline-flex

html

<div class='parent inline-flex-parent'>
  <div class='child'>A</div>
  <div class='child'>B</div>
</div>

css

.inline-flex-parent {
  display: inline-flex;
}

görüntü: ızgara

html

<div class='parent grid-parent'>
  <div class='child'>A</div>
  <div class='child'>B</div>
</div>

css

.grid-parent {
  display: grid;
  grid-template-columns: 1fr 1fr
}


2
Evet, ama kullanmanın inline-blockbazı uyumluluk sorunları olduğunu duydum . Ayrıca, bunu kullanmanın herhangi bir avantajı var floatmı?
sudo rm -rf

1
Evet, inline-blockdaha yenidir, bu nedenle hedef tarayıcılarınız henüz onu desteklemiyor olabilir (bununla birlikte birçok tarayıcıya özgü özellik ve bunun için geçici çözümler vardır). Avantaj, içeren öğenin öğeleri sarmasıdır; ile floatüst öğeye css eklemeniz gerekir.
Beau Smith

12

basit tut

<div align="center">
<div style="display: inline-block"> <img src="img1.png"> </div>
<div style="display: inline-block"> <img src="img2.png"> </div>
</div>
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.