Chapitre 4. Améliorer la présentation des documents avec des feuilles de style

Table des matières

La feuille de style XSLT
La feuille de style DSSSL
La feuille de style CSS

Les exemples précédents permettent d'obtenir des documents formatés de façon propre, mais avec un style un peu austère et sur un fond blanc (Voir la doc originale de Docbook par exemple). Nous allons voir dans ce chapitre comment personnaliser le rendu pour l'adapter par exemple à la charte graphique d'un site web.

Quelques spécifications DSSSL ou XSL et une belle feuille de style CSS (pour la sortie HTML), peuvent considérablement améliorer l'allure de vos documents et celà sans jamais toucher au document source sgml/xml original.

La feuille de style XSLT

TODO

Exemple 4.1. La feuille de style DSSSL du mirabellug


<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 version='1.0'>
	<xsl:import href="file:///usr/share/xml/docbook/stylesheet/nwalsh/xhtml/chunk.xsl"/>

	<!-- html.stylesheet
	The html.stylesheet parameter is either empty, indicating that no 
	stylesheet LINK tag should be generated in the HTML output, or 
	it is a list of one or more stylesheets.
	Multiple stylesheets are space-delimited. 
	If you need to reference a stylesheet URI that includes a space, 
	encode it with %20. A seprate HTML LINK element will be 
	generated for each stylesheet in the order they are listed in the 
	parameter.
	-->	
	<xsl:param name="html.stylesheet">../docbook.css</xsl:param>

	<!-- css.decoration
	If css.decoration is turned on, then HTML elements produced by 
	the stylesheet may be decorated with STYLE attributes. 
	For example, the LI tags produced for list items may include a 
	fragment of CSS in the STYLE attribute which sets the CSS 
	property "list-style-type".
	-->
	<xsl:param name="css.decoration" select="1"></xsl:param>


	<!-- use.id.as.filename
	If use.id.as.filename is non-zero, the filename of chunk elements 
	that have IDs will be derived from the ID value.
	-->
	<xsl:param name="use.id.as.filename" select="'1'"></xsl:param>

</xsl:stylesheet>

La feuille de style DSSSL

Voici le contenu du fichier mirabellug.dsl utilisé pour cette documentation:

Exemple 4.2. La feuille de style DSSSL du mirabellug


<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
<!ENTITY dbstyle SYSTEM "/usr/share/sgml/docbook/dsssl-stylesheets-1.62/html/docbook.dsl" CDATA DSSSL>
]>

<style-sheet>
<style-specification use="docbook">
<style-specification-body>

(define %html-ext% 
	;; Extention par défaut des fichiers HTML
	".html"
)

(define %root-filename%
	;; Nom du fichier HTML principal
	"index"
)

(define %stylesheet%
	;; Nom et emplacement de la feuille de style (CSS) utilisée par les pages HTML
	"../mirabellug.css"
)

