Style your ReactiveHTML template#
In this guide we will show you how to style your ReactiveHTML
_template
using the _stylesheets
attribute and CSS.
If you are not familiar with CSS then the W3 CSS School is a good resource to learn from. You can also ask ChatGPT for help. It can often provide you with an HTML and CSS starting point that you can fine tune.
A Layout with CSS Styling#
import param
import panel as pn
from panel.custom import Child, ReactiveHTML
pn.extension()
class SensorLayout(ReactiveHTML):
object = Child(allow_refs=False)
_template = """
<div class="pn-container styled-container">
<h1 id="name">Temperature</h1>
<h2 id="subtitle">A measurement from the sensor</h1>
<div id="object" class="styled-object">${object}</div>
</div>
"""
_stylesheets = ["""
.pn-container {height: 100%;width: calc(100% - 20px); margin:10px;}
.styled-container {border-radius: 10px;border: 2px solid gray;text-align: center; padding:10px;}
.styled-object {display: inline-block;}
"""]
dial = pn.widgets.Dial(
name="°C", value=37, format="{value}", colors=[(0.40, "green"), (1, "red")], bounds=(0, 100),
)
SensorLayout(
object=dial, name="Temperature",
styles={"border": "2px solid lightgray"},
).servable()
Note the difference between styles
and _stylesheets
.
styles
styles the outer HTML element wrapping the component_stylesheets
styles the HTML elements inside the component