[CSS] Paragraph 'block height' hurting my brain!

Soldato
Joined
16 Nov 2003
Posts
9,682
Location
On the pale blue dot
I'm putting together a basic site for a friend's company, a few static pages formatted using CSS. The layout is pretty much done and works on both IE and Firefox except for one thing.

I have a 'body' div that has a padding of 20px, in IE this looks uniform but in Firefox the top and bottom are a bit too large as it seems to adding the paragraph block height to the padding. No problem he says, get rid of the top and bottom padding: this makes the text touch the top edge of the body. Ahhh! Any ideas?

Site: http://www.sidtheturtle.co.uk/ocuk/cssissue/

CSS:
Code:
div.header
{
	background: #FFFFFF;
	background-image: url(logo.gif);
	background-repeat: no-repeat;
	background-position: center top;
	border: 1px solid #593B53;
	height: 200px;
	margin-top: 30px;
	margin-left: auto;
	margin-right: auto;
	margin-bottom: 0;
	padding: 20px;
	padding-top: 0;
	padding-bottom: 0;
	width: 850px;
}

div.navigator
{
	border: 0;
	margin: 0;
	margin-left: auto;
	margin-right: auto;
	padding: 0;
	width: 892px;
}

div.body
{
	background: #FFFFFF;
	border: 1px solid #593B53;
	border-top:0;
	padding: 20px;
	margin: 0;
	margin-left: auto;
	margin-right: auto;
	width: 850px;
}

div.footer
{
	background: #FFFFFF;
	border: 1px solid #593B53;
	font-size: smaller;
	margin-top: 5px;
	margin-left: auto;
	margin-right: auto;
	margin-bottom: 30px;
	padding: 5px;
	padding-left: 20px;
	padding-right: 20px;
	text-align: center;
	width: 850px;
}

#navlist
{
	border: 0;
	border-bottom: 1px solid #593B53;
	font-weight: bold;
	margin-top: 10px;
	margin-bottom: 0;
	margin-left:auto;
	margin-right:auto;
	padding: 0;
	padding-bottom: 3px;
	text-align: center;
}

#navlist li
{	display: inline;
	list-style: none;
	margin: 0;
}

#navlist li a
{
	background: #8E6B8B;
	border: 1px solid #593B53;
	border-bottom: none;
	padding: 10px;
	padding-bottom: 3px;
	padding-top: 5px;
	text-decoration: none;
}

#navlist li a:link,
#navlist li a:visited
{
	color: #FFFFFF;
}

#navlist li a:hover
{
	background: #593B53;
}

#navlist li a#current
{
	background: white;
	border-bottom: 1px solid white;
	color: #000000;
}

body
{
	background: #8E6B8B;
	font-color: #000000;
	font-family: arial, sans-serif;
	font-size: medium;
	margin: 0;
	text-align: justify;
}

img.amphlettchatterton
{
	border: 1px solid #593B53;
	float:right;
	margin-left: 20px;
}

img.contactmap
{
	border: 1px solid #593B53;
	float:left;
	margin-right: 20px;
}

HTML:
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>
	<title>Placeholder</title>
	<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
<div class="header">
</div>
<div class="navigator">
	<ul id="navlist">
		<li id="active"><a id="current" href="index.html">Home</a></li>
		<li><a href="#">Link 2</a></li>
		<li><a href="#">Link 3</a></li>
		<li><a href="#">Link 4</a></li>
		<li><a href="#">Link 5</a></li>
		<li><a href="#">Link 6</a></li>
		<li><a href="'">Link 7</a></li>
	</ul>
