The Chameleon skin can be highly customized. There are two main areas that you can change:
- Layout (defined by a XML file)
- Styles (defined by SCSS files and/or SCSS variables)
The layout of the page elements (nav bar, logo, search bar, etc.) is defined in an XML file. There are currently five pre-defined layouts available:
They can be activated by setting the
variable $egChameleonLayoutFile
in LocalSettings.php.
For example, to activate the fixedhead
layout you could add
$egChameleonLayoutFile= __DIR__ . '/skins/chameleon/layouts/fixedhead.xml';
To select a specific layout different from the one defined in
$egChameleonLayoutFile
you can add the uselayout
parameter to the URL.
However for some wikis it might not be desirable to have this feature. So to
make this work you have to define the available layouts in
LocalSettings.php. E.g. to include all layouts delivered with Chameleon add
$egChameleonAvailableLayoutFiles = [
'standard' => __DIR__ . '/skins/chameleon/layouts/standard.xml',
'navhead' => __DIR__ . '/skins/chameleon/layouts/navhead.xml',
'fixedhead' => __DIR__ . '/skins/chameleon/layouts/fixedhead.xml',
'stickyhead' => __DIR__ . '/skins/chameleon/layouts/stickyhead.xml',
'clean' => __DIR__ . '/skins/chameleon/layouts/clean.xml',
];
You can of course also define and use your own layout. To start have a look at the documentation of the components and at the exisiting layout description files.
Requires Chameleon version 3.2.0 or later.
A theme is a collection of predefined styles and by default Chameleon comes
with a light theme. It is possible to override that by setting the
$egChameleonThemeFile
variable. This can either be an empty string to
restore Bootstrap defaults or it can be an absolute path to a SCSS file.
This can be used to load an existing Bootstrap theme from somewhere like Bootswatch or to totally replace the default light styling with a project-specific theme.
To reset the theme back to Bootstrap defaults, set it to an empty string in
LocalSettings.php
:
$egChameleonThemeFile = '';
Download the United theme _variables.scss
file and save it in the MediaWiki directory under themes/united.scss
Add the following to LocalSettings.php
:
$egChameleonThemeFile = __DIR__ . '/themes/united.scss';
To also load the additional _bootswatch.scss
, save it to
themes/united_bootswatch.scss
and add the following:
$egChameleonExternalStyleModules = [
__DIR__ . '/themes/united_bootswatch.scss' => 'afterMain',
];
You can customize the styles of the skin by
- importing additional SCSS files (for example existing Bootstrap themes)
- and/or by changing existing SCSS variables.
Regardless of the order of the calls, variables will always override imported files.
To import additional SCSS files, add them to the array
$egChameleonExternalStyleModules
in LocalSettings.php
:
$egChameleonExternalStyleModules = [
$localPathToSCSSFile1 => $positionFile1,
$localPathToSCSSFile2 => $positionFile2,
...
];
There are nine allowed values for the position of a file:
beforeFunctions
,functions
,afterFunctions
,beforeVariables
,variables
,afterVariables
,beforeMain
,main
,afterMain
,
These positions influence where a file appears among the compiled files. In
general variable definitions should go in the afterVariables
position. This
way they come after and overrule the definitions of Bootstrap and Chameleon, but
come before and are therefore used for the actual style definitions.
Your own style definitions you want to put in the afterMain
position to allow
them to overrule the styles of Bootstrap and Chameleon.
If you don't care where in the order of files your file appears you may omit the position. Just write:
$egChameleonExternalStyleModules = [ $localPathToSCSSFile1, $localPathToSCSSFile2, ... ];
Chameleon comes with many SCSS variables (see this list). All of
them have a default value. To change those values you should not edit the style
files that come with Chameleon, because if you update Chameleon your changes
will be overwritten. Instead change the values of the variables in your
LocalSettings.php
by adding them to the array
$egChameleonExternalStyleVariables
:
$egChameleonExternalStyleVariables = [
'key1' => 'value1',
'key2' => 'value2',
...
];
If you add variables to the array (to change them), make sure you omit the $
before the variable name.
Apart from the SCSS variables defined in Chameleon itself, you can of course also change variables of style files that you imported yourself.
Example:
To change the window width at which the skin switches between desktop and mobile view you could add
$egChameleonExternalStyleVariables = [
'cmln-collapse-point' => '960px',
];
Compiling the style files is time-consuming. For this reason the styles are not compiled on every page request. Instead they are cached after being compiled. For changes to the styles to become effective it is necessary to trigger an update of the style cache. There are two ways to do that:
-
A cache update is triggered when the
LocalSettings.php
file has a modification time later than the last cache update time. So you have to resave theLocalSettings.php
to trigger a cache update. This can be achieved by using thetouch
utility on UNIX and friends or by usingcopy /b LocalSettings.php +,,
from the MediaWiki installation directory on Windows. Alternatively, just open the file and re-save it. -
If the above becomes too cumbersome, you could add the following to your
LocalSettings.php
:\Bootstrap\BootstrapManager::getInstance()->addCacheTriggerFile( __DIR__ . '/your-file.scss' );
. -
Finally, you can set the following in your
LocalSettings.php
to disable caching of SCSS styles completely:$egScssCacheType = CACHE_NONE;
. This should obviously never be done on a production site.
Requires Chameleon version 3.2.0 or later.
By default external links will not display the normal MediaWiki icons. To enable this, set the following:
$egChameleonEnableExternalLinkIcons = true;