I have a nested accordion that looks like:
But I would like to right-align them so that all the collapse arrows are aligned. I am using Plotly Dash so my code looks like:
d = {'1': {'1.1': {'1.1.1': {}}, '1.2': {'1.2.1': {}}},
'2': {'2.1': {'2.1.1': {}}, '2.2': {'2.2.2': {}}}}
def generate_accordion(input_dictionary):
output = dbc.Accordion([], start_collapsed=True, always_open=True, flush=True)
for key, subdict in input_dictionary.items():
output.children.append(dbc.AccordionItem(generate_accordion(subdict), title=key, style={'display': 'block', 'left': '20px', 'text-align': 'center'}))
return output
Accordion_Nest = generate_accordion(d)
print(Accordion_Nest)
app = Dash(__name__,
external_stylesheets=[dbc.themes.BOOTSTRAP, 'https://codepen.io/chriddyp/pen/bWLwgP.css'],
prevent_initial_callbacks=True
)
app.layout = html.Div(
[
Accordion_Nest,
]
)
I hope this helps you out. I am not familiar with plotly dash but using Bootstrap 5 I was able to replicate your nested divs and set the padding-right: 0
for div.accordion-body
which achieved aligning all the collapse arrows vertically.
Additionally, you could probably set each accordion-header
and accordion-body
divs to be w-100 if that is also something you are looking for.
I have a code snippet with my results below. Best of luck!
div.accordion-body{
padding-right: 0 !important;
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js"></script>
<div class="accordion" id="accordionPanelsStayOpenExample">
<div class="accordion-item">
<h2 class="accordion-header" id="panelsStayOpen-headingOne">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseOne" aria-expanded="true" aria-controls="panelsStayOpen-collapseOne">
Accordion Item #1
</button>
</h2>
<div id="panelsStayOpen-collapseOne" class="accordion-collapse collapse show" aria-labelledby="panelsStayOpen-headingOne">
<div class="accordion-body">
Accordion Item #1 Body
<div class="accordion-item">
<h2 class="accordion-header" id="panelsStayOpen-headingTwo">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseTwo" aria-expanded="false" aria-controls="panelsStayOpen-collapseTwo">
Accordion Item #2
</button>
</h2>
<div id="panelsStayOpen-collapseTwo" class="accordion-collapse collapse" aria-labelledby="panelsStayOpen-headingTwo">
<div class="accordion-body">
Accordion Item #2 Body
<div class="accordion-item">
<h2 class="accordion-header" id="panelsStayOpen-headingThree">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseThree" aria-expanded="false" aria-controls="panelsStayOpen-collapseThree">
Accordion Item #3
</button>
</h2>
<div id="panelsStayOpen-collapseThree" class="accordion-collapse collapse" aria-labelledby="panelsStayOpen-headingThree">
<div class="accordion-body">
Accordion Item #3 Body
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>