- Konu sahibi
- #1
CSS flex, bir kapsayıcı içindeki öğeleri tek bir eksende; yatay satır veya dikey sütun olarak düzenlemeye yarayan esnek yerleşim modelidir. Kapsayıcıya
Burada iki benzer kullanım birbirinden ayrılmalıdır:
Aşağıdaki örnekte üç kutu aynı satırda düzenlenir ve aralarına boşluk bırakılır:
Bu kodu bir HTML dosyasına yerleştirip tarayıcıda açtığınızda bağlantıların tek satırda hizalandığını görürsünüz. Genişlik azaldığında öğeler daralır. İçerik taşarsa veya mobil görünümde alt alta dizilmesini istiyorsanız kapsayıcıya
Flex düzeninde iki eksen bulunur:
Bir flex item için kullanılan
Aynı yerleşim için en uygun seçimi aşağıdaki gibi yapabilirsiniz:
Bir kapsayıcıda
Kartlar veya menü öğeleri dar ekranlarda taşabiliyorsa şu sırayı izleyin:
Flexbox, tek boyutlu yerleşimler için uygundur: menü, buton grubu, kart satırı veya bir form satırı gibi. Aynı anda hem satır hem sütun eksenlerinde karmaşık bir sayfa ızgarası kuruyorsanız CSS Grid daha uygun olabilir; ancak bir Grid öğesinin içindeki yatay veya dikey hizalama için flex kullanmak yine pratik bir seçimdir.
display: flex verildiğinde kapsayıcı flex container, doğrudan altındaki öğeler ise flex item olur. Öğeler kullanılabilir boşluğu paylaşabilir, daralabilir, büyüyebilir ve kolayca hizalanabilir.Burada iki benzer kullanım birbirinden ayrılmalıdır:
display: flex flexbox yerleşimini başlatır; flex ise bir flex item'ın büyüme, küçülme ve başlangıç boyutunu belirleyen kısa yazımdır.En küçük çalışan örnek
Aşağıdaki örnekte üç kutu aynı satırda düzenlenir ve aralarına boşluk bırakılır:
Kod:
<div class="menu">
<a href="#">Ana sayfa</a>
<a href="#">Hakkımızda</a>
<a href="#">İletişim</a>
</div>
<style>
.menu {
display: flex;
gap: 16px;
padding: 12px;
border: 1px solid #ccc;
}
.menu a {
flex: 1 1 0;
min-width: 0;
overflow-wrap: anywhere;
box-sizing: border-box;
padding: 10px;
text-align: center;
background: #eee;
color: #222;
text-decoration: none;
}
</style>
Bu kodu bir HTML dosyasına yerleştirip tarayıcıda açtığınızda bağlantıların tek satırda hizalandığını görürsünüz. Genişlik azaldığında öğeler daralır. İçerik taşarsa veya mobil görünümde alt alta dizilmesini istiyorsanız kapsayıcıya
flex-wrap: wrap ya da flex-direction: column ekleyebilirsiniz.Flex nasıl çalışır?
Flex düzeninde iki eksen bulunur:
- Ana eksen: Öğelerin dizildiği yöndür. Türkçe gibi yatay yazım düzeninde varsayılan yön satırdır ve
flex-direction: rowile ifade edilir. - Çapraz eksen: Ana eksene dik yöndür. Yatay satırda çapraz eksen dikeydir.
- justify-content: Öğeleri ana eksen üzerinde hizalar. Örneğin
center,space-betweenveflex-endkullanılabilir. - align-items: Öğeleri çapraz eksen üzerinde hizalar. Dikeyde ortalamak için yatay satır düzeninde genellikle
align-items: centerkullanılır. - gap: Öğeler arasındaki boşluğu belirler; gereksiz kenar boşluğu hesaplarını azaltır.
Bir flex item için kullanılan
flex özelliği üç değerin kısa yazımıdır: flex-grow, flex-shrink ve flex-basis. Tek sayı olan flex: 1 tarayıcılarda genellikle 1 1 0% biçiminde açılır. Örnekte üç değerin açık yazılması büyüme, küçülme ve temel boyutu görünür kılar; flex: 0 0 240px ise öğeyi 240 piksel temel boyutla büyümeyen ve küçülmeyen bir öğe yapar.Hangi özelliği ne zaman kullanmalı?
Aynı yerleşim için en uygun seçimi aşağıdaki gibi yapabilirsiniz:
| flex değeri | Büyüme/küçülme | Başlangıç boyutu |
|---|---|---|
| 0 1 auto | Büyümez, küçülebilir | auto ile boyut/içerik temeli |
| 1 1 auto | Büyüyebilir ve küçülebilir | auto ile boyut/içerik temeli |
| 1 1 0 | Büyüyebilir ve küçülebilir | Sıfır temel üzerinden alan paylaşımı |
| 0 0 240px | Büyümez ve küçülmez | 240 piksel temel |
Bir kapsayıcıda
display: flex çalışmıyorsa önce seçicinin doğru elemana uygulandığını kontrol edin. Flex özellikleri kapsayıcıya ve doğrudan çocuklarına uygulanır; torun öğeler kendiliğinden flex item olmaz. Ayrıca justify-items flexbox için doğru hizalama özelliği değildir; ana eksen hizalaması için justify-content kullanılmalıdır.Responsive kullanım için kararlar
Kartlar veya menü öğeleri dar ekranlarda taşabiliyorsa şu sırayı izleyin:
- Kapsayıcıya
display: flexekleyin. - Öğelerin taşmasını önlemek için gerekiyorsa
flex-wrap: wrapkullanın. - Öğeler alt alta geçmeliyse bir medya sorgusunda
flex-direction: columntanımlayın. - Öğelerden biri kalan alanı dolduracaksa yalnızca o öğeye
flex: 1verin. - Metin veya uzun içerik taşması varsa ilgili item üzerinde
min-width: 0değerini deneyin; flex item'lar varsayılan minimum içerik boyutu nedeniyle beklenenden fazla genişleyebilir.
Flexbox, tek boyutlu yerleşimler için uygundur: menü, buton grubu, kart satırı veya bir form satırı gibi. Aynı anda hem satır hem sütun eksenlerinde karmaşık bir sayfa ızgarası kuruyorsanız CSS Grid daha uygun olabilir; ancak bir Grid öğesinin içindeki yatay veya dikey hizalama için flex kullanmak yine pratik bir seçimdir.