</div>
<div class="body">
	<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam eu enim. Morbi viverra risus non ante. Curabitur euismod consequat lacus. Quisque eget arcu et odio luctus sodales. Praesent sollicitudin sapien sed est. Suspendisse elit risus, eleifend a, consectetuer sit amet, suscipit vitae, tortor. Nullam varius tellus. Etiam pharetra nisl elementum augue. Praesent congue ante. Nam mauris. Etiam tempor. Integer ut lacus in risus laoreet condimentum. Praesent volutpat.</p>
	<p>Suspendisse libero neque, vehicula dignissim, commodo euismod, elementum vel, diam. Vivamus eu magna. Pellentesque tempor purus a nisi. Etiam eget erat a dui pellentesque dapibus. Fusce placerat ultricies nulla. Nunc ante elit, ultrices sed, fermentum ultricies, semper id, quam. Suspendisse potenti. Etiam lacus nibh, bibendum nec, ultrices ut, tincidunt vitae, ante. Nunc accumsan. Nam porta dolor eget urna. Vivamus arcu metus, pharetra non, ullamcorper accumsan, tincidunt in, metus. Etiam feugiat convallis mauris. Duis lectus.</p>
	<p>Integer convallis, neque vel gravida aliquam, felis leo ornare ligula, vel porta tortor tellus et dolor. Duis eu odio eget nulla eleifend ornare. Aliquam lorem turpis, faucibus eu, tincidunt ut, tempor vitae, libero. Morbi tristique odio in tellus. Praesent aliquet fringilla diam. Proin id velit. Nunc vulputate mauris consectetuer nunc. Aliquam ut mauris. Nulla hendrerit metus nec ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nullam venenatis lorem in eros. Mauris eu tellus non lacus gravida consectetuer. Aliquam id lectus nec est sollicitudin vehicula. Maecenas nulla. In tincidunt dapibus risus. Sed tellus arcu, viverra vitae, sagittis vel, viverra at, turpis. Etiam condimentum velit iaculis tortor. Quisque ultricies nulla vel pede. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;</p>
	<p>Sed tincidunt. Aliquam porta. Nam quis mi. Quisque tincidunt. Sed vitae velit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse orci. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum magna arcu, malesuada bibendum, sodales sit amet, malesuada sit amet, urna. Aliquam erat volutpat. Aliquam posuere, magna nec scelerisque sagittis, dui risus dapibus purus, eu placerat massa massa sit amet quam. Aliquam dignissim. Vestibulum pede. In dictum vulputate pede. Cras eu velit. Sed lobortis pretium enim. Aenean tincidunt pretium massa. Duis egestas, nulla vel venenatis adipiscing, eros ante placerat erat, a fringilla ligula purus vel ligula. In hac habitasse platea dictumst.</p>
	<p>Sed adipiscing dignissim mi. Maecenas arcu. Nulla ut magna. Vivamus eget leo vitae erat pharetra porta. Sed justo nunc, pretium non, laoreet id, fringilla sit amet, dolor. Pellentesque interdum. Integer at urna. Aenean sodales neque vitae lacus. Aenean id tellus quis quam lacinia vestibulum. Curabitur blandit nisi sit amet mauris. Curabitur placerat justo ut tortor. Vivamus condimentum dolor a sapien. Pellentesque metus lectus, mollis in, faucibus at, tincidunt vitae, nisi.</p>
</div>
<div class="footer">
	Footer text
</div>
</body>
</html>
 
Hi,

Adding the below seems to work, but you'll to add a bit of padding to the bottom of each paragraph. Not sure why it works, as It was suggested to me at work last week. :)


* { margin: 0; padding: 0; }
 
* is basically all, so you're be applying those attributes to everything.

I would guess the problem relates to using the <p> tag. If you're not defining that tag or giving it a class or ID, then just remove them and add in <br /> for line breaks.

Or alternatively set the attributes for the <p> tag.

Untested but try chaning your content area lines to...

