CSS: Pencerenin genişliğinin% 50'si kadar bir arka plan rengi ayarlayın


155

Bir sayfada "ikiye bölünmüş" bir arka plan elde etmeye çalışmak; Görünüşte bir varsayılan ayarı yapılır, karşılıklı taraflarda iki renk ( background-colorüzerine bodydaha sonra, etiketin a üzerine başka uygulayarakdiv pencerenin tüm genişliğini esneyen).

Bir çözüm buldum ama maalesef background-sizebu proje için bir zorunluluk olan IE7 / 8'de özellik çalışmıyor -

body { background: #fff; }
#wrapper {
    background: url(1px.png) repeat-y;
    background-size: 50% auto;
    width: 100%;
}

Sadece düz renkler olduğundan, sadece normal background-colorözelliği kullanmanın bir yolu olabilir mi?

Yanıtlar:


280

Eski Tarayıcı Desteği

Daha eski tarayıcı desteği bir zorunluluksa, birden fazla arka plan veya degradeyle gidemezseniz, muhtemelen yedek bir divöğede böyle bir şey yapmak isteyeceksiniz :

#background {
    position: fixed;
    top: 0;
    left: 0;
    width: 50%;
    height: 100%;
    background-color: pink; 
}

Örnek: http://jsfiddle.net/PLfLW/1704/

Çözüm, ekranın yarısını dolduran ekstra sabit bir div kullanır. Düzeltildiğinden, kullanıcılarınız kaydırıldığında bile yerinde kalacaktır. Diğer öğelerinizin arka plan div'in üstünde olduğundan emin olmak için daha sonra bazı z dizinleriyle uğraşmanız gerekebilir, ancak çok karmaşık olmamalıdır.

Sorun yaşarsanız, içeriğinizin geri kalanının arka plan öğesinden daha yüksek bir z-endeksine sahip olduğundan emin olun ve gitmek için iyi olmalısınız.


Modern Tarayıcılar

Daha yeni tarayıcılar tek endişenizse, kullanabileceğiniz birkaç yöntem daha vardır:

Doğrusal Degrade:

Bu kesinlikle en kolay çözümdür. Çeşitli efektler için gövdenin background özelliğinde doğrusal bir gradyan kullanabilirsiniz.

