Skip to main content

Subsections of ODD Theme

Requirements

Note

The theme can only be installed into an empty Contao installation and is compatible with Contao 4.4 or higher.

Contao 5

Contao system requirements

Version 3.0.0 of the ODD theme requires at least Contao 5.0.0 and PHP 8.0.

Tip

We recommend Contao 5.3 with PHP 8.3 or higher to get the best possible loading time with our theme!

Contao Manager

The ODD theme can easily be installed via the Contao Manager. You find a step-by-step installation guide here: ODD theme installation.

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

License

Buy and register a license

The ODD theme is available for free (with copyright notice) or with a paid license (without copyright notice).

You can buy the paid license at contao-themes.net. Select the option without copyright notice, enter your domain and then click the button Add to cart. Then go to checkout and follow the next steps.

After successful payment (possible payment methods are PayPal, Sofortüberweisung or credit card) you receive an invoice by email and we will activate your domain shortly, so that you can register it in the Contao back end.

Until then you can already install and use the theme with the copyright notice.

Tip

As the holder of a paid license you get premium support if you have problems installing or setting up the theme.

Register the license

Note

If you ordered the theme license via themes.contao.org, please send us an email with your domain and the ordered theme to support[AT]pdir.dev, so that we can activate the theme domain in the back end.

If you bought a license and have already installed the theme, you can register it in the back end under the menu item Themes. Click Activate theme domain, enter your domain and then click Check Domain. If the domain was registered successfully, you see the message Domain registered. When you reload the page, it should look like the following screenshot.

Register the license Register the license

Register the license Register the license

Register the license Register the license

If you only see the message “You can set a Theme Licence in Layout -> Themes.” when you click the button Activate theme domain, you have to edit the theme and enter 0.1 in the field Theme Code (see the following screenshot). The input field for the domain should then be visible.

Enter the theme code Enter the theme code

Once you have bought a license, you can remove the copyright notice, which is placed in an article, in the Contao back end.

Go to the article view, look for the article 03 Copyright under Elemente > 03 Footer and edit it via the pencil icon.

Remove the copyright notice Remove the copyright notice

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Installation

Still using Contao 4? You find the installation guide here.

Contao 4 installation guide
Note

The demo can only be imported into an empty Contao installation.

Note

If you have already created content on your site, see the following guide: Installation into an existing Contao installation.

Installation in Contao 5

Open the Contao Manager: www.your-domain.com/contao-manager.phar.php. In the Discover tab, enter ODD Theme and click Add.

 
In the Packages tab you should now see a new package to be installed. Click the button Apply changes at the bottom to start the installation.

 
Once the installation is finished, click Update database.

 
Run all database migrations and click Continue. The first step creates all folders and files in the file manager.

 
Then the missing fields are created in the database.

 
In the last step the demo data is imported.

Done! When you open your site, you should already see the demo.

 
 

Notes

Error: This page isn’t working / The page redirected you too many times

Edit the website root and set the protocol under URL settings to http:// or https://, depending on how your site should be accessed.

Error: imagick not installed

If the error imagick not installed occurs with PHP 8.0, you can solve it with an adjustment in config.yml and clearing the cache afterwards. More information in the PDIR blog post (German)

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Subsections of Installation

Contao 4

Note

The theme can only be installed into an empty Contao installation and is compatible with Contao 4.4 or higher.

Tip

The following steps are only necessary for the first installation, not for an update of the theme. To update the theme, simply use the Contao Manager. Then open the install tool and update the database. A database backup never hurts!


Steps

1 / Install the ODD Theme Bundle

First open the Contao Manager at the following URL: www.your-domain.com/contao-manager.phar.php. Select Discover, enter odd theme in the search field and add the package ODD Theme.

Then switch to Packages, enter the version ^2.0 via the gear icon and start the installation of the theme with the button Apply changes. With the latest version the Contao Manager would otherwise install version 3.x, which is only compatible with Contao 5 and later.

2 / Update the database

Then open the install tool and update the database. In the install tool you also have to create an admin user account.

You reach the install tool in the Contao Manager via the menu item Tools or via the URL: www.your-domain.com/contao/install.


3 / Synchronize the theme files and empty the table ’tl_files'

Log in to the back end with the user account you created and select the menu item ODD Theme Setup under CONTAO-THEMES-NET in the left navigation. Then click the button Synchronize theme files. This creates all files in the file manager under the folder odd and copies the SQL files for the database import into the templates folder.

Then empty the database table ’tl_files’ by clicking the button Empty table ’tl_files’. This step must be carried out before importing the database.

Note

Emptying the tl_files table deletes the image references. This is only necessary for the first installation of the theme.

Synchronize theme files and empty the table ’tl_files’ Synchronize theme files and empty the table ’tl_files’


4 / Import the database

Now open the install tool. Under the tab “Import a template” you can import an .sql file from the templates directory. Select the file for your Contao version and tick Do not truncate tables. Then click Import a template.

If you chose the minimal Contao installation in the Contao Manager (without news, calendar, newsletter, comments, listing, FAQ), select the SQL file named minimal_installtool.sql.

Import the database Import the database

