CSS şamandıralarını tek bir satırda nasıl tutabilirim?


216

float: leftSoldaki öğeyi kullanarak aynı satırda iki öğe olmasını istiyorum .

Bunu tek başına başarmakta hiç sorun yaşamıyorum. Sorun şu ki, tarayıcıyı çok küçük boyutlandırsanız bile iki öğenin aynı satırda kalmasını istiyorum . Bilirsiniz ... tablolarla nasıl olduğu gibi.

Amaç, ne olursa olsun , öğenin sağdan sarılmasını önlemektir .

CSS kullanarak tarayıcıya , div'in altında kalmasını sağlamaktan ziyade içerenleri uzatmayıdiv nasıl söyleyebilirim ?float: right;float: left; div

istediğim:

                                   \
 +---------------+  +------------------------/
 | float: left;  |  | float: right;          \
 |               |  |                        /
 |               |  |content stretching      \   Screen Edge
 |               |  |the div off the screen  /  <---
 +---------------+  +------------------------\
                                             /

54
Bu diyagramları fare ile yapabilmemiz için StackOverlow küçük bir çizim widget'ı ekleseydi ne kadar havalı olurdu? Tasarım odaklı SE siteleri için daha uygun olabilir ... ama yine de harika olurdu.
JoeCool

5
@JoeCool UX SE sitesinde aslında içinde mockuplar oluşturmak için bir araç var. meta.ux.stackexchange.com/questions/1291/…
frank hadder

Yanıtlar:


77

Kayan reklamlarınızı, bu çapraz tarayıcı minimum genişlik kesmek kullanan <div>bir kaba sarın <div>:

.minwidth { min-width:100px; width: auto !important; width: 100px; }

Sen olabilir ayrıca set "taşma" ama muhtemelen gerekir.

Bu çalışır çünkü:

  • !importantİle birlikte beyan, min-widthneden her şeyi IE7 + aynı hat üzerinde kalmak için
  • IE6 uygulanmaz min-width, ancak bildirimi width: 100pxgeçersiz kılan !importantve kap genişliğinin 100 piksel olmasına neden olan bir hata vardır .

Bu iki şamandıra için harika çalışıyor, ama üç değil. Üç kişilik çalışabilir mi ??
tylerthemiler

15
Tek sorun, sabit bir minimum genişliği zorlamasıdır.
Matt Montag

6
Bu bir çözüm değil, içeriğiniz gerçekten küçüldüğünde (soruya bakın) yalnızca minimum genişliktedir, bu nedenle 100 piksellik değerin altında aynı soruna sahip olursunuz. Özellikle tablo hücreleri için bu bir sorun olmaya devam etmektedir.
Sanne

Kesinlikle şok edici - sorunumu anında çözdü. Bu sorunla, adlandırabileceğimden daha fazla kutu korsanlığı olan basit bir iki sütun bootstrap düzeninde boğuldum, ancak bu mükemmel çalıştı. Bu işin neden büyüleyici şeyler, dom olduğunu açıkladığınız için teşekkür ederiz.
nocarrier

Bu
div

132

Başka bir seçenek, kayan yerine, beyaz boşluk özelliği nowrap öğesini bir üst div öğesine ayarlamaktır:

.parent {
     white-space: nowrap;
}

ve beyaz boşluğu sıfırlayın ve bölmeler aynı satırda kalması için bir satır içi blok ekranı kullanın, ancak yine de bir genişlik verebilirsiniz.

.child {
    display:inline-block;
    width:300px;
    white-space: normal;
}

İşte bir JSFiddle: https://jsfiddle.net/9g8ud31o/


4
Kesinlikle gördüğüm en iyi çözüm. Benim kullanım durumum için çalışıyor ama ne kadar iyi desteklendiğini merak ediyorum. Neyse ki HER ŞEY için şamandıralar kullanmak yavaş yavaş geçmişte kaldı.
Ryan Ore

1
Bunun nasıl çalıştığını açıklayabilir misiniz? veya en az herhangi bir bağlantı?
Anirudhan J

4
@AnirudhanJ Çok zor değil. İnline-block elemanları satır içi metin ile normal akış yapar (ama bloğun doldurma / marj bazı yeteneklerine korur) ve tam anlamıyla (normal" uygulayarak nowrap seçeneği: sadece beyaz-boşluk metni kaydırma için CSS söyleyebilir "tekrar çocuğa, her şeyin içine yayılmasını önlemek için)
Brian

