Skip to main content

CSS framework

We provide a CSS framework intended to help you in the development of overlays and docks as well as the application of themes on these. Below you will find all the variables and classes exposed, grouped by category.

core.css file

The core.css file contains code whose purpose is to harmonize and reset certain margins and other properties, particularly of a textual nature, in order to obtain a clean basis for any additional code. We therefore recommend to always include this one unless you have complete mastery of what you are doing and for example choose to use a CSS framework different from ours.

<link rel="stylesheet" href="https://obs.multistream.tools/v1/core.css"/>

overlay.css file

The overlay.css file contains variables and classes useful for multiplatform overlay development; notably for the overall layout and display of icons representing the logos of different social networks. In the same way as for the core.css file, we recommend always including this one.

<link rel="stylesheet" href="https://obs.multistream.tools/v1/core.css"/>
<link rel="stylesheet" href="https://obs.multistream.tools/v1/overlay.css"/>

Variables

namevaluedescription
--borderSize1pxBorder thickness for the --border variable
--borderStylesolidBorder style for the --border variable
--borderBorderGroups the --borderSize and --borderStyle variables
--borderRadius4pxOverall rounded corners radius
--color1whiteForeground color
--colorDiscord#7289daDiscord logo color
--colorFacebook#005fecFacebook logo color
--colorInstagram#e4405fInstagram logo color
--colorKick#53fc18Kick logo color
--colorTikTok--fontColorTikTok logo color
--colorTrovo#19d66bTrovo logo color
--colorTwitch#a970ffTwitch logo color
--colorX--fontColorX logo color
--colorYouTuberedYouTube logo color
--fontColor--color1Page text color
--fontFamilyVerdana, Arial, Helvetica, sans-serifDefault/fallback text font
--fontFamily1--fontFamilyPage text font
--fontSize100%Page text size
--fontWeight400Page text weight
--fontZoom1Page text zoom multiplier
--spacing1remBase spacing value
--spacing2525% of --spacingAlternative spacing value
--spacing5050% of --spacingAlternative spacing value
--spacing7575% of --spacingAlternative spacing value
--spacing125125% of --spacingAlternative spacing value
--spacing150150% of --spacingAlternative spacing value
--spacing175175% of --spacingAlternative spacing value
--spacing200200% of --spacingAlternative spacing value
--zoom1Overall system zoom multiplier
--platformsFontplatformsPlatforms logos font
info

Always use relative units such as rem and/or the calc function to define the text size and spacing of your overlays and docks; in this way they will be fluid and support by default the zoom functionality that we offer.

Also, the fonts you decide to use should all be assigned to variables named ---fontFamily1, ---fontFamily2, ... This is to allow their customization using the dedicated parameter.

Use the --fontZoom variable to, for example, dymanically vary the text size of your overlays and docks using our JavaScript framework.

On the other hand never vary the value of the --zoom variable because it must be able to be personalized using the dedicated parameter; however, you can change its default value and use it to allow global zooming to be applied to your overlays and docks where you feel this might be useful.

Logos

The logo, discord, facebook, instagram, kick, tiktok, trovo, twitch, youtube and x classes respectively allow displaying our logo and those of Discord, Facebook, Instagram, Kick, TikTok, Trovo, Twitch, YouTube and X.

<i class="logo"></i>
<i class="discord"></i>
<i class="facebook"></i>
<i class="instagram"></i>
<i class="kick"></i>
<i class="tiktok"></i>
<i class="trovo"></i>
<i class="twitch"></i>
<i class="youtube"></i>
<i class="x"></i>

Utilities

hidden

The hidden class is used to hide (opacity) a given element.

<div class="hidden">Hidden</div>

dock.css file

The dock.css file contains variables and classes useful for the development of administration docks; notably for the overall layout and display of forms. We recommend including this one in addition to the other two but only in the case of docks displayed in OBS as custom browser docks.

<link rel="stylesheet" href="https://obs.multistream.tools/v1/core.css"/>
<link rel="stylesheet" href="https://obs.multistream.tools/v1/overlay.css"/>
<link rel="stylesheet" href="https://obs.multistream.tools/v1/dock.css"/>

Variables

namevaluedescription
--buttonActiveScale0.95Button scale when clicked
--color2#635985Second plane color
--color3#3b345bThird plane color
--color4#352d4eFourth plane color
--color5#18122bBackground color
--colorInfo#00c7e6Color symbolizing an information
--colorDanger#ff7452Color symbolizing a danger or an error
--disabledOpacity0.25Opacity of a disabled element
--schemedarkPreferred color scheme for the page (documentation)
--spacing0.75remBase value for spacing
--shadowSize10pxOverall size of shadows on the page
--textAmount' x'Text preceding the display of the amount value of a given event
--textSender' → 'Text indicating that the event is an action by one user on another
--textTier' 'Text preceding the display of the tier value of a given event

Utilities

padding

