position:relative
By Stephen Bucaro
Default Positioning
One of the most important CSS webpage layout concepts to understand is how to position
webpage elements. Every element on a webpage, be it an image, a drop-down list, or just a
paragraph of text, is actually a rectangular box, referred to as an element. When a
Web browser loads an html file, it parses the html code from left-to-right top-to-bottom, just
as we would read it and, by default, it renders the webpage, by placing elements on the webpage
from left-to-right and from top-to-bottom. You can think of this as the webpage elements
as "flowing" into position. As the elements flow onto the webpage, they line themselves up
along a "baseline".
Webpage elements that flow into position from left-to-right are called inline elements.
If there isn't enough room to the right to place an element, the browser places it on the next line.
Certain elements, like paragraphs <p>, divisions <div>, and horizontal rules <hr />,
called block elements, do not normally flow on the webpage from left-to-right. Block
elements, by default, start on a new line, causes the next element in the flow to start a new line.
The style rule position is used to override this default behavior. The value of the
position element may be set to relative, absolute, or fixed. In this article, I'll
describe the effect of setting the style rule position: relative.
Shown below is the code for a webpage containing three span elements and how
they would be rendered by default in the browser.
<html>
<head>
<style type="text/css">
.myBox
{
background-color:crimson;
border-style:solid;
border-width:1px;
padding:4px;
}
</style>
</head>
<body>
<span class="myBox">Element 1</span>
<span class="myBox">Element 2</span>
<span class="myBox">Element 3</span>
</body>
</html>
Relative Positioning
When you specify an element's position:relative you can relocate the element relative
to where it would be located in the normal flow. You can use the left and⁄or
top property to offset the element from where it would be located in the normal flow.
Shown below is the code with the CSS rule "position:relative" specified and the left
property set to 20 pixels and the top property set to 20 pixels.
<html>
<head>
<style type="text/css">
.myBox
{
background-color:crimson;
border-style:solid;
border-width:1px;
padding:4px;
width:80px;
}
#myRel
{
position:relative;
left:20px;
top:20px;
background-color:crimson;
border-style:solid;
border-width:1px;
padding:4px;
width:80px;
}
</style>
</head>
<body>
<span class="myBox">Element 1</span>
<span id="myRel">Element 2</span>
<span class="myBox">Element 3</span>
</body>
</html>
Note that Element 2 is relative positioned 20 pixels to the right and 20 pixels down from where
it would be located in the normal flow.
Note that the values of left and top are offsets relative to where the
element would normally appear, NOT offsets with respect to another element. Other elements
are not affected by the offsets, so the relative positioned element could overlap elements that
are in normal flow.
More CSS Quick Reference: • How to Define and Apply a Style Class • position:fixed • Set a Background Image • CSS Units of Measurement • Set a Background Image's Position • Use an External Style Sheet • Set an Element's Overflow • Use an Embedded Style Sheet • Use Inline Style • Context selectors
|