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)