The padding class is used to add basic inner spacing to a given element.

<div class="padding">Padding</div>

text-left

The text-left class is used to left align the text of a given element.

<div class="text-left">Left</div>

text-center

The text-center class is used to center align the text of a given element.

<div class="text-center">Center</div>

text-right

The text-right class is used to right align the text of a given element.

<div class="text-right">Right</div>

info

The info class modifies the background color of a given element to symbolize an information.

<div class="info">Info</div>

<button class="button info">Info button</button>

danger

The danger class modifies the background color of a given element to symbolize a danger or an error.

<div class="danger">Danger/Error</div>

<button class="button danger">Danger button</button>

flexible

The flexible class allows you to make flexible (takes up all the remaining space) a given element, directly child of an element carrying the col or row class.

In the case of a direct parent carrying the row class, elements carrying the field, label or box class are not affected because they are flexible by default.

<div class="col">
<div class="flexible">Flexible</div>
<div>Not flexible</div>
</div>

<div class="row">
<div class="flexible">Flexible</div>
<div>Not flexible</div>
</div>

not-flexible

The not-flexible class allows you to cancel the flexibility by default of a given element, directly child of an element carrying the toolbar or row class.

In the case of a direct parent carrying the toolbar class, these are elements carrying the button class.

In the case of a direct parent carrying the row class, these are elements carrying the field, label or box class.

<div class="toolbar">
<button class="button">Flexible</button>
<button class="button not-flexible">Not flexible</button>
</div>

<div class="row">
<div class="field not-flexible">Not flexible field</div>
<div class="label not-flexible">Not flexible label</div>
<div class="box not-flexible">Not flexible box</div>
</div>

gap

The gap class allows you to add spacing between elements directly children of a given element, also carrying the content class.

<div class="page">
<div class="content gap">
<div>Content</div>
<div>Content</div>
</div>
</div>

double-gap

The double-gap class allows you to double the default spacing between elements directly children of a given element, also carrying the row or col class.

<div class="row double-gap">
<div>Content</div>
<div>Content</div>
</div>

<div class="col double-gap">
<div>Content</div>
<div>Content</div>
</div>

no-gap

The no-gap class allows you to remove the spacing between elements directly children of a given element, also carrying the row or col class.

<div class="row no-gap">
<div>Content</div>
<div>Content</div>
</div>

<div class="col no-gap">
<div>Content</div>
<div>Content</div>
</div>

Generics

row

The row class allows you to display in line the directly child elements of a given element, by separating them - some of which can be flexible - by default spacing.

<div class="row">
<div>Content</div>
<div>Content</div>
</div>

col

The col class allows displaying in column the elements directly children of a given element, by separating them - some of which can be flexible - by default spacing.

<div class="col">
<div>Content</div>
<div>Content</div>
</div>

box

The box class allows you to add a box (border and internal spacing by default) around a given content.

<div class="box">Content</div>

Buttons

button

The button class allows you to uniformly style a button on which the dock user can click.

The colors, as well as behavior adopted for each state of the button, are based on the previously described variables.

A button with the button class is treated as flexible by default if directly child of an element carrying the toolbar class.

<button class="button" type="button">Button</button>
<button class="button" type="reset">Reset</button>
<button class="button" disabled>Disabled</button>
<button class="button">Submit</button>

Toolbar

toolbar

The toolbar class allows you to display a toolbar/tabs on which the dock user can click; it may be buttons, form fields, and navigation links.

Toolbars are mainly intended to be used as part of tabs or pages because their position will remain fixed, independent of the scroll applicable to the content .

<footer class="toolbar">
<label class="field">
<input class="input text-left"/>
</label>
<label class="field">
<input class="input" type="checkbox"/>
<span class="label">Checkbox</span>
</label>
<button class="button" type="button">Button</button>
</footer>

<nav class="toolbar">
<a class="tab" href="#home">Home</a>
<a class="tab" href="#settings">Settings</a>
</nav>

Pages

content

The content class allows you to define the scrollable area corresponding to the content inside a page.

The element carrying the content class must be a direct child of the element carrying the page class.

<div class="page">
<div class="content">
<div>Scrollable content</div>
</div>
</div>

page

The page class allows you to define a page, that is to say an element having a potentially scrollable content accompanied by a possible toolbar.

The element carrying the page class must be the body element, a direct child of it (to be able to use a specific tag) or be part of our tabs system described below.

<body class="page">
<main class="content">
<!-- Scrollable content -->
</main>
<footer class="toolbar">
<!-- Toolbar content -->
</footer>
</body>

<body>
<form class="page">
<section class="content">
<!-- Scrollable content -->
</section>
<footer class="toolbar">
<!-- Toolbar content -->
</footer>
</form>
</body>

Tabs

tab

The tab class allows you to define a navigation link, directly child of a toolbar, pointing to a given tab.

Our tabs system currently only supports two links for two different tabs.