If the database was imported successfully, you should get a message that a template was imported, as in the following screenshot.

Database imported Database imported

Alternatively, you can import the sql file with phpMyAdmin.


Then switch back to the Contao back end, select the menu item System maintenance and recreate the symlinks by ticking Recreate the symlinks and then clicking the button Purge data.

Recreate the symlinks Recreate the symlinks


6 / Settings

In the Settings, activate Auto_item and Use folder URLs under Front end settings. As of Contao 4.7 the setting to activate auto_item no longer exists in the back end; it is always active by default. As of Contao 4.11 the option “Use folder URLs” is no longer in the settings but in the website root under URL settings.

Settings Settings

Select the class set

In the settings under System -> Settings, select the class set bootstrap4.json in the tab Advanced CSS settings.

Select the class set Select the class set

Done!
Your website should now show the theme’s demo content when you open your domain.

Notes

Error: This page isn’t working / The page redirected you too many times

Edit the website root and set the protocol under URL settings to http:// or https://, depending on how your site should be accessed.

Error: imagick not installed

If the error imagick not installed occurs with PHP 8.0, you can solve it with an adjustment in config.yml and clearing the cache afterwards. More information in the PDIR blog post (German)

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Customization

JavaScript customization

For your own JavaScript, it is best to create a separate file and include it in the theme.

Placing elements with your own insert tag

The page ODD Elements contains articles that you can include anywhere on your website with an insert tag. To get to the articles, click Articles in the left menu and scroll all the way down.

Placing elements with your own insert tag Placing elements with your own insert tag

In the article settings (wrench icon) of the article, select the matching Theme Helper Tag under Template settings.

Selecting the Theme Helper Tag Selecting the Theme Helper Tag

You can then add the article with the following insert tag in an HTML element or template, e.g. {{theme::content::ODD01/01}}.

Including the article with an insert tag Including the article with an insert tag

How to define your own Theme Helper Tags is explained in the Theme Helper documentation.

Customizing the header

You find the header content in the articles under ODD Elements > 01 / Kopfzeile.

You replace the logo in the article 01/01 Logo.

You find the contact details and social media links in the article 01/02 Top Navbar, where you can change them.

Choosing between a straight or slanted header

How to activate the straight header is explained on the page Layouts.

You find the footer content in the articles under ODD Elements > 02 / Fußzeile. These articles are included in the modules Footer / Main and Footer / Copyright.

Customizing colors and fonts

After installing the theme, you find the SCSS files in the file manager under the path odd/scss.

Depending on the installed theme version, there are two ways to make your own customizations:

Older theme versions: You use the files

  • custom.scss (for SCSS and CSS)
  • _custom_colors.scss (to change the base colors and choose a color scheme)
  • _custom_variables.scss (for more detailed adjustments such as fonts or colors of individual elements)

To change a variable, remove the comment characters (slashes) in front of the line in the respective file.

Newer theme versions: As of the latest version there are no SCSS variables anymore, only CSS variables. In addition, _custom_colors.scss was merged into _custom_variables.scss – so you only find one file named _custom_variables.scss. There you can adjust all color and other variables. Here, too, you have to uncomment the lines to activate changes.

In both cases you can still add your own SCSS or CSS in custom.scss.

Tip

If the SCSS file was not edited with the Contao editor but uploaded with an FTP program, you have to purge the script cache under System maintenance in the Contao back end and, if necessary, reload the page with Ctrl + F5.

Note

Do not rename the theme folder odd in the file manager, otherwise the SCSS files will no longer be loaded. You do not have to include the files in the page layout yourself, the theme already loads them automatically.

Color schemes

By default the ODD theme comes with a light layout and a green primary color. You can also choose other color schemes:

  • Light color scheme / green primary color
  • Light color scheme / blue primary color
  • Light color scheme / red primary color
  • Light color scheme / yellow primary color
  • Light color scheme / purple primary color
  • Light color scheme / pastel colors
  • Dark color scheme

All of the color schemes above are adjusted for high contrast to ensure good readability and accessibility.

In addition there is a green, blue and grey color scheme that is not adjusted for high contrast. These come from an earlier theme version and are still included for backward compatibility.

To switch to a different color scheme, uncomment the corresponding line under Colour Schemes in _custom_variables.scss (or _custom_colors.scss in the older theme version) by removing the slashes. You may need to reload the page with Ctrl + F5 for the change to take effect.

@import 'color_schemes/odd_green_colors_contrast';
//@import 'color_schemes/odd_blue_colors_contrast';
//@import 'color_schemes/odd_grey_colors_contrast';
//@import 'color_schemes/odd_red_colors_contrast';
//@import 'color_schemes/odd_yellow_colors_contrast';
//@import 'color_schemes/odd_purple_colors_contrast';
//@import 'color_schemes/odd_pastel_colors_contrast';

//@import 'color_schemes/odd_grey_colors';
//@import 'color_schemes/odd_blue_colors';

Variables

Important note If you use the latest version of the ODD theme, you may wonder where _custom_colors.scss has gone. Don’t worry: as of ODD version 3.7.0, a new installation of the ODD theme only has _custom_variables.scss, which now contains all color and variable definitions.

