Let us assume, I have two DIV elements with positions set to absolute and relative.
<head> <style> * { margin: 5px; } div { background-color: #ccc; width: 100px; height: 100px; padding: 20px; border: solid 1px #000; } .div1 { position: absolute; top: 0; left: 0; } .div2 { color: #fff; position: relative; top: 70px; left: 20px; } </style> </head> <body> <div class="div1"> content inside 1st DIV element </div> <div class="div2">content inside 2nd DIV element</div> </body>
See the output (image).
image
(2nd DIV overlapping the 1st)
What is happening here?
The 2nd DIV clearly overlaps the 1st DIV. This is normal. As I have defined two dimensions, that is, top and left property (or, the x-axis and y-axis).
Now, I want to prevent the 2nd DIV from overlapping the first one. The 1st DIV should appear on top. There is a 3rd dimension or the z-axis that defines the order in which the elements will be placed.
Prevent Overlapping Using z-index Property
Here’s how the z-index property can prevent the 2nd DIV from overlapping the 1st.
There are two ways I can use the z-index property in this case.
1st method, I’ll assign z-index property to the first DIV with a value as "1".
<head> <style> * { margin: 5px; font: 18px Calibri; } div { background-color: #ccc; width: 100px; height: 100px; padding: 20px; border: solid 1px #000; } .div1 { position: absolute; top: 50px; left: 0; z-index: 1; /* set value to 0 and see what happens */ } .div2 { position: relative; color: #fff; top: 110px; left: 20px; } </style> </head> <body> <div class="div1"> content inside 1st DIV element </div> <div class="div2">content inside 2nd DIV element</div> </body>
2nd method, I’ll assign z-index property of the second DIV with a value as "-1". The z-index of the 1st DIV is default (auto or zero). Since I am not defining any z-index to the 1st element.
<head> <style> div { background-color: #ccc; width: 100px; height: 100px; padding: 20px; border: solid 1px #000; } .div1 { position: absolute; top: 0; left: 0; } .div2 { color: #fff; position: relative; top: 70px; left: 20px; z-index: -1; } </style> </head> <body> <div class="div1"> content inside 1st DIV element </div> <div class="div2">content inside 2nd DIV element</div> </body>
Prevent text Overlapping using white-space: normal
Here’s another scenario. Its slightly different from the above example that I have explained using z-index.
Let us assume I have two <div> elements, floating left. Both elements have fixed a width (the height is auto).
It also has white-space property with nowrap. This results in overlapping of texts inside the elements.
<head>
<style>
div {
background-color: #ccc;
width: 100px;
padding: 10px;
white-space: nowrap;
float: left;
margin: 5px;
}
.div2 {
color: #fff;
}
</style>
</head>
<body>
<div class="div1">
Content inside 1st DIV element and its long sentence.
</div>
<div class="div2">content inside 2nd DIV element</div>
</body>
See the output. The texts inside the DIV element are overlapping.
image
Solution: Change white-space property to normal. Like this,
div {
background-color: #ccc;
width: 100px;
padding: 2px;
white-space: normal;
float: left;
}