summaryrefslogtreecommitdiffstats
path: root/documentation/themes/themes-overview.asciidoc
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/themes/themes-overview.asciidoc')
-rw-r--r--documentation/themes/themes-overview.asciidoc77
1 files changed, 77 insertions, 0 deletions
diff --git a/documentation/themes/themes-overview.asciidoc b/documentation/themes/themes-overview.asciidoc
new file mode 100644
index 0000000000..05005ab83b
--- /dev/null
+++ b/documentation/themes/themes-overview.asciidoc
@@ -0,0 +1,77 @@
+---
+title: Overview
+order: 1
+layout: page
+---
+
+[[themes.overview]]
+= Overview
+
+Vaadin separates the appearance of the user interface from its logic using
+__themes__. Themes can include Sass or CSS style sheets, custom HTML layouts,
+and any necessary graphics. Theme resources can also be accessed from
+application code as [classname]#ThemeResource# objects.
+
+Custom themes are placed under the [filename]#VAADIN/themes/# folder of the web
+application (under [filename]#WebContent# in Eclipse or
+[filename]#src/main/webapp# in Maven projects). This location is fixed -- the
+[filename]#VAADIN# folder contains static resources that are served by the
+Vaadin servlet. The servlet augments the files stored in the folder by resources
+found from corresponding [filename]#VAADIN# folders contained in JARs in the
+class path. For example, the built-in themes are stored in the
+[filename]#vaadin-themes.jar#.
+
+<<figure.themes.theme-contents>> illustrates the contents of a theme.
+
+[[figure.themes.theme-contents]]
+.Contents of a Theme
+image::img/theme-contents-hi.png[]
+
+The name of a theme folder defines the name of the theme. The name is used in
+the [literal]#++@Theme++# annotation that sets the theme. A theme must contain
+either a [filename]#styles.scss# for Sass themes, or [filename]#styles.css#
+stylesheet for plain CSS themes, but other contents have free naming. We
+recommend that you have the actual theme content in a SCSS file named after the
+theme, such as [filename]#mytheme.scss#, to make the names more unique.
+
+We also suggest a convention for naming the folders as [filename]#img# for
+images, [filename]#layouts# for custom layouts, and [filename]#css# for
+additional stylesheets.
+
+Custom themes need to extend a base theme, as described in
+<<dummy/../../../framework/themes/themes-creating#themes.creating,"Creating and
+Using Themes">>. Copying and modifying an existing theme is also possible, but
+it is not recommended, as it may need more work to maintain if the modifications
+are small.
+
+You use a theme by specifying it with the [literal]#++@Theme++# annotation for
+the UI class of the application as follows:
+
+
+[source, java]
+----
+@Theme("mytheme")
+public class MyUI extends UI {
+ @Override
+ protected void init(VaadinRequest request) {
+ ...
+ }
+}
+----
+
+A theme can contain alternate styles for user interface components, which can be
+changed as needed.
+
+In addition to style sheets, a theme can contain HTML templates for custom
+layouts used with [classname]#CustomLayout#. See
+<<dummy/../../../framework/layout/layout-customlayout#layout.customlayout,"Custom
+Layouts">> for details.
+
+Resources provided in a theme can also be accessed using the
+[classname]#ThemeResource# class, as described in
+<<dummy/../../../framework/application/application-resources#application.resources.theme,"Theme
+Resources">>. This allows displaying theme resources in component icons, in the
+[classname]#Image# component, and other such uses.
+
+
+