What this means for you:

  • v2 (new installation from version 3.7.0): A new installation of the theme only has _custom_variables.scss with all color and variable settings. Use CSS variables for your customizations.
  • v1 (version older than 3.7.0 / update from a version older than 3.7.0): If you updated the ODD theme or installed a version older than 3.7.0, both _custom_variables.scss and _custom_colors.scss remain. Use SCSS variables for your customizations.
Tip

ℹ️ How do I update my existing installation to the new version with CSS variables? As of version 3.7.0 the ODD theme was thoroughly adapted for accessibility. If you want to use all current and future features, you should switch to the new version. You find a detailed guide here: Update to CSS variables.

​

In our theme you can adjust many styles via CSS variables. They are already prepared in the stylesheet, but commented out by default (with //). To activate or override a variable, simply remove the // at the beginning of the line.

📁 Where to find the variables You find the file for adjusting the variables in the file manager under odd/scss/_custom_variables.scss.

✅ Example: activating a variable

// Vorher (nicht aktiv):
//--oddColor1: #A3CC00;

// Nachher (aktiv):
--oddColor1: #A3CC00;

🔧 The most important CSS variables Here is an overview of the most important CSS variables that you can adjust in odd/scss/_custom_variables.scss.

VariableMeaning
--oddColor1Primary color, light shade
--oddColor2Primary color
--oddColor3Primary color, dark shade
--oddColor4Secondary color
--oddColor5Secondary color, light shade
--oddColor6Boxes and text
--oddColor7Page background

Base colors in _custom_colors.scss

$oddColor1: Primary color, light shade $oddColor2: Primary color $oddColor3: Primary color, dark shade $oddColor4: Secondary color $oddColor5: Secondary color, light shade $oddColor6: Boxes and text $oddColor7: Page background


Adding a font

If you want to use your own font, you can include it at the very top of _custom_variables.scss.

🔗 Recommendation: fonts via Google Webfonts Helper

A great way to include a font quickly and easily is the site:

👉 Google Webfonts Helper

There you can:

  • choose a font from the Google Fonts library,
  • select the font styles you need,
  • download a ZIP file with the font files,
  • and generate the matching @font-face CSS code right away.
  • Important: Under “Customize Folder prefix”, enter the path to your fonts folder, e.g. /files/odd/fonts/.

📄 Example: adding the CSS to _custom_variables.scss Copy the generated CSS code from the website (e.g. for the font “Ubuntu”) and paste it at the very top of _custom_variables.scss:

/* ubuntu-regular - latin */
@font-face {
  font-display: swap;
  font-family: 'Ubuntu';
  font-style: normal;
  font-weight: 400;
  src: url('/files/odd/fonts/ubuntu-v20-latin-regular.woff2') format('woff2');
}

Then assign the font in the CSS variables in _custom_variables.scss as follows:

​
:root {
  --mainFont: 'Ubuntu', sans-serif;
  --headingFont: 'Ubuntu', sans-serif;
}
$mainFont: 'Ubuntu', sans-serif;
$headingFont: 'Ubuntu', sans-serif;
Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Subsections of Customization

Layouts

Layout with straight header

By default the ODD theme comes with a slanted header. To activate the straight header, select a layout with a straight header in the page settings.

Among the modules there is a navigation module for the slanted and the straight header (Navigationsleiste mit Schräge and Navigationsleiste ohne Schräge), which is included in the respective layouts.

You find an example on the page Layout with straight header.

One- and multi-column layouts

Under Themes > Page layouts various layouts for one-, two- and three-column layouts with a slanted or straight header are already created, which you can assign in the page settings under Layout settings.

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

FAQ

Images

Why is an image not displayed?

The folder in the file manager may not be set to public. You can check this by editing the folder. Public must be ticked, otherwise the image is not displayed in the front end.

Why doesn’t the large view of an image open in a lightbox when I click it?

The theme has to load jQuery and the jQuery template j_colorbox. You can edit the layout in the back end under Themes via the third-to-last icon Edit the page layouts of theme ID 1.

Why are animated GIFs not displayed?

For animated GIFs, do not set an image size in the image settings, otherwise the animation is lost.

How do I add my own image to the social media icons in the header?

In the article 01/02 Top Navbar (at the very bottom under ODD Elements - 01/Kopfzeile), create a new element of type Image inside the content container (see screenshot 1).

In the element settings, set an image size, e.g. Fit the frame / 40px. Activate Overwrite metadata and set a link under Image link address. In the expert settings, also set the class icon (see screenshot 2).

Finally, add the following CSS code to custom.scss.

In the end it should look like the third screenshot.

Screenshot 1:

Screenshot 2:

Screenshot 3:

How do I define a second logo for the narrow navigation bar?

In the article 01/01 Logo (under ODD Elemente - 01 / Kopfzeile), add a second image element and give it e.g. the class stuck-logo (the second input field under Expert settings).

Now add the following CSS to custom.scss:

Contao 5.0 and later

.stuck-logo {
  display: none;
} 

.stuck .stuck-logo { display: block; }

.stuck .navbar-brand .content-image:not(.stuck-logo) { display: none; }

Up to Contao 4.13

.stuck-logo {
  display: none;
} 

.stuck .stuck-logo { display: block; }

.stuck .navbar-brand .ce_image:not(.stuck-logo) { display: none; }

A different logo should now be displayed when you scroll down from the top and the narrow navigation bar appears.

Why are some images not displayed? (WEBP support)

If newer browsers try to load a WEBP image and it is not supported, an error may occur.

The error message may look something like this:

request.CRITICAL: Uncaught PHP Exception RuntimeException: "Image format "webp" is not supported in Imagine\Imagick\Imagine on this environment. Consider removing this format from contao.image.valid_extensions or switch the contao.image.imagine_service to an implementation that supports it. 

Possible solutions:

#1 Update Imagine or have your host do it (use the latest version)

#2 Use an alternative image processing service

You can specify a different image processing service in config.yml; afterwards the cache has to be cleared. This often solves the problem already. If WEBP is supported, you should also be able to select it in the image sizes.

contao:
    image:
        imagine_service: 'contao.image.imagine.gd'

or

contao:
    image:
        imagine_service: 'contao.image.imagine.gmagick'

#3 Remove WEBP from the allowed file extensions

Add the following to config.yml and then clear the cache.

contao:
    image:
        valid_extensions:  
            - jpg
            - jpeg
            - gif
            - png
            - tif
            - tiff
            - bmp
            - svg
            - svgz

#4 Adjust the .htaccess

<IfModule mod_mime.c>
   AddType image/webp .webp
</IfModule>

Labels & translations

How do I change the read-more link of events or translate it into other languages?

You can either edit the template event_list_odd.html5 or event_teaser_odd.html5 directly or override it in langconfig.php (only from ODD theme version 1.4.2).

Edit the file langconfig.php under system/config, or create it if it does not exist yet. You can override the text with the following line:

<?php
$GLOBALS['TL_LANG']['odd']['event_more_link'] = "Details";

Or as follows to override it e.g. in a specific language:

<?php
if ($GLOBALS['TL_LANGUAGE'] == 'en') {
    $GLOBALS['TL_LANG']['odd']['event_more_link'] = "Details";
}

Display

How do I remove the slanted edges?

Removing the slanted edges in the header

There are already several layouts to switch between a straight and a slanted header. Among the modules there is also a navigation module with and without a slant, which you can select in the layout under the included modules.

Removing the slanted edges of content elements

The page Elements with slanted edges shows how to adjust the slanted edges of content elements. You only have to remove the classes skw-**.

Edit the module Footer / Main and remove the class skw-tr.

Removing the slanted edges of the newsletter area

For the newsletter area above the footer, edit the module Newsletter / Abonnieren / Startseite and remove the class skw-tl under Expert settings.

How do I prevent all headings from being displayed in uppercase?

Add the following CSS to custom.scss and then reload the page with Ctrl + F5:

h1, h2, h3, h4, h5, h6 {
	text-transform: inherit;
} 
How do I remove the newsletter area above the footer?

You can deactivate the newsletter area in the corresponding page layout under Included modules with the eye icon or remove it with the cross.

Other

How do I show a Google Maps map?

Install the extension Google Maps. In the back end you then find a menu item Google Maps where you can create your map.

With a content element (Media elements -> Google Map) you include the map at the desired place in an article.

You can enter the API key in the settings under Google Maps.

This is what it could look like:

How do I prevent the theme CSS file from being cached?

Visitors who have already visited the website are usually served a cached file. If you want to prevent this, you can adjust the fe_page template.

Adjust the following template: fe_bootstrap_odd.html5.

To prevent the CSS file from being cached, you can append a timestamp to the file name, for example. In the line echo $combiner->getCombinedFile(); ?>">, insert the following before the quotation marks: ?date=<?= time() ?>

It should look like this:

<link rel="stylesheet" type="text/css" media="all" href="<?php
// add stylesheets
$combiner = new Combiner();
$combiner->add('bundles/pdirthemeodd/bootstrap/dist/css/bootstrap.min.css');

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { $combiner->add('bundles/pdirthemeodd/scss/odd_win.scss'); } else { $combiner->add('bundles/pdirthemeodd/scss/odd.scss'); }

echo $combiner->getCombinedFile(); ?>?date=<?= time() ?>">

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Multidomain

If several domains in one Contao installation should use the ODD theme, this is possible with a few workarounds.

The goal of this guide is for each domain to have its own custom.scss, _custom_colors.scss and _custom_variables.scss.

Note

As of Contao 4.12 the publicly accessible subfolder was renamed from /web to /public. If your installation has a /web directory, use web instead of public in the following code examples.

1) Create the SCSS files

