Themes for the template system J1 are based on the free and open-source CSS front-end framework Bootstrap of version V5. Bootstrap is an HTML, CSS & JS Library that focuses on simplifying the development of modern web pages. The primary purpose of applying the framework to J1 is to provide a general standard for colors, sizes, fonts, and the overall layout of a J1-based site. Bootstrap provides basic style definitions for all commonly used HTML elements.
Using Bootstrap base style only results in a uniform appearance for the content in terms of the overall layout, text, tables, and form elements across all modern web browsers available on the market. In addition, developers can take advantage of CSS classes defined in Bootstrap to customize content individually.
The themes feature for J1 is in an experimental state for the template system. Anyway, it makes sense to present what is possible using different versions of Bootstrap’s CSS styles for a website.
The Themes menu
Themes step in the framework to further adjust the website’s appearance based on the core CSS rules and definitions of Bootstrap. Themes do not change the framework’s functionality but modify rule-based, e.g., the color scheme, fonts, sizes, or the appearance of more complex elements like forms or tables. Additionally, a theme may add additional components but in the sense of Bootstrap’s framework rules and philosophy.
It is expected that many people will change the template for their needs. To create unique websites. Fundamental to do this is are CSS styles defined by Bootstrap.
Modifying the CSS styles of Bootstrap is not rocket science. But, to be honest, some knowledge is needed for the CSS technology to do so. We encourage you to spend some time first on learning CSS. To learn what is the design base of each and every website.
Thanks to the people at Bootswatch, a great set of already prepared Bootstrap stylesheets in various designs are available on their website. There is no need to start from scratch, re-define all the Bootstrap variables, and rebuild the framework files to create a new theme. Many different styles are available. What is already available at Bootswatch is at least a good base for your modifications; your unique design.
Besides the bunch of different stylesheets at Bootswatch, an Integration API is available that helps a lot to integrate available designs into an existing site. This API is the base to integrate selectable Bootswatch stylesheets into the J1 Template navigation system for easy use.
Apply a theme
The base for designing pages using the J1 Template is the theme Uno, a modern light theme used for many types of websites. And what we mentioned already, web design is not: one size fits all. The theme Uno can be seen as a good base, a starting point. Combining Uno and a different theme may be a fast solution for your site!?
You can find all available themes and stylesheets on your pages from the menu Themes. You’re invited to check how a page is changing for its design if other stylesheets, other ideas of web design are used.
Changing BS-based styles is one thing. Changing from one theme to the next at runtime is a bit more challenging. For the first version of the J1 Template, many styles are automatically changed for J1 specific components, but not all of them for now. |
Select a theme from this menu, and a new BS-based stylesheet is automatically applied to your pages.
Code Highlighter Rouge
Rouge is a pure Ruby and themeable syntax highlighter. It can highlight 100+ different languages and output HTML or ANSI 256-color text. Find all available themes and examples for several languages of how highlighting works using Rouge.
For the default theme Uno
of J1 Template, the following Rouge themes are used:
-
light:
igorpro
-
dark:
monokai.sublime
The default themes used for the J1 Template can be configured with the global template config file ~/_data/j1_config.yml . |
Apply a theme
Make a selection of a theme below to preview.
Highlight Liquid code
Hello {{ 'now' | date: "%Y %h" }}
{% comment %} if item.quantity is 4... {% endcomment %}
{% for i in (1..item.quantity) %}
{{ i }}
{% endfor %}
Highlight Javascript code
// helper functions
//
function styleSheetLoaded(styleSheet) {
var sheets = document.styleSheets,
stylesheet = sheets[(sheets.length - 1)];
// find CSS file 'styleSheetName' in document
for(var i in document.styleSheets) {
if(sheets[i].href && sheets[i].href.indexOf(styleSheet) > -1) {
return true;;
}
}
}
Highlight Ruby code
require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
include Asciidoctor (1)
Asciidoctor::Extensions.register do
class J1BlockMacro < Extensions::BlockMacroProcessor
use_dsl
named :banner
name_positional_attributes 'role'
def process parent, target, attrs
html = %(<div id="#{target}" class="#{attrs['role']}"></div>)
create_pass_block parent, html, attrs, subs: nil
end
end
block_macro J1BlockMacro
end
1 | don’t miss to load the Asciidoctor ruby |
What next
Using a theme, the character of a website can change a lot. If you don’t want to support multiple themes with your site, a theme is a good base to create your theme, anyway.
An important feature for larger webs is searching. The visitors should be able to search your site to find pages and posts they are interested in. Check what is searching a J1 website all about at Quicksearch.