Ian Goddard wrote (in soc.genealogy.computing): > It renders quite nicely with Seamonkey. "children" and John Kelly Brown Camino, which allegedly is closely related to SeaMonkey, does not connect the lines. But I'm not really interested in the lines. I'm interested in a way to define divs so that each person's div contains the divs of his parents, recursively, and the positioning, being related to that of the enclosing div makes the entire chart look right. So (using brackets for angles): [div class="person"] Person's details [div class="person father"] his father's details [div class="person father"] paternal grandfather's details [/div] [div class="person mother"] paternal grandmother's details [/div] [/div] [div class="person mother"] his mother's details [div class="person father"] maternal grandfather's details [/div] [div class="person mother"] maternal grandmother's details [/div] [/div] [/div] .person { most of the style info common to all; positioning info that puts his/her details to the left of his box, centered vertically in that box; margin, padding, and whatnot that makes that box big enough to hold the boxes (if any) of the divs within; } .mother { positioning info that puts mother's box in the lower right of the enclosing div } .father { positioning info that puts father's box in the upper right of the enclosing div } This would make automated chart generation easier: function show_person(ID, level) { if level = max { return } css_class = "person" if (level > 1) { if (person is male) { css_class = css_class & " father" } else { css_class = css_class & " mother" } print "[div class=\"css_class\"]" print details of person F_ID = father_of(ID) if found { show_person(F_ID, level + 1) } M_ID = mother_of(ID) if found { show_person(M_ID, level + 1) } } // end show_person But this is really more of a question for a CSS group, so followups to comp.infosystems.www.authoring.stylesheets -- Wes Groleau Always listen to experts. They'll tell you what can't be done and why. Then do it. -- Robert A. Heinlein