We style the UI with the help of the HTML5 Boilerplate CSS
and the browser style normalization file normalize.css.
The two CSS files main.css and
normalize.min.css are located in the
WebContent/resources/css folder.
Adding the CSS to the HTML pages requires to edit the
WebContent/WEB-INF/templates/page.xhtml file and add
the style elements referencing the CSS files:
<h:head>
<title>Public Library</title>
<link rel="stylesheet" type="text/css"
href="#{facesContext.externalContext.requestContextPath}/
resources/css/normalize.min.css" />
<link rel="stylesheet" type="text/css"
href="#{facesContext.externalContext.requestContextPath}/
resources/css/main.css" />
</h:head>Notice that we also need to add the CSS to the
WebContent/views/books/index.xhtml file, which is not
generated with the page.xhtml template. The
facesContext.externalContext.requestContextPath expression
allows to get the path to WebContent folder. We then
need to append the rest of the path, including the CSS file name, for each
of the CSS files.
With JSF, there are two main ways to apply CSS styles to specific
elements. For the elements created with JSF, we need to use the
@styleClass attribute, e.g.:
<h:form id="createBookForm" styleClass="clearfix">
...
</hform>For the HTML elements, we simply use the CSS classes, as in any normal HTML document, e.g.:
<div class="wrapper clearfix">
...
</div>For creating advanced user interfaces, additional block elements
that act as containers are used for defining paddings, margins, various
background colors and other styles. Thus, in various HTML pages you may
find DOM structures as shown below, where the div element
containing the @class attribute is used as container for
styling purposes:
<header>
<div class="wrapper clearfix">
<div class="title">
<ui:insert name="headerTitle"/>
</div>
<ui:insert name="headerMenu">
<ui:include src="/WEB-INF/templates/header.xhtml" />
</ui:insert>
</div>
</header>