(define %css-decoration%
	;; Active l'utilisation des CSS dans le code HTML généré.
	;; Notament les paramètres CLASS= des principales balises
	#t)

(define %body-attr% 
	;; Attribut utilisé dans la balise BODY
	;; Ici on laisse faire la feuille de style CSS
	(list
	)
)

(define use-output-dir
	;; Définit si le répertoire de destination %output-dir% doit être utilisé pour les fichiers HTML
	#t
)

(define %output-dir%
	;; Si rien d'autre n'est défini sur la ligne de commande, on utilise le répertoire de destination suivant :
	"htmldir"
 )

</style-specification-body>
</style-specification>
<external-specification id="docbook" document="dbstyle">
</style-sheet>

La deuxième ligne ( <!ENTITY dbstyle SYSTEM .... ) doit pointer vers le fichier docbook.dsl utilisé dans les chapitres précédents.

Les paramètres %css-decoration% et %stylesheet% permettent l'utilisation d'une feuille de style CSS.

Pour compiler notre document en html: jade -E 10 -t sgml -d mirabellug.dsl -V %output-dir%=monRepHtml madocsgml.sgl

L'option -E 10 permet de limiter le nombre maximun d'erreurs affichées (ce sont surtout les premières erreurs qui sont importantes).

L'option -V %output-dir%=monRepHtml permet de définir un répertoire de destination autre que celui définit dans le fichier .dsl .

La feuille de style CSS

Voici la feuille de style CSS mirabellug.css utilisée pour cette documentation (version HTML !). Ceci n'est qu'un exemple, et beaucoup d'amélirations sont encore possibles. N'hésitez pas à regarder le code source html produit par les utilitaires Docbook pour connaître les classes de style disponibles

Exemple 4.3. La feuille de style CSS du mirabellug


/* 
		========================================================
	================================================================
 			Feuille de Style spéciale document Docbook
	================================================================
		========================================================
		
		2002-2004 - S.URBANOVSKI <s.urbanovski@ac-nancy-metz.fr>
*/


/* 
   ---------------------------------------------------------------------------------------------------	
	Elements généraux :	
   ---------------------------------------------------------------------------------------------------
*/

body {
	font-family:			Helvetica, sans-serif;
	font-size:				11px;
	text-align:				justify;

	background-color:		#EBEBF6;
/*	background-image:		url("/images/fond_page.gif") ;*/

	margin-right:			12px;
	margin-left:			12px;
	margin-top:				2px;
	margin-bottom:			2px;

}


/* Les liens :*/
a[href] {
	color:					#2929BB;
	text-decoration:		none;
}
a[href]:hover {
	color:					#800000;
	text-decoration:		underline;
}
a[href]:visited {
	color:					#222288;
}
a[href]:active {
	color:					red;
}


tr,th,td {
	font-size:				11px;
}


/* 
    ---------------------------------------------------------------------------------------------------
    Mise en forme des titres de document et de chapitre :
    ---------------------------------------------------------------------------------------------------
*/

div.chapter > h1 {
	color:					#EFEFE0;
	background-color:		#5278B6;
	text-decoration:		none;
	font-size:				18px;
	padding:				3px;
	margin-right:			-5px;
	margin-left:			-5px;
}

div.titlepage h1.title {
	background-color:		#4268A6;
	background-image:		none ;
	color:					white;
	font-size:				20px;
	text-align:				center;
	text-decoration:		none;

	margin-left:			2px;
	border-bottom:			ridge #404090;
	border-top:				ridge #404090;
	padding-top:			5px;
	padding-bottom:			5px;
}

div.book {
}


/* 
    ---------------------------------------------------------------------------------------------------
    Mise en forme des entêtes et pieds de page :
    ---------------------------------------------------------------------------------------------------
*/

div.navfooter,div.navheader {
	background-color:		#4268A6;
	border: thin solid		#6DA9E2;
	margin-right:			-10px;
	margin-left:			-10px;
	padding:				5px;
	color:					yellow;
}

div.navheader {
	margin-bottom:			10px;
}
div.navfooter {
	margin-top:				10px;
}
div.navfooter a, div.navheader a {
	color:					#E7B508;
}
div.navfooter a:visited, div.navheader a:visited {
	color:					#E7B508;
}
div.navfooter a:hover, div.navheader a:hover {
	color:					#F27334;
}
div.navfooter td, div.navheader td, div.navheader th {
	color:					white;
}
div.navfooter hr, div.navheader hr {
	display:				none;
	border-style:			none;
}


/* 
    ---------------------------------------------------------------------------------------------------
    Mise en page des sections :
    ---------------------------------------------------------------------------------------------------
*/

/* Commun */
div.sect1,div.sect2,div.sect3 {
	margin-left:			20px;
}
h1.sect1, h2.sect2, h3.sect3, h1.title {
	text-decoration: 		underline;
	margin-left:			-20px;
}

/* Niveau 1 */
div.sect1 {
}
div.sect1 h1 a {
	color:					#800000;
	font-size:				17px;
}

/* Niveau 2 */
div.sect2 {
}
div.sect2 h2 a {
	color:					#600000;
	font-size:				15px;
}

/* Niveau 3 */
div.sect3 {
}
div.sect3 h3 a {
	color:					#400000;
	font-size:				12px;
}

/* 
    ---------------------------------------------------------------------------------------------------
    Mises en forme diverses (block) :
    ---------------------------------------------------------------------------------------------------
*/

div.caution table {
	border-style:			hidden;
	border-spacing:			1px;
	padding-left:			30px;
	padding-right:			30px;
}

div.caution td {
	border:					none !important;
	background-color:		#FFDDDD;
}


div.example,div.toc {
	border:					thin dotted #70AAE5;
	padding-left:			10px;
	padding-right:			10px;
	background-color:		#E8F4F0;
}
div.toc {
	margin-left:			20px;
	margin-right:			20px;
}
pre.programlisting {
	background-color:		#DDFFDD;
	padding:				5px;
	border:					thin solid #a0a0a0;;
}


/* 
    ---------------------------------------------------------------------------------------------------
    Mises en forme diverses (flow) :
    ---------------------------------------------------------------------------------------------------
*/

tt.filename {
	color:					#8000A0;
}
pre.screen {
	background-color:		#404040;
	color:					white;
	padding:				5px;
	border-color:			#a0a0a0;
	border-style:			solid;
}
tt.prompt {
	color:					#FFFFAA;
}

/* Ajoute les <> pour les balises sgml/xml :*/
tt.sgmltag-element:before {
	content:			"<";
}
tt.sgmltag-element:after {
	content:			">";
}
tt.sgmltag-element {
	color: 			purple;
}


Note

Une description complète de cette feuille de style sort du cadre de ce document. Référez vous à la documentation sur les Cascaded Style Sheet pour plus d'informations.