Create a folder in the file manager under odd/scss (e.g. domain2). Copy the files custom.scss, _custom_colors.scss and _custom_variables.scss into this folder.

In _custom_colors.scss, adjust the path of the color schemes as follows.

//@import '../../../../public/bundles/pdirthemeodd/scss/color_schemes/odd_grey_colors';
//@import '../../../../public/bundles/pdirthemeodd/scss/color_schemes/odd_blue_colors';

In the same folder, also create a file odd.scss with the following content.

@charset "UTF-8";

@font-face {
  font-family: 'Cabin';
  font-display: swap;
  src: local('Cabin'),
  url('/bundles/pdirthemeodd/fonts/Cabin/cabin-regular-webfont.woff2') format('woff2'),
  url('/bundles/pdirthemeodd/fonts/Cabin/cabin-regular-webfont.woff') format('woff'),
  url('/bundles/pdirthemeodd/fonts/Cabin/cabin-regular-webfont.ttf') format('ttf'),
  url('/bundles/pdirthemeodd/fonts/Cabin/cabin-regular-webfont.eot') format('eot');
}

@font-face {
  font-family: 'Muli';
  font-display: swap;
  src: local('Muli'),
  url('/bundles/pdirthemeodd/fonts/Muli/muli-regular-webfont.woff2') format('woff2'),
  url('/bundles/pdirthemeodd/fonts/Muli/muli-regular-webfont.woff') format('woff'),
  url('/bundles/pdirthemeodd/fonts/Muli/muli-regular-webfont.ttf') format('ttf'),
  url('/bundles/pdirthemeodd/fonts/Muli/muli-regular-webfont.eot') format('eot');
}

