Düzen

CSS Podcast'i - 009: Düzen 'nı inceleyin.

Bir geliştirici olarak çalıştığınızı düşünün, ve bir tasarımcı iş arkadaşınız yepyeni bir web sitesi tasarımını size sunuyor. Tasarımda her türlü ilginç düzen ve kompozisyon bulunmaktadır: görüntü alanının genişliği ve yüksekliğini dikkate alan iki boyutlu düzenler, yanı sıra akıcı ve esnek olması gereken düzenler. Bunları CSS ile biçimlendirmenin en iyi yöntemine nasıl karar verirsiniz?

CSS, düzen sorunlarını çözmemiz için bize çeşitli yollar sunar. veya her ikisinde birden yayınlayabilirsiniz. Bağlam için doğru düzen yöntemini seçmek zor olabilir. ve çoğu zaman sorununuzu çözmek için birden fazla düzen yöntemine ihtiyaç duyabilirsiniz. Size bu konuda yardımcı olmak için aşağıdaki modüllerde: bu kararları desteklemek için her bir CSS düzen mekanizmasının benzersiz özellikleri hakkında bilgi edineceksiniz.

Düzen: Kısa bir geçmiş

Web'in ilk günlerinde, <table> öğeleriyle oluşturulan basit bir belgeye göre daha karmaşık tasarımlar. CSS 90'ların sonunda tarayıcılar tarafından geniş ölçüde benimsendiğinde HTML'yi görsel stillerden ayırmak daha kolay hale geldi. CSS, geliştiricilerin HTML'ye dokunmadan bir web sitesinin görünümünü ve tarzını tamamen değiştirebilmelerini sağladı. Bu yeni olanaklar sayesinde CSS Zen Garden, Bu program, CSS'nin gücünü göstermek ve daha fazla geliştiriciyi öğrenmeye teşvik etmek için oluşturuldu.

Web tasarımı ve tarayıcı teknolojisine olan ihtiyaçlarımız değiştikçe CSS de gelişti. CSS düzeninin ve düzene yaklaşımımızın zaman içinde nasıl geliştiğini bu makalede Rachel Andrew tarafından yayınlandı.

1996&#39;dan 2021&#39;e kadar CSS&#39;nin yıllar içinde nasıl geliştiğini gösteren zaman çizelgesi

Düzen: Bugün ve gelecek

Modern CSS'nin son derece güçlü düzen araçları vardır. Düzen için özel sistemlerimiz var ve elimizdeki ürünlere genel olarak göz atacağız. sonraki modüllerde Flexbox ve Grid'i daha ayrıntılı olarak inceleyeceğiz.

display özelliğini anlama

display özelliği iki şey yapar. İlk olarak, kutunun satır içi mi yoksa engelleme olarak mı uygulanacağını belirler.

.my-element {
  display: inline;
}

Satır içi öğeler, cümlelerdeki kelimeler gibi davranır. Satır içi yönde birbirlerinin yanında duruyorlar. <span> ve <strong> gibi öğeler, genellikle <p> (paragraf) gibi öğeler içeren metin parçalarının stilini belirlemek için kullanılır. varsayılan olarak satır içidir. Ayrıca etrafındaki boşlukları da korur.

Bir kutunun farklı boyutlarını ve her boyutlandırma bölümünün başladığı ve bittiği yeri gösteren diyagram

Satır içi öğelerde genişlik ve yükseklik ayarlayamazsınız. Blok düzeyindeki kenar boşluğu ve dolgu, etrafındaki öğeler tarafından yoksayılır.

.my-element {
    display: block;
}

Blok öğeler yan yana durmuyor. Kendisi için yeni bir satır oluşturur. Başka CSS kodu tarafından değiştirilmediği sürece, bir engelleme öğesi satır içi boyutun boyutuna genişler, Böylece, yatay yazma modunda tam genişliği kaplarlar. Blok öğesinin tüm kenarlarındaki kenar boşluğuna uyulur.

.my-element {
    display: flex;
}

display özelliği, bir öğenin alt öğelerinin nasıl davranması gerektiğini de belirler. Örneğin, display özelliğinin display: flex olarak ayarlanması, kutuyu blok düzeyinde kutu haline getirir. ve alt öğelerini esnek öğelere dönüştürür. Bu, hizalamayı, sıralamayı ve akışı kontrol eden esnek özelliklerini etkinleştirir.

Flexbox ve Izgara

Birden çok öğe için düzen kuralları oluşturan iki ana düzen mekanizması vardır: flexbox ve grid. Benzerlikleri vardır ancak farklı düzen sorunlarını çözmek için tasarlanmıştır.

Esnek Kutu

.my-element {
    display: flex;
}

Flexbox, tek boyutlu düzenler için bir düzen mekanizmasıdır. Yatay veya dikey olarak tek bir eksen üzerinde düzen. Esnek kutu, varsayılan olarak öğenin alt öğelerini yan yana hizalar ve satır içi yönde, aynı yükseklikte olacak şekilde blok yönünde uzatın.

