I have the following code below however am confused as to why the div element rightnav
appears below the div element leftnav
if I apply a width property to it. What am I doing wrong or have I misunderstood the use of floats?
CODE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTMl 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="content-language" content="en-us" />
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta name="author" content="" />
<meta name="copyright" content="© 2012" />
<title>DIV example</title>
<base href="" />
<link rel="stylesheet" href="" />
<style type="text/css">
* {
margin: 0px;
padding: 0px;
font-family: Arial, Verdana, sans-serif;
font-size: 100%;
}
#content {
width: 700px;
margin-top: 20px;
margin-right: auto;
margin-bottom: 0px;
margin-left: auto;
}
#leftnav {
float: left;
width: 200px;
border-width: 1px;
border-color: #000000;
border-style: solid;
}
#rightnav {
border-width: 1px;
border-color: #000000;
border-style: solid;
}
</style>
</head>
<body>
<div id="container">
<div id="content">
<div id="leftnav">left nav</div>
<div id="rightnav">right nav</div>
</div>
</div>
</body>
</html>
Output
Now if I amend the code as follows by applying the property width
to the declaration rightnav
, the element appears below leftnav
. I thought that it may have to do with the width of the div element content
however there is sufficient width with the combination of both div elements i.e. 200px + 200px < 700px
CODE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTMl 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="content-language" content="en-us" />
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta name="author" content="" />
<meta name="copyright" content="© 2012" />
<title>DIV example</title>
<base href="" />
<link rel="stylesheet" href="" />
<style type="text/css">
* {
margin: 0px;
padding: 0px;
font-family: Arial, Verdana, sans-serif;
font-size: 100%;
}
#content {
width: 700px;
margin-top: 20px;
margin-right: auto;
margin-bottom: 0px;
margin-left: auto;
}
#leftnav {
float: left;
width: 200px;
border-width: 1px;
border-color: #000000;
border-style: solid;
}
#rightnav {
width: 200px;
border-width: 1px;
border-color: #000000;
border-style: solid;
}
</style>
</head>
<body>
<div id="container">
<div id="content">
<div id="leftnav">left nav</div>
<div id="rightnav">right nav</div>
</div>
</div>
</body>
</html>
OUTPUT
In your first example, #rightnav is not floating, but it stays at the right because it hasn't a clear:left;
rule. See here: http://jsfiddle.net/5sHdg/
In your second example, when you specify a width for #rightnav, the browser has a explicit rule about the div's size, so it renders it as a block element should. But it doesn't float next to #leftnav because it lacks a float:left;
rule. See here: http://jsfiddle.net/Br4Lm/
So rememeber:
div
that needs to be positioned besides another one, thus overriding it's block element appearance.div
element below divs that re floating, be sure to include clear:both;
(left
, right
, or both
);Adding overflow: hidden
to #rightnav
will solve your problem. http://jsfiddle.net/Wexcode/gCVaz/
An explanation of why this works can be found here: http://colinaarts.com/articles/the-magic-of-overflow-hidden
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With