@import "../../../../public/bundles/pdirthemeodd/scss/_odd_colors";
@import "_custom_colors";
@import "../../../../public/bundles/pdirthemeodd/scss/_odd_variables";
@import "_custom_variables";

@import '../../../../public/bundles/pdirthemeodd/scss/style';

@import 'custom';

2) Create a template

Under Templates, create a new template fe_page_odd.html5 and rename it (e.g. fe_page_odd_domain2.html5).

In line 41, add the newly created folder from the file manager to getCombinedStylesheet().

<link rel="stylesheet" type="text/css" media="all" href="<?= ContaoThemesNet\ThemeOddBundle\ThemeUtils::getCombinedStylesheet('domain2'); ?>">

3) Create a layout

Go to Themes and Edit the page layouts of the theme and duplicate any layout. Edit the layout and select the fe_page template you just created under Expert settings (at the very bottom) in Page template.

4) Assign the layout to the page

Finally, assign the layout to a page (Layout settings -> Assign a layout).

5) ODD Elements

In the article settings of the header and footer content (under ODD Elements) you can select the corresponding page under Template settings so that the content of this article is actually used.

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Update to CSS variables

With version 3.7.0 the ODD theme was made accessible and all SCSS variables were switched to CSS variables. This means a manual intermediate step is necessary when updating from an older version (< 3.7.0) to a newer version (≥ 3.7.0).


Requirements

  • Existing installation of the ODD theme < 3.7.0
  • Update to Contao 5

1. Update the theme

  1. Open the Contao Manager.
  2. Update the ODD theme to 3.7.0 or higher (recommended: latest version).

2. Changes to the SCSS files

As of version 3.7.0 the file _custom_colors.scss no longer exists. All color definitions are now in _custom_variables.scss.

📂 Old structure (< 3.7.0)

odd/scss/
├── custom.scss
├── _custom_variables.scss
└── _custom_colors.scss

📂 New structure (≥ 3.7.0)

odd/scss/
├── custom.scss
└── _custom_variables.scss

3. Create the new theme files

After the update to 3.7.0 or higher the site still works, but not all new features are available right away. You should therefore create the current theme files.

Complete re-import of the theme folder

  1. In the file manager, rename the folder odd, e.g. to odd-alt.
  2. In the Contao Manager, open System maintenance → Check database and run the database update.
  3. The migration that creates the new theme files is now offered – run it.
  4. A new folder odd with the current files is created.

Moving images: If there were images in the old odd folder, move them either into the new folder or into a separate image folder. References are kept if the images were added in Contao via “Add an image”.


4. Transfer your own customizations

If you made changes in custom.scss, _custom_colors.scss or _custom_variables.scss, you have to transfer them manually to the new files.

Important: V2 uses CSS variables instead of SCSS variables.

Example color variable

Before (V1 – SCSS):

$oddColor1: #b6cf92;

New (V2 – CSS variables):

:root {
  --oddColor1: #b6cf92;
}

CSS variables are used in code like this:

color: var(--oddColor1);

5. Update SCSS customizations

If your custom.scss still uses SCSS variables ($variable), change them to the CSS variable format (var(--variable)).

Example:

/* Vorher */
color: $oddColor1;

/* Neu */
color: var(--oddColor1);

Accessibility

You find detailed tips, new features from version 3.7.0 and best practices for accessible design here: ♿ Accessibility in the ODD theme


Direct download of the new variables file

You find the current _custom_variables.scss here: 📄 GitHub: _custom_variables.scss

If you want to adjust the files manually, the odd folder must also contain an empty file named .v2 to activate the V2 structure.

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Accessibility

Accessibility in the ODD theme (version 3.7.0 and later)

With version 3.7.0 the ODD theme was thoroughly revised with regard to accessibility and switched to CSS variables. To use these features, a manual intermediate step is necessary when updating from an older version (< 3.7.0) to a newer version (≥ 3.7.0). ➡️ Guide: Update to CSS variables


1. New accessible templates (version 3.7.0 and later)