Navigation must obligatory be done with HTML anchors and one of them must necessarily be #settings; the order of the links does not matter though.

<nav class="toolbar">
<a class="tab" href="#settings">Settings</a>
<a class="tab" href="#home">Home</a>
</nav>

tabs

The tabs class allows you to display pages as tabs, i.e. only one at a time, with a fixed navigation dedicated to switching from one to the other.

Our tabs system currently only supports two different pages, one of which must have the identifier (id attribute) settings.

The element carrying the tabs class must be the body element or a direct child of it to be able to use a specific tag. Its direct children must carry the page or toolbar class, the element carrying the toolbar class must always come last.

<body class="tabs">
<main id="home" class="page">
<!-- Page content and toolbar -->
</main>
<form id="settings" class="page">
<!-- Page content and toolbar -->
</form>
<nav class="toolbar">
<a class="tab" href="#home">Home</a>
<a class="tab" href="#settings">Settings</a>
</nav>
</body>

<body>
<form class="tabs">
<section id="home" class="page">
<!-- Page content and toolbar -->
</section>
<section id="settings" class="page">
<!-- Page content and toolbar -->
</section>
<nav class="toolbar">
<a class="tab" href="#home">Home</a>
<a class="tab" href="#settings">Settings</a>
</nav>
</form>
</body>

Forms

input

The input class allows you to uniformly style a form element with which the dock user can interact.

The colors, as well as the behavior adopted for each state of the element, are based on the previously described variables.

An element carrying the input class is treated as flexible if a direct child of an element carrying the field class.

<input class="input" type="checkbox"/>
<input class="input" type="radio"/>
<input class="input" type="file"/>
<input class="input" type="number"/>
<input class="input" required/>
<input class="input" disabled/>

label

The label class allows you to uniformly style the label describing a form field or a grouping of form fields.

The element carrying the label class must be a direct child of the element carrying the fields or field class.

If directly child of an element carrying the field class, the element carrying the label class must always come last.

<fieldset class="fields">
<legend class="label">Fields label</legend>
<!-- Fields content -->
</fieldset>

<label class="field">
<!-- Input content -->
<span class="label">Field label</span>
</label>

field

The field class allows you to uniformly style a form field.

The element carrying the field class must contain an element carrying the input class and ideally an element carrying the label class as direct children.

The presence of an element carrying the label class is mandatory when the sibling element, carrying the input class, is of type checkbox, radio or file.

<label class="field">
<input class="input" type="checkbox"/>
<span class="label">Checkbox</span>
</label>

<label class="field">
<input class="input" type="radio"/>
<span class="label">Radio</span>
</label>

<label class="field">
<input class="input" type="file"/>
<span class="label">File</span>
</label>

<label class="field">
<input class="input"/>
<span class="label">Input</span>
</label>

<label class="field">
<input class="input"/>
</label>

fields

The fields class allows you to display a grouping of form fields spaced from each other.

The element carrying the fields class must contain an element carrying the label class and several elements carrying the field class as direct children.

<fieldset class="fields">
<legend class="label">Fields</legend>
<label class="field">
<!-- Field content -->
</label>
<label class="field">
<!-- Field content -->
</label>
</fieldset>

Events

source

The source class allows you to display the source/originator of an event.

The element carrying the source class, optional, must be a direct child of the one carrying the event class.

<div class="event">
<span class="source twitch"></span>
</div>

type

The type class allows you to display the type of an event.

The element carrying the type class, optional, must be a direct child of the one carrying the event class.

The data-tier and data-amount attributes, both optional, allow additional information to be added to the element content.

<div class="event">
<span class="type subscriber" data-tier="3" data-amount="12">subscriber</span>
</div>

<div class="event">
<span class="type cheer" data-amount="500">cheer</span>
</div>

user

The user class allows you to display the name of the user to whom the event applies.

The element carrying the user class, optional, must be a direct child of the one carrying the event class.

The optional data-sender attribute allows you to specify the name of the user at the origin of the event if different; for example in the case of a gifted subscription.

<div class="event">
<span class="user" data-sender="TheFrenchBiff">You</span>
</div>

message

The message class allows you to display a message linked to an event.

The element carrying the message class, optional, must be a direct child of the one carrying the event class.

<div class="event">
<span class="message">Thank you for being an amazing streamer!</span>
</div>

event

The event class allows you to uniformly style the display of an event.

The optional data-sender attribute allows you to specify whether the name of the user at the origin of the event is different from the one to which it applies; for example in the case of a gifted subscription.

The optional data-message attribute allows you to display a possible message linked to the event in a simpler/more limited way than through a child element carrying the message class.

<div class="event" data-sender="TheFrenchBiff" data-message="Thank you!">
<!-- Event content -->
</div>

Détails

details

The details class allows you to uniformly style the display of any details HTML element.

<details class="details">
<summary class="button">Toggle</summary>
<!-- Content -->
</details>