I am trying to add a navigation bar on a new Dash app.
If I run the code straight from dash website the output does not render properly.
What it is supposed to look like:
What I get locally (Dash 2.7.0 + chrome + dbc 1.2.1):
I have seen other strange behavior such as text in two dbc.col on the same dbc.row not showing up side by side. I don’t know if that is related.
Code:
import dash
from dash import html
from dash.dependencies import Input, Output, State
import dash_bootstrap_components as dbc
app = dash.Dash()
PLOTLY_LOGO = "https://images.plot.ly/logo/new-branding/plotly-logomark.png"
search_bar = dbc.Row(
[
dbc.Col(dbc.Input(type="search", placeholder="Search")),
dbc.Col(
dbc.Button(
"Search", color="primary", className="ms-2", n_clicks=0
),
width="auto",
),
],
className="g-0 ms-auto flex-nowrap mt-3 mt-md-0",
align="center",
)
navbar = dbc.Navbar(
dbc.Container(
[
html.A(
# Use row and col to control vertical alignment of logo / brand
dbc.Row(
[
dbc.Col(html.Img(src=PLOTLY_LOGO, height="30px")),
dbc.Col(dbc.NavbarBrand("Navbar", className="ms-2")),
],
align="center",
className="g-0",
),
href="https://plotly.com",
style={"textDecoration": "none"},
),
dbc.NavbarToggler(id="navbar-toggler", n_clicks=0),
dbc.Collapse(
search_bar,
id="navbar-collapse",
is_open=False,
navbar=True,
),
]
),
color="dark",
dark=True,
)
# add callback for toggling the collapse on small screens
@app.callback(
Output("navbar-collapse", "is_open"),
[Input("navbar-toggler", "n_clicks")],
[State("navbar-collapse", "is_open")],
)
def toggle_navbar_collapse(n, is_open):
if n:
return not is_open
return is_open
app.layout = navbar
app.run_server(debug=True, use_reloader=False)
Advertisement
Answer
You’ll need to define a stylesheet in order for your className references to take effect:
app = dash.Dash(external_stylesheets=[dbc.themes.SLATE])
Result:
Complete code:
import dash
from dash import html
from dash.dependencies import Input, Output, State
import dash_bootstrap_components as dbc
app = dash.Dash(external_stylesheets=[dbc.themes.SLATE])
PLOTLY_LOGO = "https://images.plot.ly/logo/new-branding/plotly-logomark.png"
search_bar = dbc.Row(
[
dbc.Col(dbc.Input(type="search", placeholder="Search")),
dbc.Col(
dbc.Button(
"Search", color="primary", className="ms-2", n_clicks=0
),
width="auto",
),
],
className="g-0 ms-auto flex-nowrap mt-3 mt-md-0",
align="center",
)
navbar = dbc.Navbar(
dbc.Container(
[
html.A(
# Use row and col to control vertical alignment of logo / brand
dbc.Row(
[
dbc.Col(html.Img(src=PLOTLY_LOGO, height="30px")),
dbc.Col(dbc.NavbarBrand("Navbar", className="ms-2")),
],
align="center",
className="g-0",
),
href="https://plotly.com",
style={"textDecoration": "none"},
),
dbc.NavbarToggler(id="navbar-toggler", n_clicks=0),
dbc.Collapse(
search_bar,
id="navbar-collapse",
is_open=False,
navbar=True,
),
]
),
color="dark",
dark=True,
)
# add callback for toggling the collapse on small screens
@app.callback(
Output("navbar-collapse", "is_open"),
[Input("navbar-toggler", "n_clicks")],
[State("navbar-collapse", "is_open")],
)
def toggle_navbar_collapse(n, is_open):
if n:
return not is_open
return is_open
app.layout = navbar
app.run_server(debug=True, use_reloader=False)


