试图在“一分为二”的页面上实现背景;两种相对的颜色(似乎是通过在body标签上设置默认的背景色来完成的,然后将另一种颜色应用到扩展整个窗口宽度的div上)。

我确实提出了一个解决方案,但不幸的是,背景大小的属性不工作在IE7/8,这是一个必须为这个项目-

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

既然它只是关于纯色,也许有一种方法只使用常规的背景颜色属性?


旧浏览器支持

如果旧的浏览器支持是必须的,所以你不能使用多个背景或渐变,你可能会想在一个空闲的div元素上做这样的事情:

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

例如:http://jsfiddle.net/PLfLW/1704/

解决方案使用了一个额外的固定div,它占据了屏幕的一半。由于它是固定的,所以即使用户滚动,它也会保持在原位。稍后您可能需要修改一些z索引,以确保其他元素位于背景div之上,但不应该太复杂。

如果你有问题,只要确保你的其余内容的z指数高于背景元素,你就应该很好了。


现代浏览器

如果你只关心更新的浏览器,你可以使用其他一些方法:

线性梯度:

这绝对是最简单的解决方案。您可以在主体的背景属性中使用线性梯度来获得各种效果。

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

这就导致了每种颜色的50%的硬截断,所以没有名字所暗示的“渐变”。试着尝试“50%”的风格,看看你能达到的不同效果。

例如:http://jsfiddle.net/v14m59pq/2/

使用background-size的多个背景:

您可以将背景颜色应用到html元素,然后将背景图像应用到body元素,并使用background-size属性将其设置为页面宽度的50%。这将产生类似的效果,尽管只有当你碰巧使用一两个图像时,才会真正用于渐变。

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

例如:http://jsfiddle.net/6vhshyxg/2/


注意:在后面的例子中,html和body元素都被设置为height: 100%。这是为了确保即使你的内容比页面小,背景也至少是用户视口的高度。如果没有明确的高度,背景效果只会和你的页面内容一样低。一般来说,这也是一种很好的练习。


这应该与纯css工作。

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

仅在Chrome中测试。


实现“一分为二”背景的简单解决方案:

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

你也可以用角度来表示方向

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

在过去的一个必须支持IE8+的项目中,我使用data-url格式编码的图像实现了这一点。

图像是2800x1px,一半白色,一半透明。 工作得很好。

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

你可以看到它在JsFiddle中工作。 希望它能帮助到别人;)


这是一个可以在大多数浏览器上运行的示例。 基本上你使用两种背景颜色,第一种颜色从0%开始,以50%结束,第二种颜色从51%开始,以100%结束

我使用水平方向:

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

要进行不同的调整,您可以使用http://www.colorzilla.com/gradient-editor/


你可以使用:after伪选择器来实现这一点,尽管我不确定该选择器的向后兼容性。

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

我用它在页面背景上有两种不同的渐变。


使用在你的图像bg

垂直分割

background-size: 50% 100%

水平中分面

background-size: 100% 50%

例子

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

我用过:after,它在所有主流浏览器中都能运行。请查看链接。只需要注意z指数,因为后面有绝对位置。

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

小提琴的链接


所以,这是一个非常古老的问题,已经有了一个公认的答案,但我相信,如果这个答案是在四年前发布的,它就会被选中。

我完全用CSS解决了这个问题,没有额外的DOM元素!这意味着这两种颜色是纯粹的,只是一个元素的背景色,而不是两个元素的背景色。

我使用了渐变,因为我把颜色设置得非常接近,所以看起来好像颜色是不同的,它们没有混合。

下面是原生语法中的梯度:

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

颜色#74ABDD开始为0%,仍然为#74ABDD为49.9%。

然后,我强制渐变到元素高度的0.2%以内的下一个颜色,在两个颜色之间创建一个看起来非常坚实的线。

结果如下:

这是我的JSFiddle!

玩得开心!


你可以通过将第二种颜色设置为0%来实现线性渐变

例如,

梯度:梯度(80deg, ff0000 20%, 0000ff 80%);

硬区分-背景:线性渐变(80度,#ff0000 20%, #0000ff 0%);


实现你的问题的一种方法是添加一行到你的div的css:

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

这里是一个演示代码和更多选项(水平,对角线等),你可以点击“运行代码片段”来查看它的现场。

.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>


最可靠且语义正确的选项是使用定位固定的伪元素(::after或::before)。使用这种技术时,不要忘记为容器内的元素设置z-index。还要注意,伪元素的content:""规则是需要的,否则它不会被渲染。

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

生活例子: https://jsfiddle.net/xraymutation/pwz7t6we/16/


.background { background: -webkit-linear-gradient(top, #2897e0 40%, #F1F1F1 40%); 身高:200 px; } .background2 { 背景:-webkit-linear-gradient(右,#2897e0 50%, #28e09c 50%); 身高:200 px; } < html > <身体类=“1”> < div class = "背景" > < / div > < div class = " background2”> < / div > < /身体> < / html >


如果你想使用50%高度的线性梯度:

background: linear-gradient(to bottom, red 0%, blue 100%) no-repeat;
background-size: calc(100%) calc(50%);
background-position: top;