body {
    height: 100%;
    background: linear-gradient(90deg, #FFC0CB 50%, #00FFFF 50%);
}

Bu, her renk için% 50'de kesin bir kesintiye neden olur, bu nedenle adından da anlaşılacağı gibi bir "gradyan" yoktur. Elde edebileceğiniz farklı efektleri görmek için stilin "% 50" parçasını denemeyi deneyin.

Örnek: http://jsfiddle.net/v14m59pq/2/

Arka plan boyutuna sahip birden çok Arkaplan:

Öğeye arka plan rengi htmluygulayabilir ve sonra öğeye arka plan görüntüsü uygulayabilir bodyve background-sizeözelliği sayfa genişliğinin% 50'sine ayarlamak için bu özelliği kullanabilirsiniz . Bu benzer bir etkiyle sonuçlanır, ancak gerçekten sadece bir veya iki görüntü kullanıyorsanız gradyanlar üzerinde kullanılır.

html {
    height: 100%;
    background-color: cyan;
}

body {
    height: 100%;
    background-image: url('http://i.imgur.com/9HMnxKs.png');
    background-repeat: repeat-y;
    background-size: 50% auto;
}

Örnek: http://jsfiddle.net/6vhshyxg/2/


EKSTRA NOT: Son örneklerde hem htmlve bodyöğelerinin de ayarlandığına dikkat edin height: 100%. Bu, içeriğiniz sayfadan daha küçük olsa bile, arka planın en azından kullanıcının görünüm alanının yüksekliğinde olmasını sağlamak içindir. Açık yükseklik olmadan, arka plan efekti yalnızca sayfa içeriğinize kadar düşer. Aynı zamanda genel olarak iyi bir uygulamadır.


Teşekkürler, bu tablodaki bu etkiyi elde etmeme yardımcı oldu: jsfiddle.net/c9kp2pde

11
linear-gradientSert kesme ayrıca pikseller için çalışır:background: linear-gradient(90deg, #FFC0CB 225px, #00FFFF 0, #00FFFF 100%);
Jacob van LINGEN

1
% 50% 50 ile çalışıyor, ancak% 25% 75 ile değiştirdiğimde çalışmıyor
datdinhquoc

5
@datdinhquoc Deneyin background: linear-gradient(90deg, #FFC0CB 25%, #00FFFF 0);.
justisb

55

"İkiye bölünmüş" arka plan elde etmek için basit bir çözüm:

background: linear-gradient(to left, #ff0000 50%, #0000ff 50%);

Dereceleri yön olarak da kullanabilirsiniz

background: linear-gradient(80deg, #ff0000 50%, #0000ff 50%);

14
Bu harika, ama bir gradyan. Zor bir ayrım yapmak mümkün mü?
John Giotta

23

İkinci rengi% 0'a koyarak doğrusal gradyan yerine sert bir ayrım yapabilirsiniz

Örneğin,

Gradyan - background: linear-gradient(80deg, #ff0000 20%, #0000ff 80%);

Zor ayrım - background: linear-gradient(80deg, #ff0000 20%, #0000ff 0%);


17

Bu, zaten kabul edilmiş bir cevabı olan çok eski bir soru, ancak dört yıl önce gönderilmiş olsaydı bu cevabın seçileceğine inanıyorum.

Bunu tamamen CSS ile ve HİÇBİR EKSTRA DOM ELEMENTS ile çözdüm! Bu, iki rengin tamamen, yalnızca BİR ELEMANIN arka plan renkleri olduğu, ikisinin arka plan rengi olduğu anlamına gelir.

Bir degrade kullandım ve renk duraklarını birbirine çok yakın ayarladığım için renkler farklı ve harmanlanmıyor gibi görünüyor.

Yerel sözdizimindeki gradyan şöyledir:

background: repeating-linear-gradient(#74ABDD, #74ABDD 49.9%, #498DCB 50.1%, #498DCB 100%);

Renk #74ABDDbaşlıyor 0%ve hala #74ABDDaçık49.9% .

Sonra, degradeyi içindeki bir sonraki renge geçmeye zorlarım 0.2% elemanların yüksekliği iki renk arasında çok sağlam bir çizgi oluşturacak şekilde oluşturuyorum.

İşte sonuç:

Arka Plan Rengini Böl

Ve işte benim JSFiddle'ım!

İyi eğlenceler!


Hatta bu konuda piksel ile gidebilirsiniz. background: repeating-linear-gradient(var(--grayLight), var(--grayLight) 430px, rgba(0,0,0,0) 201px, rgba(0,0,0,0) 100%);
Philip

12

bu saf css ile çalışmalıdır.

background: -webkit-gradient(linear, left top, right top, color-stop(50%,#141414), color-stop(50%,#333), color-stop(0%,#888));

yalnızca Chrome'da test edilmiştir.


9

IE8 + 'ı desteklemek zorunda olan geçmiş bir projede bunu veri-url formatında kodlanmış bir görüntü kullanarak başardım.

Görüntü 2800x1 piksel, görüntünün yarısı beyaz ve yarı şeffaftı. Oldukça iyi çalıştı.

body {
    /* 50% right white */
    background: red url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACvAAAAABAQAAAAAqT0YHAAAAAnRSTlMAAHaTzTgAAAAOSURBVHgBYxhi4P/QAgDwrK5SDPAOUwAAAABJRU5ErkJggg==) center top repeat-y;

   /* 50% left white */
   background: red url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACvAAAAABAQAAAAAqT0YHAAAAAnRSTlMAAHaTzTgAAAAPSURBVHgBY/g/tADD0AIAIROuUgYu7kEAAAAASUVORK5CYII=) center top repeat-y;
}

Burada çalıştığını görebilirsiniz JsFiddle . Umarım birine yardımcı olabilir;)


4

Kullandım :afterve tüm büyük tarayıcılarda çalışıyor. lütfen bağlantıyı kontrol edin. sadece mutlak pozisyonda olduğu gibi z-endeksi için dikkatli olmanız gerekir.

<div class="splitBg">
    <div style="max-width:960px; margin:0 auto; padding:0 15px; box-sizing:border-box;">
        <div style="float:left; width:50%; position:relative; z-index:10;">
            Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.
        </div>
        <div style="float:left; width:50%; position:relative; z-index:10;">
            Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, 
        </div>
        <div style="clear:both;"></div>
    </div>
</div>`
css

    .splitBg{
        background-color:#666;
        position:relative;
        overflow:hidden;
        }
    .splitBg:after{
        width:50%;
        position:absolute;
        right:0;
        top:0;
        content:"";
        display:block;
        height:100%;
        background-color:#06F;
        z-index:1;
        }

keman bağı


3

Bunu yapmak için :aftersözde seçici kullanabilirsiniz, ancak bu seçicinin geriye dönük uyumluluğundan emin değilim.

body {
    background: #000000
}
body:after {
    content:'';
    position: fixed;
    height: 100%;
    width: 50%;
    left: 50%;
    background: #116699
}

Bunu bir sayfa arka planında iki farklı degradeler için kullandım.


1
Bu teknik tüm tarayıcılarda desteklenir, harika bir çözüm! Sabit efekti istemiyorsanız, göreceli bir üst öğeyle mutlak bir konum da kullanabilirsiniz.
Adam T. Smith

3

Resminizde kullanın bg

Dikey bölme

background-size: 50% 100%

Yatay bölme

background-size: 100% 50%

Misal

.class {
   background-image: url("");
   background-color: #fff;
   background-repeat: no-repeat;
   background-size: 50% 100%;
}

bu arka planı nasıl merkeze alabilirim
Vaibhav Ahalpara

1
deneyin: background-position: center center
Jan Ranostaj

3

Div'inize tek bir satır girmek için sorununuzu uygulamanın yollarından biri:

background-image: linear-gradient(90deg, black 50%, blue 50%);

İşte bir gösteri kodu ve daha fazla seçenek (yatay, çapraz vb.), Canlı görmek için "Kod snippet'ini çalıştır" ı tıklayabilirsiniz.

.abWhiteAndBlack
{
  background-image: linear-gradient(90deg, black 50%, blue 50%);
  height: 300px;
  width: 300px;
  margin-bottom: 80px;
}

.abWhiteAndBlack2
{
  background-image: linear-gradient(180deg, black 50%, blue 50%);
  height: 300px;
  width: 300px;
  margin-bottom: 80px;
}

.abWhiteAndBlack3
{
  background-image: linear-gradient(45deg, black 50%, blue 50%);
  height: 300px;
  width: 300px;
  margin-bottom: 80px;
}
Vertical:

  <div class="abWhiteAndBlack">
  </div>


Horizonal:

  <div class="abWhiteAndBlack2">
    
  </div>


Diagonal:

  <div class="abWhiteAndBlack3">
    
  </div>


2

Kurşun geçirmez ve anlamsal olarak en doğru seçenek, sabit konumlu sözde eleman ( ::afterveya ::before) kullanmak olacaktır. Bu tekniği kullanarak z-indexkabın içindeki elemanlara ayarlamayı unutmayın . Ayrıca, content:""sözde sözde eleman için bu kurala ihtiyaç vardır, aksi takdirde işlenmez.

#container {...}

#content::before {
    content:"";
    background-color: #999;
    height: 100%;
    left: 0px;
    position: fixed;
    top: 0px;    
    width: 50%; 
    z-index: 1;
}


#content * {
  position: relative;
  z-index:2;
}

Canlı örnek: https://jsfiddle.net/xraymutation/pwz7t6we/16/


1

.background{
 background: -webkit-linear-gradient(top, #2897e0 40%, #F1F1F1 40%);
 height:200px;
 
}

.background2{
  background: -webkit-linear-gradient(right, #2897e0 50%, #28e09c 50%);

 height:200px;
 
}
<html>
<body class="one">

<div class="background">
</div>
<div class="background2">
</div>
</body>
</html>


0

Bu, çoğu tarayıcıda çalışacak bir örnektir.
Temel olarak, birincisi% 0'dan başlayan ve% 50 ile biten ve ikincisi% 51'den başlayan ve% 100 ile biten iki arka plan rengi kullanırsınız.

Yatay yönlendirme kullanıyorum:

background: #000000;
background: -moz-linear-gradient(left,  #000000 0%, #000000 50%, #ffffff 51%, #ffffff 100%);
background: -webkit-gradient(linear, left top, right top, color-stop(0%,#000000), color-stop(50%,#000000), color-stop(51%,#ffffff), color-stop(100%,#ffffff));
background: -webkit-linear-gradient(left,  #000000 0%,#000000 50%,#ffffff 51%,#ffffff 100%);
background: -o-linear-gradient(left,  #000000 0%,#000000 50%,#ffffff 51%,#ffffff 100%);
background: -ms-linear-gradient(left,  #000000 0%,#000000 50%,#ffffff 51%,#ffffff 100%);
background: linear-gradient(to right,  #000000 0%,#000000 50%,#ffffff 51%,#ffffff 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#ffffff',GradientType=1 );

Farklı ayarlamalar için http://www.colorzilla.com/gradient-editor/ adresini kullanabilirsiniz.


0

linear-gradient% 50 yükseklikte kullanmak istiyorsanız :

background: linear-gradient(to bottom, red 0%, blue 100%) no-repeat;
background-size: calc(100%) calc(50%);
background-position: top;
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.