Code:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam eu enim. Morbi viverra risus non ante. Curabitur euismod consequat lacus. Quisque eget arcu et odio luctus sodales. Praesent sollicitudin sapien sed est. Suspendisse elit risus, eleifend a, consectetuer sit amet, suscipit vitae, tortor. Nullam varius tellus. Etiam pharetra nisl elementum augue. Praesent congue ante. Nam mauris. Etiam tempor. Integer ut lacus in risus laoreet condimentum. Praesent volutpat.<br /><br />Suspendisse libero neque, vehicula dignissim, commodo euismod, elementum vel, diam. Vivamus eu magna. Pellentesque tempor purus a nisi. Etiam eget erat a dui pellentesque dapibus. Fusce placerat ultricies nulla. Nunc ante elit, ultrices sed, fermentum ultricies, semper id, quam. Suspendisse potenti. Etiam lacus nibh, bibendum nec, ultrices ut, tincidunt vitae, ante. Nunc accumsan. Nam porta dolor eget urna. Vivamus arcu metus, pharetra non, ullamcorper accumsan, tincidunt in, metus. Etiam feugiat convallis mauris. Duis lectus.<br /><br />Integer convallis, neque vel gravida aliquam, felis leo ornare ligula, vel porta tortor tellus et dolor. Duis eu odio eget nulla eleifend ornare. Aliquam lorem turpis, faucibus eu, tincidunt ut, tempor vitae, libero. Morbi tristique odio in tellus. Praesent aliquet fringilla diam. Proin id velit. Nunc vulputate mauris consectetuer nunc. Aliquam ut mauris. Nulla hendrerit metus nec ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nullam venenatis lorem in eros. Mauris eu tellus non lacus gravida consectetuer. Aliquam id lectus nec est sollicitudin vehicula. Maecenas nulla. In tincidunt dapibus risus. Sed tellus arcu, viverra vitae, sagittis vel, viverra at, turpis. Etiam condimentum velit iaculis tortor. Quisque ultricies nulla vel pede. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;<br /><br />Sed tincidunt. Aliquam porta. Nam quis mi. Quisque tincidunt. Sed vitae velit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse orci. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum magna arcu, malesuada bibendum, sodales sit amet, malesuada sit amet, urna. Aliquam erat volutpat. Aliquam posuere, magna nec scelerisque sagittis, dui risus dapibus purus, eu placerat massa massa sit amet quam. Aliquam dignissim. Vestibulum pede. In dictum vulputate pede. Cras eu velit. Sed lobortis pretium enim. Aenean tincidunt pretium massa. Duis egestas, nulla vel venenatis adipiscing, eros ante placerat erat, a fringilla ligula purus vel ligula. In hac habitasse platea dictumst.<br /><br />Sed adipiscing dignissim mi. Maecenas arcu. Nulla ut magna. Vivamus eget leo vitae erat pharetra porta. Sed justo nunc, pretium non, laoreet id, fringilla sit amet, dolor. Pellentesque interdum. Integer at urna. Aenean sodales neque vitae lacus. Aenean id tellus quis quam lacinia vestibulum. Curabitur blandit nisi sit amet mauris. Curabitur placerat justo ut tortor. Vivamus condimentum dolor a sapien. Pellentesque metus lectus, mollis in, faucibus at, tincidunt vitae, nisi.<br /><br />

Just replaced the paragraph tags with basic line breaks, you should get the same look in both IE and FF.
 
* is basically all, so you're be applying those attributes to everything.

I would guess the problem relates to using the <p> tag. If you're not defining that tag or giving it a class or ID, then just remove them and add in <br /> for line breaks.

Or alternatively set the attributes for the <p> tag.

Untested but try chaning your content area lines to...

Code:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam eu enim. Morbi viverra risus non ante. Curabitur euismod consequat lacus. Quisque eget arcu et odio luctus sodales. Praesent sollicitudin sapien sed est. Suspendisse elit risus, eleifend a, consectetuer sit amet, suscipit vitae, tortor. Nullam varius tellus. Etiam pharetra nisl elementum augue. Praesent congue ante. Nam mauris. Etiam tempor. Integer ut lacus in risus laoreet condimentum. Praesent volutpat.<br /><br />Suspendisse libero neque, vehicula dignissim, commodo euismod, elementum vel, diam. Vivamus eu magna. Pellentesque tempor purus a nisi. Etiam eget erat a dui pellentesque dapibus. Fusce placerat ultricies nulla. Nunc ante elit, ultrices sed, fermentum ultricies, semper id, quam. Suspendisse potenti. Etiam lacus nibh, bibendum nec, ultrices ut, tincidunt vitae, ante. Nunc accumsan. Nam porta dolor eget urna. Vivamus arcu metus, pharetra non, ullamcorper accumsan, tincidunt in, metus. Etiam feugiat convallis mauris. Duis lectus.<br /><br />Integer convallis, neque vel gravida aliquam, felis leo ornare ligula, vel porta tortor tellus et dolor. Duis eu odio eget nulla eleifend ornare. Aliquam lorem turpis, faucibus eu, tincidunt ut, tempor vitae, libero. Morbi tristique odio in tellus. Praesent aliquet fringilla diam. Proin id velit. Nunc vulputate mauris consectetuer nunc. Aliquam ut mauris. Nulla hendrerit metus nec ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nullam venenatis lorem in eros. Mauris eu tellus non lacus gravida consectetuer. Aliquam id lectus nec est sollicitudin vehicula. Maecenas nulla. In tincidunt dapibus risus. Sed tellus arcu, viverra vitae, sagittis vel, viverra at, turpis. Etiam condimentum velit iaculis tortor. Quisque ultricies nulla vel pede. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;<br /><br />Sed tincidunt. Aliquam porta. Nam quis mi. Quisque tincidunt. Sed vitae velit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse orci. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum magna arcu, malesuada bibendum, sodales sit amet, malesuada sit amet, urna. Aliquam erat volutpat. Aliquam posuere, magna nec scelerisque sagittis, dui risus dapibus purus, eu placerat massa massa sit amet quam. Aliquam dignissim. Vestibulum pede. In dictum vulputate pede. Cras eu velit. Sed lobortis pretium enim. Aenean tincidunt pretium massa. Duis egestas, nulla vel venenatis adipiscing, eros ante placerat erat, a fringilla ligula purus vel ligula. In hac habitasse platea dictumst.<br /><br />Sed adipiscing dignissim mi. Maecenas arcu. Nulla ut magna. Vivamus eget leo vitae erat pharetra porta. Sed justo nunc, pretium non, laoreet id, fringilla sit amet, dolor. Pellentesque interdum. Integer at urna. Aenean sodales neque vitae lacus. Aenean id tellus quis quam lacinia vestibulum. Curabitur blandit nisi sit amet mauris. Curabitur placerat justo ut tortor. Vivamus condimentum dolor a sapien. Pellentesque metus lectus, mollis in, faucibus at, tincidunt vitae, nisi.<br /><br />
Just replaced the paragraph tags with basic line breaks, you should get the same look in both IE and FF.

