Different background-color for left and right half of div
Add a background image with the two colors to the outer div and allow the browser to scale it (instead of tiling it).
Each color should fill exactly 50% of the width of the image to make sure the colors will never leak on either side.
Maybe even position the image absolutely behind the inner div.
For ideas how to stretch the image, see this question: CSS Background Repeat
The esiest way in 2021:
.container {
background: linear-gradient(
to right,
red 0%,
red 50%,
black 50%,
black 100%
);
}
Use the ::after
and ::before
psuedo elements. That way you can even get three colors and do the Italian flag!
div {
height:300px;
width:100%;
outline:thin solid black;
position:relative;
background:white;
}
div::after, div::before {
height:300px;
content:' ';
position: absolute;
top: 0;
width: 33%;
}
div::after {
right: 0;
background-color: red;
}
div::before {
left: 0;
background-color: green;
}
Here's a fiddle: http://jsfiddle.net/g8p9pn1v/
And its results:
How about create two divs bg-left and bg-right, with a position absolute inside a full width container. Since they are absolutely positioned, you can then layer content on top of them. So for example, using bootstrap markup:
<div class="fullwidth">
<div class="bg-left"></div>
<div class="bg-right"></div>
<div class="container">
<div class="row">
<div class="col-xs-6">
Insert left side content here...
</div>
<div class="col-xs-6">
Insert right side content here...
</div>
</div>
</div>
</div>
Then your css:
.fullwidth {
position: relative;
width: 100%;
}
.bg-left {
background: #000;
left: 0;
top: 0;
bottom: 0;
position: absolute;
width: 50%;
}
.bg-right {
right: 0;
top: 0;
bottom: 0;
background: #ddd;
position: absolute;
width: 50%;
}