To avoid redundant links (e.g. image, headline and button all linked), it is enough to link only the button. This improves keyboard navigation.

Adapted templates are available for various content elements such as teaser box, content box etc. These templates have the suffix _bf (German “barrierefrei”, accessible).


2. General accessibility tips

When creating content, pay attention to the following:

  • Provide alternative texts (alt tags) for images
  • Use meaningful link texts (not just “click here”)
  • Mind the contrast (text color/background color)
  • Use headings in a correct hierarchy
  • Use tables only for tabular data (not for layout)
  • Give forms label elements

3. Tools for testing accessibility

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Subsections of Elements

Content Box

To add a content box, place an element of type Content Box.

Content box Content box

To display several elements side by side, place them as described in the section Grid. You find an example in the ODD demo on the page Weitere ODD-Elemente.

Content box Content box

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Content Slider

The content slider must always be placed in its own article, which needs the classes slider and fullwidth under Expert settings. If the slider should also get a slant to the bottom right or left, give the article the class skw-br or skw-bl as well, see the table below.

Content slider Content slider

In the article, place the elements Content-Slider (Umschlag Anfang) (wrapper start) and Content-Slider (Umschlag Ende) (wrapper stop). Between the wrapper elements, place one element of type Slider-Element per slide.

Content slider Content slider

Content slider Content slider

Add the image via the checkbox Add an image. If the slider should have a slant, also select the image size Slider mit Schräge (1920x900); for a slider without a slant, select the image size Slider (1920x750).

Content slider Content slider

Reference table for the article classes:

SliderClasses in the articleScreenshot
without slantslider fullwidthContent slider Content slider
with slant bottom leftslider fullwidth skw-blContent slider Content slider
with slant bottom rightslider fullwidth skw-brContent slider Content slider

You find an example with a content slider on the page Content-Slider or on the home page of the ODD demo.

Positioning the text box

You can adjust the position of the text box by adding a class.

  • top-left: top left
  • top-center: top center
  • top-right: top right
  • center-left: center left
  • center-center: center
  • center-right: center right
  • bottom-left: bottom left
  • bottom-center: bottom center
  • bottom-right: bottom right

Content slider Content slider

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Elements with slanted edges

The page Elemente mit Schrägen already contains various examples of elements with slanted edges.

Each section must be in its own article, which needs various classes:

primary-bg: background color
skw-tl: slant to the top left
skw-tr: slant to the top right
skw-bl: slant to the bottom left
skw-br: slant to the bottom right

For example, to give the article slants to the top right and bottom right (like the first example on the demo page), add the classes primary-bg skw-tr skw-br in the article settings under Expert settings.

Content box Content box

Reference table for the article classes:

SlantClasses in the articleScreenshot
top right - bottom rightprimary-bg skw-tr skw-br
top left - bottom leftprimary-bg skw-tl skw-bl
top left - bottom rightprimary-bg skw-tl skw-br
top right - bottom leftprimary-bg skw-tr skw-bl
top rightprimary-bg skw-tr
bottom rightprimary-bg skw-br
top leftprimary-bg skw-tl
bottom leftprimary-bg skw-bl
Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Grid

The theme uses Bootstrap 4, which lets you, among other things, display elements side by side and at the same time in a single column on mobile devices.

For example, to display two text elements side by side, first add one element each of type Contao Themes (Inhaltscontainer Anfang) (content container start) and Contao Themes (Inhaltscontainer Ende) (content container end). The content container start element needs the class row.

Content container Content container

Content container with row class Content container with row class

Between the wrapper elements, place two text elements and select .col-12 and .col-md-6 under Advanced CSS classes > Column widths for each. This means the elements are displayed in one column below a width of 768px and in two columns above it. How exactly to use the classes is explained in the Bootstrap 4 documentation.

Grid elements Grid elements

Grid element classes Grid element classes

You find an example in the ODD demo on the page Textelemente.

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Header image

To place a header image, use the element type Image and select the template ce_image_headerimage_odd (up to Contao 4.13) or content_element/image/header_image_odd (Contao 5 and later) under Template settings.

Header image without slant

For a header image without a slant, select the image size Headerbild (1920x400). You have to place the header image in its own article and select the template mod_article_fullwidth in the article settings.

You find an example on the page Headerbild ohne Schräge.

Header image with slant to the left

For a header image with a slant to the left, select the image size Headerbild (1920x400). You have to place the header image in its own article, select the template mod_article_fullwidth in the article settings and add the class skw-bl under Expert settings.

You find an example on the page Headerbild mit Schräge nach links.

Header image with slant to the left Header image with slant to the left

Header image with slant to the right

For a header image with a slant to the right, select the image size Headerbild (1920x400). You have to place the header image in its own article, select the template mod_article_fullwidth in the article settings and add the class skw-br under Expert settings.

You find an example on the page Headerbild mit Schräge nach rechts.

Header image with slant to the right Header image with slant to the right

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Headings

You find examples of the headings on the page Textelemente.

Underlined, left-aligned

To display the heading left-aligned and underlined, give the text element the class bordered-heading.

Underlined, left-aligned Underlined, left-aligned

Underlined, centered

