Natural Docs Version 1.2 Documentation CSS Guide |
CSS GuideIt’s important to understand the internal HTML file structure and styles in order to design your own CSS style for Natural Docs. If you’re content with the default styles, there’s no need to read this document. The diagrams are designed for clarity. In the actual HTML, you’d obviously see “<pre class=CCode></pre>” instead of “<pre CCode></pre CCode>”. If there’s no element in the diagram tag, for example “<CTitle></CTitle>”, that means you shouldn’t rely on what HTML element it is. Just refer to them as .Style in your CSS file instead of Element.Style. Summary
Page StructureThe body tag is used to distinguish between the types of pages. For framed pages, its style will be FramedMenuPage, FramedContentPage, or FramedIndexPage depending on what it is. Non-framed pages have a body style of UnframedPage. On unframed pages, the menu will be contained in a MenuSection td and the content or index in ContentSection or IndexSection tds. Tables are used instead of CSS positioning for better compatibility with older browsers and because they have the ability to stretch when its content is too wide and collapse when the browser window is too small. Unframed Page<body UnframedPage>
[browser styles]
<table><tr>
<td MenuSection>
Menu
</td MenuSection>
<td ContentSection/IndexSection>
Content or Index
</td ContentSection/IndexSection>
</tr></table>
<Footer>
Footer
</Footer>
[/browser styles]
</body UnframedPage>Framed Menu Page<body FramedMenuPage>
[browser styles]
Menu
<Footer>
Footer
</Footer>
[/browser styles]
</body FramedMenuPage>Framed Content/Index Page<body FramedContentPage/FramedIndexPage>
[browser styles]
Content or Index
[/browser styles]
</body FramedContentPage/FramedIndexPage>Page StylesBrowser StylesNatural Docs pages include JavaScript to detect which browser the user is running and apply styles so that you can work around browser quirks right in the CSS file. Immediately after the body tag, the browser type and version styles will be applied. However, neither are guaranteed to be there; the user may have JavaScript turned off or be using a browser that isn’t detected. These styles should only be used to correct minor flaws and should not be heavily relied on. <body>
<browser type>?
<browser version>?
Page Content
</browser version>?
</browser type>?
</body>For example, if a CTopic’s style is giving you problems in Internet Explorer 4, override it with .IE4 .CTopic. If a MTitle’s style gives you a problem in Opera 5 but only in frames, override it with .FramedMenuPage .Opera5 .MTitle. Browser TypesIf the browser is not one of the types below, neither this nor the browser version will be present. There’s the possibility that some obscure browser will appear as one of the others by spoofing, but the most prominent of these, Opera, Konquerer, and Safari, are taken care of. Browser VersionsIf the browser is not one of the versions below, this style will not be present. The browser type still may be. Gecko and KHTML-based browsers are not broken out into sub-versions. Content StructureAll the content of a given file is either contained in a ContentSection or a FramedContentPage. All other content styles are prefixed with a C. Each piece of content is a CTopic surrounded by its type; for example, CFunction for a function. Inside that are the CTitle and if necessary, CBody. Inside CBody are analogues to all the top-level NDMarkup tags: CHeading, CParagraph, etc. Styles like CParagraph exist so that you only style explicit NDMarkup paragraphs, not any p that appears. In addition to the top-level NDMarkup tags, you also have CPrototype, CTitle, and Summaries. Summaries are described in their own section. <Content>
<CType (CFunction, CItem, etc.)>
<CTopic>
<CTitle>
Topic title
</CTitle>
<CBody>
<ClassHierarchy> (See it's section)
<CPrototype>
Prototype
</CPrototype>
<p CParagraph>
Paragraph
</p CParagraph>
<CHeading>
Heading
</CHeading>
<pre CCode>
Code
</pre CCode>
<ul CBulletList>
<li>
Bullet item
</li>
</ul CBulletList>
<table CDescriptionList>
<tr>
<td CDLEntry>
Entry
</td CDLEntry>
<td CDLDescription>
Description
</td CDLDescription>
</tr>
</table CDescriptionList>
<Summary> (See it's section)
</CBody>
</CTopic>
</CType (CFunction, CItem, etc.)>
</Content>Take advantange of the CSS inheritance model. For example, you can style all titles via .CTitle, and you can style specific titles with .CType .CTitle. Content Styles
Menu StructureEverything is enclosed in a MenuSection or a FramedMenuPage. All other menu styles are prefixed with an M. The title is an MTitle and will always be at the beginning of the menu if it exists. If a subtitle exists as well, it will appear as an MSubTitle inside MTitle. Subtitles aren’t allowed without titles. Every other entry in the menu is contained in a MEntry, inside of which there’s the type, such as MFile and MGroup. Inside of that is the content. With MGroups, there’s also a section inside called MGroupContent which can contain more entries. Here’s the diagram: <Menu>
<MTitle>
Menu title
<MSubTitle>
Menu sub title
</MSubTitle>
</MTitle>
<MEntry>
<MFile>
<a href>File</a href>
</MFile>
</MEntry>
<MEntry>
<MText>
Text
</MText>
</MEntry>
<MEntry>
<MLink>
<a href>Link</a href>
</MLink>
</MEntry>
<MEntry>
<MGroup>
<a href>Group</a href>
<MGroupContent>
(MEntries)
</MGroupContent>
</MGroup>
</MEntry>
</Menu>The MFile entry that’s currently selected will have the #MSelected ID, so you can reference it in CSS via .Menu .MFile#MSelected. Menu Styles
Class Hierarchy StructureEverything is contained in a single ClassHierarchy. Each entry is surrounded by its type, such as CHParent, and the generic CHEntry. Depending on the context, entries may be surrounded by one or more CHIndents. <ClassHierarchy>
<CHIndent>?
<type (CHParent, CHCurrent, etc.)>
<CHEntry>
Entry
</CHEntry>
</type (CHParent, CHCurrent, etc.)>
</CHIndent>?
</ClassHierarchy>Summary StructureEverything is enclosed in a single Summary. All the other summary styles are prefixed with an S. STitle holds the actual word “Summary” and SBorder and STable hold the content. SBorder exists because different browsers apply table padding attributes in different ways. STable exists as a class to separate the main table from any other tables that may be necessary. Here’s a diagram: <Summary>
<STitle>
Title
</STitle>
<SBorder>
<table STable>
...
</table STable>
</SBorder>
</Summary>On to the table content. Rows may have the SMarked style, which means they should be tinted for easier readablity. Since we many attributes left to apply, they’re done with a kludgy mess of styles within each cell. It’s hacky and verbose, but it works and is compatible everywhere. We apply the type, whether it’s an entry or a description, and if it’s in a group or class as shown below: <tr SMarked?>
<td SEntrySize?>
<SType (SFunction, SClass, etc.)>
<SEntry>
<SInClass/Section>? <SInGroup>?
<a href>Entry</a href>
</SInGroup>? </SInClass/Section>?
</SEntry>
</SType>
</td SEntrySize?>
<td SDescriptionSize?>
<SType (SFunction, SClass, etc.)>
<SDescription>
<SInClass/Section>? <SInGroup>?
Description
</SInGroup>? </SInClass/Section>?
</SDescription>
</SType>
</td SDescriptionSize?>
</tr SMarked?>SInGroup, SInClass, and SInSection exist to allow indenting. They’re there in their current arrangement (all three “there”s in one sentence :) because implementing it as nested tables, while structurally cleaner, won’t allow the desciptions to line up on the right throughout the entire summary. Use the power of CSS’s inheritance rules to specify styles. For example, to set the style of a group entry, apply it to .SGroup .SEntry. However, you could also apply a style to both the group’s entry and description by applying the style to .SGroup. Or, you could apply a style to all the entries by applying it to .SEntry. And so on. Summary Styles
Link StructureAll links to symbols have a type style prefixed with L. The only exceptions are summary entries; summary descriptions use them as well. <a LType (LFunction, LClass, etc.)>
Link
</a LType (LFunction, LClass, etc.)>You can use this to make links to different symbols appear in different styles. For example, making .LClass bold will make all links to classes bold, except when appearing in summary entries. You can combine this with other styles to be even more specific. For example, you can apply a style to function links appearing in summary descriptions with .SDescription .LFunction. Link StylesIndex StructureEverything is enclosed in a IndexSection or an FramedIndexPage. All other index styles are prefixed with an I. <Index>
<IPageTitle>
Page Title
</IPageTitle>
<INavigationBar>
A - <a href>B</a href> - C ...
</INavigationBar>
<ISection>
<IHeading>
Heading (A, B, etc.)
</IHeading>
<IEntry>
<ISymbol>
<a href>Symbol</a href>
</ISymbol>,
<IParent>
Class
</IParent>
</IEntry>
<IEntry>
<ISymbol>
Symbol
</ISymbol>
<ISubIndex>
<IEntry>
<IParent>
<a href>Class</a href>
</IParent>
</IEntry>
...
</ISubIndex>
</IEntry>
<IEntry>
<ISymbol>
Symbol
</ISymbol>
<ISubIndex>
<IEntry>
<IParent>
Class
</IParent>
<ISubIndex>
<IEntry>
<IFile>
<a href>File</a href>
</IFile>
</IEntry>
...
</ISubIndex>
</IEntry>
...
</ISubIndex>
</IEntry>
</ISection>
</Index>Every index entry is an IEntry followed by a type. If there’s only one class and definition file for a symbol, it gets the link. However, if there’s more of either, they get broken out into ISubIndex entries. A IParent subindex can be broken out yet again into an IFile subindex. It’s called IParent instead of <IClass> because class entries are ISymbols. IParents are only used when the symbol has a class. If the symbol is a class, the symbol is global. Index Styles
Tool Tip StructureTool tips may appear anywhere in the page, mainly because it’s assumed that they will use position: absolute and visibilityhidden. The entire tool tip is found in a CToolTip style, with a CType style inside it. CTypes are normally outside their elements, but that would cause it to be partially visible in this case. We need CToolTip to be the outermost style so its visibility and position can be manipulated in JavaScript. Inside there’s a CPrototype and/or the description text. The description text has no special surrounding tags. <CToolTip>
<CPrototype>
Prototype
</CPrototype>
Summary text
</CToolTip>Tool Tip Styles
See also CPrototype. RevisionsHow the page structure has changed throughout the various releases. 1.2
1.16
1.1
1.0
0.95
0.91
0.9
|