Skip to content

Commit e1a8f53

Browse files
authored
feat(ListView): use grid layout instead of flex (#5409)
* refactor: 复用代码 * refactor: 改用 grid 布局 * doc: 更新示例
1 parent 02c2186 commit e1a8f53

File tree

6 files changed

+29
-51
lines changed

6 files changed

+29
-51
lines changed

src/BootstrapBlazor.Server/Components/Samples/ListViews.razor

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<BodyTemplate>
1818
<Card>
1919
<BodyTemplate>
20-
<img src="@context.ImageUrl" />
20+
<img class="lv-demo-img" src="@context.ImageUrl" />
2121
<div class="lv-demo-desc">@context.Description</div>
2222
</BodyTemplate>
2323
</Card>
@@ -42,7 +42,7 @@
4242
<BodyTemplate>
4343
<Card>
4444
<BodyTemplate>
45-
<img src="@context.ImageUrl" />
45+
<img class="lv-demo-img" src="@context.ImageUrl" />
4646
<div class="lv-demo-desc">@context.Description</div>
4747
</BodyTemplate>
4848
</Card>
@@ -60,7 +60,7 @@
6060
<BodyTemplate>
6161
<Card>
6262
<BodyTemplate>
63-
<img src="@context.ImageUrl" />
63+
<img class="lv-demo-img" src="@context.ImageUrl" />
6464
<div class="lv-demo-desc">@context.Description</div>
6565
</BodyTemplate>
6666
</Card>
@@ -78,7 +78,7 @@
7878
<BodyTemplate>
7979
<Card>
8080
<BodyTemplate>
81-
<img src="@context.ImageUrl" />
81+
<img class="lv-demo-img" src="@context.ImageUrl" />
8282
<div class="lv-demo-desc">@context.Description</div>
8383
</BodyTemplate>
8484
</Card>
@@ -96,7 +96,7 @@
9696
<BodyTemplate>
9797
<Card>
9898
<BodyTemplate>
99-
<img src="@context.ImageUrl" />
99+
<img class="lv-demo-img" src="@context.ImageUrl" />
100100
<div class="lv-demo-desc">@context.Description</div>
101101
</BodyTemplate>
102102
</Card>

src/BootstrapBlazor.Server/Components/Samples/ListViews.razor.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
img {
2-
margin-bottom: 1rem;
1+
.lv-demo-img {
2+
width: 100%;
33
border-radius: var(--bs-border-radius);
44
}
55

src/BootstrapBlazor/Components/ListView/ListView.razor

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,7 @@
1616
{
1717
if (GroupName == null)
1818
{
19-
foreach (var item in Rows)
20-
{
21-
<div class="listview-item" @onclick="@(e => OnClick(item))">
22-
@BodyTemplate(item)
23-
</div>
24-
}
19+
@RenderGroup(Rows)
2520
}
2621
else if (Collapsible)
2722
{
@@ -38,12 +33,7 @@
3833
<div @key="@key.GroupName" class="accordion-item">
3934
<div class="accordion-header">@key.GroupName</div>
4035
<div class="accordion-body">
41-
@foreach (var item in key.Items)
42-
{
43-
<div class="listview-item" @onclick="@(e => OnClick(item))">
44-
@BodyTemplate(item)
45-
</div>
46-
}
36+
@RenderGroup(key.Items)
4737
</div>
4838
</div>
4939
}
@@ -77,14 +67,19 @@
7767
@code {
7868
RenderFragment RenderItem((object? GroupName, IOrderedEnumerable<TItem> Items) key, int index) =>
7969
@<CollapseItem Text="@GetGroupName(key.GroupName)" IsCollapsed="IsCollapsed(index, key.GroupName)">
80-
@foreach (var item in key.Items)
70+
@RenderGroup(key.Items)
71+
</CollapseItem>;
72+
73+
RenderFragment<IEnumerable<TItem>> RenderGroup => items =>
74+
@<div class="listview-item-group">
75+
@foreach (var item in items)
8176
{
82-
<div class="listview-item" @onclick="@(e => OnClick(item))">
77+
<div @key="item" class="listview-item" @onclick="@(e => OnClick(item))">
8378
@if(BodyTemplate != null)
8479
{
8580
@BodyTemplate(item)
8681
}
8782
</div>
8883
}
89-
</CollapseItem>;
84+
</div>;
9085
}

src/BootstrapBlazor/Components/ListView/ListView.razor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public partial class ListView<TItem> : BootstrapComponentBase
1515
.AddClassFromAttributes(AdditionalAttributes)
1616
.Build();
1717

18-
private string? BodyClassString => CssBuilder.Default("listview-body")
18+
private string? BodyClassString => CssBuilder.Default("listview-body scroll")
1919
.AddClass("is-group", GroupName != null)
2020
.Build();
2121

src/BootstrapBlazor/Components/ListView/ListView.razor.scss

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
--bb-lv-item-border-hover-color: #{$bb-lv-item-border-hover-color};
77
--bb-lv-item-shadow: #{$bb-lv-item-shadow};
88
--bb-lv-body-padding: #{$bb-lv-body-padding};
9-
--bb-lv-body-item-margin: #{$bb-lv-body-item-margin};
9+
--bb-lv-body-item-gap: #{$bb-lv-body-item-gap};
1010
--bb-lv-footer-padding: #{$bb-lv-footer-padding};
1111
border: 1px solid var(--bb-lv-border-color);
1212
border-radius: var(--bs-border-radius);
@@ -29,24 +29,17 @@
2929
.listview .listview-body {
3030
padding: var(--bb-lv-body-padding);
3131
position: relative;
32-
overflow: auto;
33-
display: flex;
34-
flex-flow: row wrap;
3532
flex: 1;
36-
align-content: flex-start;
37-
height: 1%;
3833
min-height: 0;
34+
height: 1%;
3935
}
4036

4137
.listview .listview-body.is-group {
4238
padding: 0;
4339
}
4440

45-
.listview .listview-body .listview-item {
46-
margin: var(--bb-lv-body-item-margin);
47-
}
48-
4941
.listview .listview-body .listview-item .card {
42+
box-shadow: var(--bb-lv-item-shadow);
5043
transition: var(--bb-lv-item-trans);
5144
}
5245

@@ -55,15 +48,11 @@
5548
border: 1px solid var(--bb-lv-item-border-hover-color);
5649
}
5750

58-
.listview .listview-body .listview-item .card {
59-
box-shadow: var(--bb-lv-item-shadow);
60-
}
61-
62-
.listview .listview-body .listview-item-group {
63-
flex-basis: 100%;
64-
margin: 1rem 0;
65-
font-weight: bold;
66-
position: relative;
51+
.listview .listview-item-group {
52+
display: grid;
53+
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
54+
gap: var(--bb-lv-body-item-gap);
55+
align-items: start;
6756
}
6857

6958
.listview .listview-body .accordion {
@@ -82,15 +71,9 @@
8271
}
8372

8473
.listview .listview-body .accordion-body {
85-
display: flex;
86-
flex-wrap: wrap;
8774
padding: var(--bb-lv-body-padding);
8875
}
8976

90-
.listview .listview-body .accordion-item {
91-
width: 100%;
92-
}
93-
9477
.listview .listview-body .accordion-item:last-child .accordion-header {
9578
border-bottom: 1px solid var(--bb-lv-border-color);
9679
}

src/BootstrapBlazor/wwwroot/scss/theme/bootstrapblazor.scss

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -381,9 +381,9 @@ $bb-lv-border-color: var(--bs-border-color);
381381
$bb-lv-item-trans: border .3s linear;
382382
$bb-lv-item-border-hover-color: #409eff;
383383
$bb-lv-item-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
384-
$bb-lv-body-padding: 1rem 0 0 1rem;
385-
$bb-lv-body-item-margin: 0 1rem 1rem 0;
386-
$bb-lv-footer-padding: 1rem;
384+
$bb-lv-body-padding: 0.5rem;
385+
$bb-lv-body-item-gap: 0.5rem;
386+
$bb-lv-footer-padding: 0.5rem;
387387

388388
// Logout
389389
$bb-logout-avatar-width: 42px;

0 commit comments

Comments
 (0)