To display the heading centered and underlined, give the text element the classes bordered-heading and text-sm-center.

You can set the class text-sm-center under Advanced CSS classes > Alignment.

Underlined, centered Underlined, centered

Underlined, centered Underlined, centered

Underlined, right-aligned

To display the heading right-aligned and underlined, give the text element the classes bordered-heading and text-sm-right.

You can set the class text-sm-right under Advanced CSS classes > Alignment.

Underlined, right-aligned Underlined, right-aligned

Underlined, right-aligned Underlined, right-aligned

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Hyperlinks

If you give a link the class btn, it is displayed as a button.

Button Button

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Pricing table

To display a pricing table, place an element of type Preis-Tabelle (pricing table).

Pricing table element Pricing table element

To highlight a box, fill in the field Bezeichnung für Hervorgehobene Box (label for highlighted box). To display several elements side by side, place them as described in the section Grid. You find two examples in the ODD demo on the page Weitere ODD-Elemente.

Three columns

Pricing table, three columns Pricing table, three columns

Two columns

Pricing table, two columns Pricing table, two columns

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Simple box

If you select the template ce_text_cthemes_simplebox under Template settings of a text element, it gets a white background as in the following screenshot.

To display several elements side by side, place them as described in the section Grid. You find an example in the ODD demo on the page Weitere ODD-Elemente.

Simple box Simple box

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Teaser Box

To add a teaser box, place an element of type Teaser Box.

Teaser box Teaser box

Add the image via the checkbox Add an image. Select the image size Teaserboxen (350x200).

Teaser box Teaser box

To display several elements side by side, place them as described in the section Grid. You find an example in the ODD demo on the page Weitere ODD-Elemente.

Teaser box Teaser box

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Text with icons

Place an element of type Text und Icon (text and icon).

Text with icon Text with icon

You can define a headline, a text, the Font Awesome icon and optionally a link. You find a list of available icons on the Font Awesome website. When you click an icon, you also see the classes at the top that you have to enter in the field Font Awesome 5 Icon (Klassen).

Text with icon Text with icon

You find an example in the ODD demo on the page Weitere ODD-Elemente.

Text with icon Text with icon

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Modules

This page explains all modules and how you can use them.

The following modules are explained on this page:

Events

Event list

Follow these steps to place an event list:

  • Select the module Event list (under Events)
  • Configure the settings (calendars, number of events etc.)
  • Select the event template (Template settings)
  • event_teaser_zeroone (event list with images)
  • event_list_zeroone (event list without images)
  • event_upcoming (simple event list with date and title only)
  • Select the custom template mod_eventlist_zeroone (Template settings)
  • Select the image size News & Events / Listenansicht (Image settings)
  • Add the CSS class columns (second input field) (Expert settings)
  • Include it in an article via the element type Module

Event reader

Follow these steps to place the event reader (detail view):

  • Select the module Event reader (under Events)
  • Select the calendars
  • Select the event template event_full_zeroone (Template settings)
  • Select the image size News & Events / Detailansicht (Image settings)
  • Include it in an article via the element type Module

Calendar

Follow these steps to place a calendar:

  • Select the module Calendar (under Events)
  • Configure the settings (calendars, first day of the week, redirect page etc.)
  • Select the calendar template (Template settings)
  • cal_default (regular calendar)
  • cal_mini (mini calendar)
  • Select the custom template mod_calendar_zeroone (Template settings)
  • Include it in an article via the element type Module

The ODD theme uses Headroom.js to hide or show the navigation when you scroll down or up. To deactivate this, edit the template fe_bootstrap_odd and delete or comment out the following line near the end of the file.

$combiner->add('bundles/pdirthemeodd/js/headroom.min.js');

<script charset="utf-8" src="<?php
    // add javascripts
    $combiner = new Combiner();
    $combiner->add('bundles/pdirthemeodd/bootstrap/dist/js/bootstrap.min.js');
    $combiner->add('bundles/pdirthemeodd/fontawesome/js/all.min.js');
    //$combiner->add('bundles/pdirthemeodd/js/headroom.min.js');
    $combiner->add('bundles/pdirthemeodd/js/scripts.min.js');
    echo $combiner->getCombinedFile();
?>"></script>

In the same way you could also deactivate Font Awesome by removing the following line.

$combiner->add('bundles/pdirthemeodd/fontawesome/js/all.min.js');


News

News list

Follow these steps to place a news list:

  • Select the module Newslist (under News)
  • Configure the settings (archives, number of items etc.)
  • Select the news template (Template settings)
  • news_latest_zeroone (news list with images)
  • news_short_zeroone (news list without images)
  • news_simple (simple news list with date/author and title only)
  • Select the custom template mod_newslist_zeroone (Template settings)
  • Select the image size News & Events / Listenansicht (Image settings)
  • Add the CSS class columns (second input field) (Expert settings)
  • Include it in an article via the element type Module

News reader

Follow these steps to place the news reader (detail view):

  • Select the module Newsreader (under News)
  • Configure the settings (archives, fields)
  • Select the news template news_full_zeroone (Template settings)
  • Select the image size News & Events / Detailansicht (Image settings)
  • Include it in an article via the element type Module