Öğeler aynı eksende kalır ve alanı tükendiğinde sarmalanmaz. Bunun yerine, birbirleriyle aynı çizgide ilerlemeye çalışırlar. Bu çalışma biçimi align-items, justify-content ve flex-wrap özellikleri kullanılarak değiştirilebilir.

Flexbox ayrıca alt öğeleri esnek öğelere dönüştürür. Bu, esnek bir kapsayıcı içinde nasıl davrandıklarına ilişkin kurallar yazabileceğiniz anlamına gelir. Tek bir öğede hizalama, sıra ve gerekçeyi değiştirebilirsiniz. flex özelliğini kullanarak daralma veya büyüme şeklini değiştirebilirsiniz.

.my-element div {
    flex: 1 0 auto;
}

flex özelliği flex-grow, flex-shrink ve flex-basis için kullanılan bir kısaltmadır. Yukarıdaki örneği şu şekilde genişletebilirsiniz:

.my-element div {
 flex-grow: 1;
 flex-shrink: 0;
 flex-basis: auto;
}

Geliştiriciler, tarayıcıya düzenin nasıl davranması gerektiği konusunda ipucu vermek için bu alt düzey kuralları sağlar. boyut ve görüntü alanı boyutlarıyla zorlandığında. Bu da onu duyarlı web tasarımı için çok kullanışlı bir mekanizma haline getirir.

Izgara

.my-element {
    display: grid;
}

Izgara, flexbox'a birçok açıdan benzer, ancak tek eksenli düzenler (dikey veya yatay alan) yerine çok eksenli düzenleri kontrol edecek şekilde tasarlanmıştır.

Izgara, display: grid içeren bir öğede düzen kuralları yazmanıza olanak tanır. ve düzen stili için birkaç yeni temel öğe tanıttık. repeat() ve minmax() işlevleri gibi. Kullanışlı bir ızgara birimi, kalan alanın oranı olan fr birimidir. Geleneksel 12 sütunlu ızgaralar oluşturabilirsiniz. 3 CSS özelliği olmak üzere her öğe arasında bir boşluk bırakılmalıdır:

.my-element {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 1rem;
}

Yukarıdaki örnekte tek eksenli bir düzen gösterilmektedir. Flexbox'ın öğeleri çoğunlukla bir grup olarak ele aldığı ızgarası, yerleşim üzerinde iki boyutlu hassas kontrol olanağı sunar. Bu tablodaki ilk öğenin 2 satır ve 3 sütun kullandığını tanımlayabiliriz:

.my-element :first-child {
  grid-row: 1/3;
  grid-column: 1/4;
}

grid-row ve grid-column özellikleri, ızgaradaki ilk öğeye dördüncü sütunun başlangıcına kadar uzanmasını bildirir. sütun, ardından ilk satırdan üçüncü satıra geçiş yapın.

Akış düzeni

Izgara veya flexbox kullanmıyorsanız öğeleriniz normal akışta görüntülenir. Öğelerin normal akışdayken davranışını ve konumunu ayarlamak için kullanabileceğiniz birkaç düzen yöntemi vardır.

Satır içi blok

Çevreleyen öğelerin, satır içi öğedeki blok kenar boşluğuna ve dolguya nasıl uymadığını hatırlıyor musunuz? inline-block ile bunun gerçekleşmesine uyabilirsiniz.

p span {
    display: inline-block;
}

inline-block kullandığınızda, blok düzeyindeki öğelerin bazı özelliklerine sahip bir kutu elde edersiniz. metinle aynı hizada akmaya devam eder.

p span {
    margin-top: 0.5rem;
}

Kayanlar

Bir metin paragrafında yer alan bir resminiz varsa Bu metnin, resmin bir gazetede olduğu gibi etrafına sarmalanması kullanışlı olmaz mıydı? Bunu kayan içeriklerle yapabilirsiniz.

img {
    float: left;
    margin-right: 1em;
}

float özelliği, bir öğeye "kayan" komutu verir belirtilen yöne doğru gider. Bu örnekteki resimde sola kayma talimatı verilmiştir Böylece eşdüzey öğelerin "sarmalanması"na izin verilir. etrafa takıldı. Bir öğeye left, right veya inherit değerini kaydırma talimatı verebilirsiniz.

ziyaret edin.

Çok sütunlu düzen

Öğe listeniz gerçekten uzunsa örneğin dünyadaki tüm ülkelerin bir listesi, kullanıcılar için çok kaydırma ve zaman kaybına neden olabilir. Ayrıca, sayfada fazla boşluk oluşturabilir. CSS çok sütunlu kullanıldığında her iki sorunda da yardımcı olması için sütunu birden fazla sütuna bölebilirsiniz.

<h1>All countries</h1>
<ul class="countries">
  <li>Argentina</li>
  <li>Aland Islands</li>
  <li>Albania</li>
  <li>Algeria</li>
  <li>American Samoa</li>
  <li>Andorra</li>
  …
</ul>
.countries {
    column-count: 2;
    column-gap: 1em;
}

Bu işlem, uzun listeyi otomatik olarak iki sütuna böler ve iki sütun arasına bir boşluk ekler.

.countries {
    width: 100%;
    column-width: 260px;
    column-gap: 1em;
}

