From: David on
I'm trying to style a kind of minimalist welcome page where each of X
number of (gray?) boxes will be links to a part of the site.

I want to implement the navbar (ie, set of boxes linking to other
pages) as an unordered list, with the <ul> item being linked to an ID
that sets layout, etc., and each <li> linked to an ID that renders its
box a different height.

So far, body looks as follows:
<body>
<div id="container">

<h1 id="header"><a href="#">site name</a></h1>

<ul id="navmenu">
<li id="blog"><a href="#">blog</a></li>
<li id="writing"><a href="#">writing</a></li>
<li id="photos"><a href="#">photos</a></li>
</ul>

</div>
</body>

The container ID is meant to center the entire menu on the page. It
has worked to a degree--the container is, itself, centered, but the
elements inside it are not.

Now, for the CSS:
@import "style.css";

#header {
text-align: center;
}

#container {
position: relative;
margin-left: auto;
margin-right: auto;
width: 600px;
}

ul#navmenu {
padding: 0;
list-style: none;
}

li {
padding: .6em 0 0 .8em;
float: left;
margin-left: 1em;
width: 5em;
height: 18em;
}

li, li a:link {
display: block;
font-family: "Lucida Grande", sans-serif;
font-size: 10pt/1.25;
color: #BBBBBB;
text-decoration: none;
background-color: #BBBBBB;
}

li a:hover {
color: #FFF;
}

li#blog {
height: 12em;
}

li#writing {
height: 15em
}

li#photos {
height: 10em;
}

What is in the imported file isn't relevant, as far as I can tell, as
the <ul> and <li> elements are always 'namespaced' under specific IDs
in that stylesheet.

So: how do I center the blocks within the container? It's easy enough
to center a single element within another one... but how do you center
those 3 blocks with a 1em spacing in between each one?

As a quick aside, how can I make it so hovering over any portion of
the box triggers a:hover?

Thanks,
David
From: Ben C on
On 2008-05-05, David <dbjacobs(a)gmail.com> wrote:
> I'm trying to style a kind of minimalist welcome page where each of X
> number of (gray?) boxes will be links to a part of the site.
>
> I want to implement the navbar (ie, set of boxes linking to other
> pages) as an unordered list, with the <ul> item being linked to an ID
> that sets layout, etc., and each <li> linked to an ID that renders its
> box a different height.
>
> So far, body looks as follows:
><body>
><div id="container">
>
><h1 id="header"><a href="#">site name</a></h1>
>
><ul id="navmenu">
> <li id="blog"><a href="#">blog</a></li>
> <li id="writing"><a href="#">writing</a></li>
> <li id="photos"><a href="#">photos</a></li>
></ul>
>
></div>
></body>
[...]
> #container {
> position: relative;
> margin-left: auto;
> margin-right: auto;
> width: 600px;
> }
[...]
> li {
> padding: .6em 0 0 .8em;
> float: left;
> margin-left: 1em;
> width: 5em;
> height: 18em;
> }
[...]
> So: how do I center the blocks within the container? It's easy enough
> to center a single element within another one... but how do you center
> those 3 blocks with a 1em spacing in between each one?

You can't centre floats-- they float to one side or the other.

You could make them display: inline-block and vertical-align: top
instead of float: left and then put text-align: center on the container.

But that won't work in (at least) Firefox 2.

Alternatively, you could shrink-to-fit and center the container by
putting display: table and margin: 0 auto on ul#navmenu.

That won't work in IE, but see also

http://netweaver.com.au/alt/shrinkToFitCentring/centeringShrinkToFit.html

for a possible workaround.

But you can get away without centred shrink-to-fit here since you are
setting the widths of the LIs to 5em anyway. You want 1em between each,
so that's 17em altogether (3*5+2). Set the UL to width: 17em and margin:
0 auto and that should work.

Make sure you also set padding and margin to 0 on the ul-- one or other
of those will usually be 40px on the left from the default stylesheet.

> As a quick aside, how can I make it so hovering over any portion of
> the box triggers a:hover?

Do something like li:hover a { color: #fff }. That matches an A inside a
hovered-over LI.
From: David on
On May 5, 4:19 pm, Ben C <spams...(a)spam.eggs> wrote:
> On 2008-05-05, David <dbjac...(a)gmail.com> wrote:
>
>
>
> > I'm trying to style a kind of minimalist welcome page where each of X
> > number of (gray?) boxes will be links to a part of the site.
>
> > I want to implement the navbar (ie, set of boxes linking to other
> > pages) as an unordered list, with the <ul> item being linked to an ID
> > that sets layout, etc., and each <li> linked to an ID that renders its
> > box a different height.
>
> > So far, body looks as follows:
> ><body>
> ><div id="container">
>
> ><h1 id="header"><a href="#">site name</a></h1>
>
> ><ul id="navmenu">
> >    <li id="blog"><a href="#">blog</a></li>
> >    <li id="writing"><a href="#">writing</a></li>
> >    <li id="photos"><a href="#">photos</a></li>
> ></ul>
>
> ></div>
> ></body>
> [...]
> > #container {
> >    position: relative;
> >    margin-left: auto;
> >    margin-right: auto;
> >    width: 600px;
> > }
> [...]
> > li {
> >    padding: .6em 0 0 .8em;
> >    float: left;
> >    margin-left: 1em;
> >    width: 5em;
> >    height: 18em;
> > }
> [...]
> > So: how do I center the blocks within the container? It's easy enough
> > to center a single element within another one... but how do you center
> > those 3 blocks with a 1em spacing in between each one?
>
> You can't centre floats-- they float to one side or the other.
>
> You could make them display: inline-block and vertical-align: top
> instead of float: left and then put text-align: center on the container.
>
> But that won't work in (at least) Firefox 2.
>
> Alternatively, you could shrink-to-fit and center the container by
> putting display: table and margin: 0 auto on ul#navmenu.
>
> That won't work in IE, but see also
>
>    http://netweaver.com.au/alt/shrinkToFitCentring/centeringShrinkToFit....
>
> for a possible workaround.
>
> But you can get away without centred shrink-to-fit here since you are
> setting the widths of the LIs to 5em anyway. You want 1em between each,
> so that's 17em altogether (3*5+2). Set the UL to width: 17em and margin:
> 0 auto and that should work.
>
> Make sure you also set padding and margin to 0 on the ul-- one or other
> of those will usually be 40px on the left from the default stylesheet.
>
> > As a quick aside, how can I make it so hovering over any portion of
> > the box triggers a:hover?
>
> Do something like li:hover a { color: #fff }. That matches an A inside a
> hovered-over LI.

Thanks so much for the info. This has irked me for a while.

David