Ah, so it's just a wildcard.

I seriously have never come across that :)
 
Yeah it's a wlidcard, comes in handy for CSS selectors to...

1 example would be if i wanted to select all class that include "blah" as part of the name i could it like this...

Code:
[class*="blah"] {color:#f00}
Meaning any class that contains the word blah, for example blahhhhh aaablah, and so on....

Thats quite a poor example but yes it's generally 'at least in my understanding' a way of saying ALL.

If you wanted to force a font site wide and you're using one CSS file you could do say....

Code:
* {font-family:Arial}

If you're going to use the ALL wildcard though you'lll have to define every area you don't want those attributes to apply to. Selectors would be a good trade off between the 2, you can link up selectors in the same way you link various styles....

Code:
p, body, h1, h2 {color:#fff}

Here we're saying all those tags should show the text white. Again see the selector i mentioned earlier, you can link those up in the same way.

If you want further help just let me know...
 
Thanks for the advice chaps. That was a nice easy fix in the end, instead of using the wildcard I just defined a call for <p>, forced the padding and margin to 0 and then set the bottom margin to 15px, it had the desired effect:

Code:
p
{
	padding: 0;
	margin: 0;
	margin-bottom: 15px;
}
 
Heheh all three alternatives are valid!

I chose the longhand way as it's easier for me to read six months after I coded it and have forgotten what I was doing!
 
Same effect but shorter shorthand (you don't need the last zero) ;)
p { padding: 0; margin: 0 0 15px;}

Actually some browsers will assume a value if one is not set, so ideally it is best to include it.

This especially applies to padding.

If it were me, i'd also do it all on the one line.... when i was learning CSS it was much easier to space it out, i never bother now though...
 
Well not everyone is on a newer browser, it's the sake of putting in an extra character to support the older browsers, i fail to see the problem.

Believe it or not some people are still on Win95 and so on...

I just think it's good practice to cover the older browsers where possible, and at the expense of putting an extra space and an extra character i really can't see it slowing down the design in any way.

You can test designs in lots of browsers here...
http://browsershots.org/

Bearing in mind the busier the site is and the more browsers you choose the longer it will take to generate the screenies.
 
Ahh, I getcha.

Though, going by the same logic, we shouldn't use shorthand for the following at all because they're not fully supported in IE4 and/or IE5.5

font
border
border-top, border-right, border-bottom, border-left
list-style
background
 
Well thats down to the OP and how far he wants to go with cross browser support.

The current design would fall to pieces in IE4, as you so rightly pointed out with the other attributes. List style i know isn't so that destroys the nav menu already.

As said though, that's down to the OP to decide, i was just suggesting it is better practice to declare all aspects of a margin since this could play a large roll on a design, so whether you want to be totally strict with the code is down to the given person.

EDIT: Browser usuage stats, for anyone curious.
http://www.w3schools.com/browsers/browsers_stats.asp
 
Last edited:
Back
Top Bottom