CSS: Ustaw kolor tła, który stanowi 50% szerokości okna

Próbuje uzyskać tło na stronie, które jest "podzielone na dwa"; dwa kolory po przeciwnych stronach (pozornie robi się to przez ustawienie domyślnego background-color na znaczniku body, a następnie zastosowanie innego na div, który rozciąga się na całą szerokość okna).

Wymyśliłem rozwiązanie, ale niestety właściwość background-size nie działa w IE7 / 8, co jest koniecznością dla tego projektu -

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

Ponieważ chodzi tylko o jednolite kolory, może istnieje sposób na użycie tylko zwykłego background-color własność?

Author: tw16, 2011-12-17

12 answers

Obsługa Starszych Przeglądarek

Jeśli obsługa starszych przeglądarek jest koniecznością, więc nie możesz korzystać z wielu tła lub gradientów, prawdopodobnie będziesz chciał zrobić coś takiego na zapasowym elemencie div:

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

Przykład: http://jsfiddle.net/PLfLW/1704/

Rozwiązanie wykorzystuje dodatkowy stały div, który wypełnia połowę ekranu. Ponieważ jest naprawiony, pozostanie na swoim miejscu nawet po przewinięciu przez użytkowników. Być może będziesz musiał później pogrywać z niektórymi indeksami z, aby upewnij się, że pozostałe elementy znajdują się nad tłem, ale nie powinny być zbyt złożone.

Jeśli masz problemy, upewnij się, że reszta treści ma indeks z wyższy niż element tła i powinieneś być gotowy.


Nowoczesne Przeglądarki

Jeśli nowsze przeglądarki są twoim jedynym zmartwieniem, istnieje kilka innych metod, których możesz użyć:

Gradient Liniowy:

To zdecydowanie najprostsze rozwiązanie. Możesz użyć liniowy-gradient w tle właściwości ciała dla różnych efektów.
body {
    height: 100%;
    background: linear-gradient(90deg, #FFC0CB 50%, #00FFFF 50%);
}

Powoduje to twarde odcięcie przy 50% dla każdego koloru, więc nie ma "gradientu", jak sama nazwa wskazuje. Spróbuj poeksperymentować z" 50% " częścią stylu, aby zobaczyć różne efekty, które możesz osiągnąć.

Przykład: http://jsfiddle.net/v14m59pq/2/

Wiele tła z background-size:

Możesz zastosować kolor tła do elementu html , następnie zastosuj obrazek tła do elementu body i użyj właściwości background-size, aby ustawić go na 50% szerokości strony. Daje to podobny efekt, choć w rzeczywistości byłby używany tylko nad gradientami, jeśli akurat używasz obrazu lub dwóch.

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;
}

Przykład: http://jsfiddle.net/6vhshyxg/2/


Uwaga dodatkowa: zauważ, że zarówno elementy html, jak i body są ustawione na height: 100% w tych ostatnich przykładach. Ma to na celu upewnienie się, że nawet jeśli Twoje treści są mniejsze niż strona, tło będzie co najmniej wysokością widoku użytkownika. Bez wyraźnej wysokości efekt tła spadnie tylko do zawartości strony. To również dobra praktyka w ogóle.

 182
Author: justisb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-03 18:25:23

Proste rozwiązanie do osiągnięcia tła "split in two":

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

Możesz również używać stopni jako kierunku

background: linear-gradient(80deg, #ff0000 50%, #0000ff 50%);
 32
Author: juniperi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-12 02:20:51

To powinno działać z czystym css.

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

Testowane tylko w Chrome.

 12
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-19 11:50:51

W poprzednim projekcie, który miał obsługiwać IE8+ i osiągnąłem to za pomocą obrazu zakodowanego w formacie data-url.

Obraz miał wymiary 2800x1px, połowa obrazu była biała, a połowa przezroczysta. Zadziałało całkiem nieźle.

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;
}

Możesz zobaczyć to działa tutaj JsFiddle . Mam nadzieję, że komuś pomoże;)

 8
Author: Putuko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-26 08:08:33

Więc to jest strasznie stare pytanie, które ma już zaakceptowaną odpowiedź, ale wierzę, że ta odpowiedź zostałaby wybrana, gdyby została opublikowana cztery lata temu.

Rozwiązałem to czysto CSS i bez dodatkowych elementów DOM! Oznacza to, że dwa kolory są czysto, tylko kolory tła jednego elementu, a nie kolor tła dwóch.

Użyłem gradientu i ponieważ ustawiłem kolor tak blisko siebie, wygląda to tak, jakby kolory były różne i że nie mieszają się.

Oto gradient w natywnej składni:

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

Kolor #74ABDD zaczyna się od 0% i nadal jest #74ABDD na 49.9%.

Następnie wymuszam przesunięcie gradientu do następnego koloru w obrębie 0.2% wysokości elementów, tworząc coś, co wydaje się być bardzo solidną linią między tymi dwoma kolorami.

Oto wynik:

Podziel Kolor Tła

Oraz Oto Mój JSFiddle!

Baw się dobrze!
 8
Author: WebWanderer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-12 16:47:39

Można dokonać twardego rozróżnienia zamiast gradientu liniowego, umieszczając drugi kolor na 0%

Na przykład,

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

Trudne rozróżnienie - background: linear-gradient(80deg, #ff0000 20%, #0000ff 0%);

 7
Author: akash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-15 17:47:57

Użyłem :after i działa we wszystkich głównych przeglądarkach. proszę sprawdzić link. wystarczy uważać na indeks z, ponieważ PO ma pozycję absolutną.

<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;
        }

Fiddle link

 4
Author: user1162084,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-16 17:55:58

Możesz użyć :after pseudo-selektora, aby to osiągnąć, choć nie jestem pewien wstecznej kompatybilności tego selektora.

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

Użyłem tego, aby mieć dwa różne gradienty na tle strony.

 2
Author: Awaterujin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-04 19:16:01

Najbardziej kuloodporną i poprawną semantycznie opcją byłoby użycie pseudoelementu o stałej pozycji (:after lub :before). Używając tej techniki nie zapomnij ustawić z-index na elementach wewnątrz kontenera. Należy również pamiętać, że reguła content:"" dla pseudo-elementu jest potrzebna, w przeciwnym razie nie zostanie renderowana.

#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;
}

Przykład na żywo: https://jsfiddle.net/xraymutation/pwz7t6we/16/

 2
Author: Arkadiusz Lendzian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-05 13:07:30

Użyj na swoim obrazku bg

Podział pionowy

background-size: 50% 100%

Podział poziomy

background-size: 100% 50%

Przykład

.class {
   background-image: url("");
   background-color: #fff;
   background-repeat: no-repeat;
   background-size: 50% 100%;
}
 1
Author: Jan Ranostaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-15 21:28:43

Jeden ze sposobów implementacji problemu, aby wprowadzić jedną linię wewnątrz div:

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

Tutaj jest kod demonstracyjny i więcej opcji (poziome, ukośne, itp.), możesz kliknąć "Uruchom fragment kodu", aby zobaczyć go na żywo.

.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>
 1
Author: Nadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-06 11:56:53

Jest to przykład, który będzie działał na większości przeglądarek.
Zasadniczo używasz dwóch kolorów tła, pierwszy zaczyna się od 0% i kończy się na 50%, a drugi zaczyna się od 51% i kończy się na 100%

Używam orientacji poziomej:

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 );

Do różnych korekt można użyć http://www.colorzilla.com/gradient-editor/

 0
Author: Sorin Haidau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-28 08:17:23