Newsletter

Follow these steps to place a newsletter form:

  • Select the module Subscribe or Unsubscribe (under Newsletter)
  • Configure the settings (channels, redirect etc.)
  • Select the newsletter template nl_default_zeroone (Template settings)
  • Include it in an article via the element type Module

Search engine

Follow these steps to place a search engine:

  • Select the module Search engine (under Applications)
  • Configure the settings
  • Select the custom template mod_search_zeroone (Template settings)
  • Include it in an article via the element type Module
Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Subsections of Modules

Maklermodul

The ODD theme already ships templates and stylesheets for the Maklermodul (real estate module).

Documentation

The Maklermodul documentation contains all information on installing and setting up the Maklermodul.

Including the stylesheets

Add the following line to custom.scss (/files/odd/scss) so that the list and detail view are displayed as in the screenshots.

@import 'maklermodul';

Setup

Creating pages

First create one page each for the list view and the detail view.

List view module

Create a module of type Immobilienliste (property list) as described in the documentation.

  • Select the property template makler_list_odd
  • Select the image size Maklermodul / Listenansicht

List view module List view module

Detail view module

Create a module of type Expose as described in the documentation.

  • Select the property template makler_details_extended_odd

Detail view module Detail view module

Header image module

Create a module of type MaklerModul Kopfbild (header image) as described in the documentation.

Header image module Header image module

Placing the modules

Place the modules for the list view and the exposé in the articles of the respective pages. For the header image, create another article placed in the header (above the article of the detail view).

Placing the modules Placing the modules

For the articles of the header image and the detail view, select the template mod_article_fullwidth in the article settings (wrench icon) under Template settings.

Placing the modules Placing the modules

Customizations

Always show the filters in the list view

If the filters in the list view should always be visible instead of only after clicking the button “Filter ausklappen”, you can achieve this with a small template change. Create the template makler_list_odd and remove the following two lines at around line 41:

<a href="<?= $this->staticListPage ?>" class="btn toggle-filter show-filter active">Filter ausklappen</a>
<a href="<?= $this->staticListPage ?>" class="btn toggle-filter hide-filter">Filter einklappen</a>

Examples

If you carried out all steps as described, the list should be displayed as in the following screenshots.

List view with button filter

List view with button filter List view with button filter

List view with select filter

List view with select filter List view with select filter

Exposé

Exposé Exposé

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Multilingual sites

To build a multilingual website with the ODD theme, you can install the extension Contao Multilingual Pages [i18nl10n]. Then you do not have to duplicate the site structure, only the elements that are displayed in different languages. You find documentation for Contao 3 here; there is none for Contao 4 yet.

Alternatively, you can create a site structure for each language without this extension. You find more about this in the Contao manual.

Contao Multilingual Pages [i18nl10n]

If you do not want to duplicate the site structure, install the extension exploreimpact/contao-i18nl10n with the Contao Manager.

In the website root of the site structure you can select the alternative languages under i18nl10n settings.

Under the menu item Multilingual pages, add the pages in the other languages. To create all pages, click L10N for all.

The elements now have the option to select the language under L10n settings. Select Neutral if the element should be displayed in all languages.

Duplicating the site structure

If you prefer to work with several site structures, select the corresponding website root under ODD Elements in the article settings under Template settings.

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Social Feed Bundle

Social Feed Bundle

With the Social Feed Bundle you can display posts from Facebook and Instagram in the ODD theme. Simply install the package pdir/social-feed-bundle via the Contao Manager.

How to set up the Facebook stream and how to place the modules is explained on the following page: Social Feed documentation.

When setting up the news module, select news_social_feed_odd as the news template.

One column

Two columns

Three columns

Four columns

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Update

You can update the theme easily via the Contao Manager. Then open the install tool and update the database.

Tip

A database backup beforehand never hurts!

Update from version 1.x to 2.x

When updating the theme from version 1 to 2, a few changes are necessary, because Contao Bootstrap and Bootstrap Grid are no longer dependencies of the theme in version 2.

Changing the page template

In the page layouts, the page template fe_page_odd (one column), fe_page_odd_left (two columns with left column), fe_page_odd_right (two columns with right column) or fe_page_odd_three_columns (three columns) must be selected (previously fe_bootstrap_odd).

Adjusting the navigation modules

For the navigation modules (e.g. Navigationsleiste mit Schräge and Navigationsleiste ohne Schräge), the module type must be changed to Navigation menu.

As module template, mod_navigation_odd_sloping (navigation with slant), mod_navigation_odd (without slant) or mod_navigation_odd_sloping_topright (slant in the opposite direction) must be selected.

As navigation template, nav_default_odd must be selected.

Adjusting the user modules

If the module types Registration or Personal data are used, member_grouped must be selected as the template (previously member_grouped_bs_odd).

If a Bootstrap gallery was used, the element type must be changed to a regular gallery.

Nov 9, 2026 Spare Zeit bei allen Webprojekten mit pdir+

Issues

If you ran into problems during installation or setup, or you found a display error of the theme in a particular browser, please create a new ticket at:

Ticket overview Create a new ticket

Note

Please check beforehand whether your issue is already known.