Yine de ekranın sağında yüzmek için sağdaki div'i nasıl elde edersiniz? Bu, satır sonu olmayacak şekilde iki satır içi bloğu yan yana koyar.
16'da ekle

Ayrıca kullanabilirsiniz -3px: mektup-aralık inline-block elemanları arasındaki boşluğu kaldırmak için (ya da her türlü değer eserler sizin için). PS: kabul edilen cevaptan daha iyi ;
Claudiu

15

Flatörlerinizi, flatörlerin birleşik genişliği + kenar boşluğundan daha az minimum genişliğe sahip bir div içine sarın.

Kesmek veya HTML tabloları gerekmez.


10

Çözüm 1:

display: table-cell (yaygın olarak desteklenmez)

Çözüm 2:

tablolar

(Hacklerden nefret ediyorum.)


8

Başka bir seçenek: Sağ sütununuzu yüzdürmeyin; şamandıranın ötesine taşımak için sol marj verin. IE6'yı düzeltmek için bir veya iki hack'e ihtiyacınız olacak, ancak bu temel fikir.


4

Kayan blok düzeyi öğelerin bu soruna en iyi çözüm olduğundan emin misiniz?

Genelde bende CSS zorluklarla o sebebi İstediğim şeyi yapmanın bir yolunu göremiyorum çıkıyor benim biçimlendirme yapabilirim nasıl (düşünme" konusunda bir tünel vizyon yakalandılar olmasıdır bunlar elementler yapmak bu ?") yerine geri dönüyor ve tam olarak ben başarmak ve belki de bu kolaylaştırmak için hafifçe benim html reworking gerekiyor ne bakarak daha.


iyi hemen hemen her şey için çalışır ve mevcut düzen dayanmaktadır, ben sadece metin boyutunu çok büyüttüğünüzde VEYA 700px daha küçük tarayıcı penceresini yeniden boyutlandırdığınızda düzen kırılması ile ilgili bir sorunu düzeltmeye çalışıyorum
Jiaaro

2

Bu sorun için tabloları kullanmanızı tavsiye ederim. Ben benzer bir sorun yaşıyorum ve tablo sadece bazı verileri görüntülemek için kullanılır ve ana sayfa düzeni için iyi olduğu sürece.


2

Bu satırı kayan öğe seçicinize ekleyin

.floated {
    float: left;
    ...
    box-sizing: border-box;
}

Dolgu ve kenarlıkların genişliğe eklenmesini önleyecektir, bu nedenle örneğin, örneğin, her zaman satırda kalmalıdır. % 33.33333 genişliğe sahip üç eleman


0

Kullanıcı pencere boyutunu yatay olarak küçültdüğünde ve bu durum yüzerlerin dikey olarak istiflenmesine neden olduğunda, yüzdürmeleri kaldırın ve ikinci bölmede (şamandıra) kenar boşluğu kullanın: -123px (değeriniz) ve sol kenar boşluğu: 444px (değeriniz) divleri şamandıralarla göründükleri gibi konumlandırın. Bu şekilde yapıldığında, pencere daraldığında, sağ taraftaki div yerinde kalır ve sayfa eklemek için çok dar olduğunda kaybolur. ... tarayıcı penceresi kullanıcı tarafından daraltıldığında (bana göre) sağ taraftaki div'in sol taraftaki div'in altından "zıplaması" daha iyidir.


-3

Ben bu şekilde var bazı jQuery kullanmak oldu. Bunu bu şekilde yapmamın nedeni A ve B'nin yüzde genişlik olmasıydı.

HTML:

<div class="floatNoWrap">
    <div id="A" style="float: left;">
        Content A
    </div>
    <div id="B" style="float: left;">
        Content B
    </div>
    <div style="clear: both;"></div>
</div>

CSS:

.floatNoWrap
{
    width: 100%;
    height: 100%;
}

jQuery:

$("[class~='floatNoWrap']").each(function () {
    $(this).css("width", $(this).outerWidth());
});

1
CSS için bir çerçeve? TÜM JavaScript aramalar için -jquery zorunda ve kalite için tam ve mutlak bir ihmal nedeniyle biz açıkça -jquery ile CSS aramaya başlamak zorunda? Doğru yap ya da hiç yapma.
John
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.