İçeriğin bölüneceği sütun sayısını ayarlamak yerine, ayrıca column-width öğesini kullanarak istediğiniz minimum genişliği de tanımlayabilirsiniz. Görüntü alanında daha fazla alan açıldıkça otomatik olarak daha fazla sütun oluşturulur ve alan küçüldükçe, sayısı da azalır. Bu, duyarlı web tasarımı bağlamlarında çok yararlıdır.

Konumlandırma

Son olarak, düzen mekanizmalarına genel bir bakışla ele alacağımız konular, konumlandırmadır. position özelliği, bir öğenin dokümanın normal akışındaki davranışını değiştirir. ve diğer öğelerle nasıl ilişkili olduğunu anlamanızı sağlar. relative, absolute, fixed ve sticky kullanılabilir. Varsayılan değer static.

.my-element {
  position: relative;
  top: 10px;
}

Bu öğe, dokümandaki mevcut konumuna göre 10 piksel aşağı sürüklenir. yerleştirilmiş olarak ayarlayabilirsiniz. Bir öğeye position: relative eklendiğinde, aynı zamanda onu position: absolute içeren tüm alt öğelerin kapsayıcı bloğu haline gelir. Bu, alt öğesinin artık bu belirli öğeye yeniden konumlandırılacağı anlamına gelir. mutlak bir konuma uygulandığında, en üstteki göreli üst öğe yerine.

.my-element {
  position: relative;
  width: 100px;
  height: 100px;
}

.another-element {
    position: absolute;
    bottom: 0;
    right: 0;
    width: 50px;
    height: 50px;
}

position değerini absolute olarak ayarladığınızda, öğeyi mevcut belge akışından çıkarır. Bu durum iki anlama gelir:

  1. Bu öğeyi, en yakın göreli üst öğesinde top, right, bottom ve left kullanarak istediğiniz yere konumlandırabilirsiniz.
  2. Mutlak bir öğenin etrafındaki tüm içerik, bu öğenin kalan alanı doldurmak için yeniden düzenlenir.

position değeri fixed olan bir öğe, absolute ile benzer şekilde davranır. üst öğesi kök <html> öğesi olur. Sabit konum öğeleri, ayarladığınız top, right, bottom ve left değerlerine göre sol üstten sabit kalır.

Sabit, ölçülebilir, sticky kullanarak fixed öğesinin sabit özelliklerini ve relative ürününün daha tahmin edilebilir belge akışını gözeten özelliklerini test edin. Bu değerle, görüntü alanı öğenin dışına kaydırıldıkça belirlediğiniz top, right, bottom ve left değerlerine bağlı kalır.

Özet

CSS düzeniyle ilgili çok fazla seçenek ve esneklik vardır. CSS Flexbox ve Grid'in gücünü daha yakından tanımak için sonraki birkaç modülle devam edin.

Öğrendiklerinizi sınayın

Düzen bilginizi test edin

display özelliği ne yapar?

inline veya block ya da none değerini belirler.
Düzen motorunun, bu kutunun tam genişlikte olup olmadığını bilmesi ve yeni bir satıra ihtiyacı var mı?
Izgara düzeni çerçevesini belirler.
Display özelliği, görüntüyü ızgaraya ayarlayabilir ancak bunun bir düzen çerçevesiyle ilgisi yoktur.
Çocukların nasıl davranması gerektiğini belirler.
Flexbox ve ızgaranın çocukları için fikirleri ve yeni özellikleri var.
Kutunun kaydırılıp kaydırılmayacağını belirler.
Bu, overflow özelliğidir.

Birden çok paragrafı sütunlara ayırmak için hangi CSS özelliğinin uygun olduğu bu görevi nasıl tamamladınız?

display: grid
Tablo, birden çok paragrafı sütunlara yerleştirebilir. Ancak, bu sütunlar, birlikte değil, birbirlerine karşılık gelen kendi sütunları olur.
column-count
Paragraflar, dergilerde veya gazetelerde olduğu gibi, bir sütunun sonundan bir sonraki sütunun başına gider.
display: flex
Esnek satır, birden çok paragrafı sütunlara yerleştirebilir. Ancak, bu sütunların kendi sütunları olması gerekir. Ayrıca, birden diğerine gitmemek gerekli olur.
float
Tekrar deneyin.

Bir bloğun akışının bozulması ne anlama gelir?

Nehir kenarında sıkışmış.
Burada bağlam, coğrafi konum değil CSS'dir.
top veya left konum değeri verilmiş.
Tek başına bu özelliklerin olması, akıştan bir kutu çekmez.
Artık kardeş konumlarına göre konumlandırılmıyor.
Örneğin position: absolute içeren bir kutu, artık içerdiği bloka göre değil, diğer eşdüzey öğelerle sıralamasına göre x ve y koordinatlarıyla konumlandırılıyor.

Flexbox ve Grid, alt öğelerini varsayılan olarak sarmalar mı?

Doğru
flex-wrap: wrap veya repeat(auto-fit, 30ch) ile etkinleştirilmiş olmalıdır.
Yanlış
Flexbox ve Grid, ek stiller uygulanması gereken özel sarmalama özelliklerine sahiptir.