diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Grids.cshtml b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Grids.cshtml
index 4957fd3636..097b670e70 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Grids.cshtml
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Grids.cshtml
@@ -10,260 +10,838 @@
}
+@section scripts {
+
Based on Bootstrap grid.
-
+ <abp-container>
+ <abp-row>
+ <abp-column>1 of 2</abp-column>
+ <abp-column>2 of 2</abp-column>
+ </abp-row>
+ <abp-row>
+ <abp-column>1 of 3</abp-column>
+ <abp-column>2 of 3</abp-column>
+ <abp-column>3 of 3</abp-column>
+ </abp-row>
+ </abp-container>
+
+
+ <div class="container">
+ <div class="row">
+ <div class="col">1 of 2</div>
+ <div class="col">2 of 2</div>
+ </div>
+ <div class="row">
+ <div class="col">1 of 3</div>
+ <div class="col">2 of 3</div>
+ <div class="col">3 of 3</div>
+ </div>
+ </div>
+
+ -<abp-container> - <abp-row> - <abp-column size-sm="C6">One of two columns</abp-column> - <abp-column size-sm="C6">One of two columns</abp-column> - </abp-row> - <abp-row> - <abp-column size-sm="C4">One of three columns</abp-column> - <abp-column size-sm="C4">One of three columns</abp-column> - <abp-column size-sm="C4">One of three columns</abp-column> - </abp-row> -</abp-container> -+
+ <abp-container>
+ <abp-row>
+ <abp-column>column</abp-column>
+ <abp-column>column</abp-column>
+ <abp-column-breaker/>
+ <abp-column>column</abp-column>
+ <abp-column>column</abp-column>
+ </abp-row>
+ </abp-container>
+
+
+ <div class="container">
+ <div class="row">
+ <div class="col">column</div>
+ <div class="col">column</div>
+ <div class="w-100"></div>
+ <div class="col">column</div>
+ <div class="col">column</div>
+ </div>
+ </div>
+
+ - <abp-container> - <abp-row> - <abp-column>One of three columns</abp-column> - <abp-column>One of three columns</abp-column> - <abp-col-break /> @* TODO: abp-column-break *@ - <abp-column>One of three columns</abp-column> - </abp-row> - </abp-container> -+
+ <abp-container>
+ <abp-row>
+ <abp-column>1 of 3</abp-column>
+ <abp-column size="_6">2 of 3 (wider)</abp-column>
+ <abp-column>3 of 3</abp-column>
+ </abp-row>
+ <abp-row>
+ <abp-column>1 of 3</abp-column>
+ <abp-column size="_5">2 of 3 (wider)</abp-column>
+ <abp-column>3 of 3</abp-column>
+ </abp-row>
+ </abp-container>
+
+
+ <div class="container">
+ <div class="row">
+ <div class="col">1 of 3</div>
+ <div class="col col-6">2 of 3 (wider)</div>
+ <div class="col">3 of 3</div>
+ </div>
+ <div class="row">
+ <div class="col">1 of 3</div>
+ <div class="col col-5">2 of 3 (wider)</div>
+ <div class="col">3 of 3</div>
+ </div>
+ </div>
+
+
+ <abp-container>
+ <abp-row h-align="Center">
+ <abp-column size-lg="_2">1 of 3</abp-column>
+ <abp-column size-md="Auto">Variable width content</abp-column>
+ <abp-column size-lg="_2">3 of 3</abp-column>
+ </abp-row>
+ <abp-row>
+ <abp-column>1 of 3</abp-column>
+ <abp-column size-md="Auto">Variable width content</abp-column>
+ <abp-column size-lg="_2">3 of 3</abp-column>
+ </abp-row>
+ </abp-container>
+
+
+ <div class="container">
+ <div class="row justify-content-center">
+ <div class="col col-lg-2">1 of 3</div>
+ <div class="col col-md-auto">Variable width content</div>
+ <div class="col col-lg-2">3 of 3</div>
+ </div>
+ <div class="row">
+ <div class="col">1 of 3</div>
+ <div class="col col-md-auto">Variable width content</div>
+ <div class="col col-lg-2">3 of 3</div>
+ </div>
+ </div>
+
+
+ <abp-row>
+ <abp-column>col</abp-column>
+ <abp-column>col</abp-column>
+ <abp-column>col</abp-column>
+ <abp-column>col</abp-column>
+ </abp-row>
+ <abp-row>
+ <abp-column size="_8">col-8</abp-column>
+ <abp-column size="_4">col-4</abp-column>
+ </abp-row>
+
+
+ <div class="row">
+ <div class="col">col</div>
+ <div class="col">col</div>
+ <div class="col">col</div>
+ <div class="col">col</div>
+ </div>
+ <div class="row">
+ <div class="col col-8">col-8</div>
+ <div class="col col-4">col-4</div>
+ </div>
+
+
+ <abp-row>
+ <abp-column size-sm="_8">col-sm-8</abp-column>
+ <abp-column size-sm="_4">col-sm-4</abp-column>
+ </abp-row>
+ <abp-row>
+ <abp-column size-sm="_">col-sm</abp-column>
+ <abp-column size-sm="_">col-sm</abp-column>
+ <abp-column size-sm="_">col-sm</abp-column>
+ <abp-column size-sm="_">col-sm</abp-column>
+ </abp-row>
+
+
+ <div class="row">
+ <div class="col col-sm-8">col-sm-8</div>
+ <div class="col col-sm-4">col-sm-4</div>
+ </div>
+ <div class="row">
+ <div class="col col-sm">col-sm</div>
+ <div class="col col-sm">col-sm</div>
+ <div class="col col-sm">col-sm</div>
+ <div class="col col-sm">col-sm</div>
+ </div>
+
+
+ <!-- Stack the columns on mobile by making one full-width and the other half-width -->
+ <abp-row>
+ <abp-column size="_12" size-md="_8">.col-12 .col-md-8</abp-column>
+ <abp-column size="_6" size-md="_4">.col-6 .col-md-4</abp-column>
+ </abp-row>
+
+ <!-- Columns start at 50% wide on mobile and bump up to 33.3% wide on desktop -->
+ <abp-row>
+ <abp-column size="_6" size-md="_4">.col-6 .col-md-4</abp-column>
+ <abp-column size="_6" size-md="_4">.col-6 .col-md-4</abp-column>
+ <abp-column size="_6" size-md="_4">.col-6 .col-md-4</abp-column>
+ </abp-row>
+
+ <!-- Columns are always 50% wide, on mobile and desktop -->
+ <abp-row>
+ <abp-column size="_6">.col-6</abp-column>
+ <abp-column size="_6">.col-6</abp-column>
+ </abp-row>
+
+
+ <div class="row">
+ <div class="col col-12 col-md-8">.col-12 .col-md-8</div>
+ <div class="col col-6 col-md-4">.col-6 .col-md-4</div>
+ </div>
+ <div class="row">
+ <div class="col col-6 col-md-4">.col-6 .col-md-4</div>
+ <div class="col col-6 col-md-4">.col-6 .col-md-4</div>
+ <div class="col col-6 col-md-4">.col-6 .col-md-4</div>
+ </div>
+ <div class="row">
+ <div class="col col-6">.col-6</div>
+ <div class="col col-6">.col-6</div>
+ </div>
+
+ -<abp-container> - <abp-row v-align="Start"> - <abp-column>One of three columns</abp-column> - <abp-column>One of three columns</abp-column> - <abp-column>One of three columns</abp-column> - </abp-row> - <abp-row v-align="Center"> - <abp-column>One of three columns</abp-column> - <abp-column>One of three columns</abp-column> - <abp-column>One of three columns</abp-column> - </abp-row> - <abp-row v-align="End"> - <abp-column>One of three columns</abp-column> - <abp-column>One of three columns</abp-column> - <abp-column>One of three columns</abp-column> - </abp-row> - </abp-container> -+
+ <abp-container>
+ <abp-row v-align="Start">
+ <abp-column>column</abp-column>
+ <abp-column>column</abp-column>
+ <abp-column>column</abp-column>
+ </abp-row>
+ <abp-row v-align="Center">
+ <abp-column>column</abp-column>
+ <abp-column>column</abp-column>
+ <abp-column>column</abp-column>
+ </abp-row>
+ <abp-row v-align="End">
+ <abp-column>column</abp-column>
+ <abp-column>column</abp-column>
+ <abp-column>column</abp-column>
+ </abp-row>
+ </abp-container>
+
+
+ <div class="container">
+ <div class="row align-items-start">
+ <div class="col">column</div>
+ <div class="col">column</div>
+ <div class="col">column</div>
+ </div>
+ <div class="row align-items-center">
+ <div class="col">column</div>
+ <div class="col">column</div>
+ <div class="col">column</div>
+ </div>
+ <div class="row align-items-end">
+ <div class="col">column</div>
+ <div class="col">column</div>
+ <div class="col">column</div>
+ </div>
+ </div>
+
+ - <abp-container> - <abp-row> - <abp-column v-align="Start">One of three columns</abp-column> - <abp-column v-align="Center">One of three columns</abp-column> - <abp-column v-align="End">One of three columns</abp-column> - </abp-row> - </abp-container> -+
+ <abp-container>
+ <abp-row v-align="Start">
+ <abp-column v-align="Start">column</abp-column>
+ <abp-column v-align="Center">column</abp-column>
+ <abp-column v-align="End">column</abp-column>
+ </abp-row>
+ </abp-container>
+
+
+ <div class="container">
+ <div class="row align-items-start">
+ <div class="col align-self-start">column</div>
+ <div class="col align-self-center">column</div>
+ <div class="col align-self-end">column</div>
+ </div>
+ </div>
+
+
+ <abp-container>
+ <abp-row h-align="Start">
+ <abp-column size="_4">One of two columns</abp-column>
+ <abp-column size="_4">One of two columns</abp-column>
+ </abp-row>
+ <abp-row h-align="Center">
+ <abp-column size="_4">One of two columns</abp-column>
+ <abp-column size="_4">One of two columns</abp-column>
+ </abp-row>
+ <abp-row h-align="End">
+ <abp-column size="_4">One of two columns</abp-column>
+ <abp-column size="_4">One of two columns</abp-column>
+ </abp-row>
+ <abp-row h-align="Around">
+ <abp-column size="_4">One of two columns</abp-column>
+ <abp-column size="_4">One of two columns</abp-column>
+ </abp-row>
+ <abp-row h-align="Between">
+ <abp-column size="_4">One of two columns</abp-column>
+ <abp-column size="_4">One of two columns</abp-column>
+ </abp-row>
+ </abp-container>
+
+
+ <div class="container">
+ <div class="row justify-content-start">
+ <div class="col col-4">One of two columns</div>
+ <div class="col col-4">One of two columns</div>
+ </div>
+ <div class="row justify-content-center">
+ <div class="col col-4">One of two columns</div>
+ <div class="col col-4">One of two columns</div>
+ </div>
+ <div class="row justify-content-end">
+ <div class="col col-4">One of two columns</div>
+ <div class="col col-4">One of two columns</div>
+ </div>
+ <div class="row justify-content-around">
+ <div class="col col-4">One of two columns</div>
+ <div class="col col-4">One of two columns</div>
+ </div>
+ <div class="row justify-content-between">
+ <div class="col col-4">One of two columns</div>
+ <div class="col col-4">One of two columns</div>
+ </div>
+ </div>
+
+
+ <abp-row gutters="false">
+ <abp-column size="_8">One of two columns</abp-column>
+ <abp-column size="_4">One of two columns</abp-column>
+ </abp-row>
+
+
+ <div class="row no-gutters">
+ <div class="col col-8">One of two columns</div>
+ <div class="col col-4">One of two columns</div>
+ </div>
+
+
+ <abp-row>
+ <abp-column size="_9">.col-9</abp-column>
+ <abp-column size="_4">.col-4<br>Since 9 + 4 = 13 > 12, this 4-column-wide div gets wrapped onto a new line as one contiguous unit.</abp-column>
+ <abp-column size="_6">.col-6<br>Subsequent columns continue along the new line.s</abp-column>
+ </abp-row>
+
+
+ <div class="row">
+ <div class="col col-9">.col-9</div>
+ <div class="col col-4">.col-4<br>Since 9 + 4 = 13 > 12, this 4-column-wide div gets wrapped onto a new line as one contiguous unit.</div>
+ <div class="col col-6">.col-6<br>Subsequent columns continue along the new line.s</div>
+ </div>
+
+
+ <abp-container>
+ <abp-row>
+ <abp-column order="_12">First, but Last</abp-column>
+ <abp-column>Second, but unordered</abp-column>
+ <abp-column order="_6">Third, but Second</abp-column>
+ </abp-row>
+ </abp-container>
+
+
+ <div class="container">
+ <div class="row">
+ <div class="col order-12">First, but Last</div>
+ <div class="col">Second, but unordered</div>
+ <div class="col order-6">Third, but Second</div>
+ </div>
+ </div>
+
+ - <abp-container> - <abp-row h-align="Start"> - <abp-column size="C4">One of three columns</abp-column> - <abp-column size="C4">One of three columns</abp-column> - </abp-row> - <abp-row h-align="Center"> - <abp-column size="C4">One of three columns</abp-column> - <abp-column size="C4">One of three columns</abp-column> - </abp-row> - <abp-row h-align="End"> - <abp-column size="C4">One of three columns</abp-column> - <abp-column size="C4">One of three columns</abp-column> - </abp-row> - <abp-row h-align="Around"> - <abp-column size="C4">One of three columns</abp-column> - <abp-column size="C4">One of three columns</abp-column> - </abp-row> - <abp-row h-align="Between"> - <abp-column size="C4">One of three columns</abp-column> - <abp-column size="C4">One of three columns</abp-column> - </abp-row> - </abp-container> -+
+ <abp-container>
+ <abp-row>
+ <abp-column order="Last">First, but Last</abp-column>
+ <abp-column>Second, but unordered</abp-column>
+ <abp-column order="First">Third, but First</abp-column>
+ </abp-row>
+ </abp-container>
+
+
+ <div class="container">
+ <div class="row">
+ <div class="col order-last">First, but Last</div>
+ <div class="col">Second, but unordered</div>
+ <div class="col order-first">Third, but First</div>
+ </div>
+ </div>
+
+ - <abp-container> - <abp-row> - <abp-column> First, but unordered</abp-column> - <abp-column order="C12">Second, but last</abp-column> - <abp-column order="C1">Third, but first</abp-column> - </abp-row> - <abp-row> - <abp-column> First, but unordered</abp-column> - <abp-column order="Last">Second, but last</abp-column> - <abp-column order="First">Third, but first</abp-column> - </abp-row> - </abp-container> -+
+ <abp-container>
+ <abp-row>
+ <abp-column size-md="_4">.col-md-4</abp-column>
+ <abp-column size-md="_4" offset-md="_4">.col-md-4 .offset-md-4</abp-column>
+ </abp-row>
+ <abp-row>
+ <abp-column size-md="_3" offset-md="_3">.col-md-3 .offset-md-3</abp-column>
+ <abp-column size-md="_3" offset-md="_3">.col-md-3 .offset-md-3</abp-column>
+ </abp-row>
+ <abp-row>
+ <abp-column size-md="_6" offset-md="_3">.col-md-6 .offset-md-3</abp-column>
+ </abp-row>
+ </abp-container>
+
+
+ <div class="container">
+ <div class="row">
+ <div class="col col-md-4">.col-md-4</div>
+ <div class="col col-md-4 offset-md-4">.col-md-4 .offset-md-4</div>
+ </div>
+ <div class="row">
+ <div class="col col-md-3 offset-md-3">.col-md-3 .offset-md-3</div>
+ <div class="col col-md-3 offset-md-3">.col-md-3 .offset-md-3</div>
+ </div>
+ <div class="row">
+ <div class="col col-md-6 offset-md-3">.col-md-6 .offset-md-3</div>
+ </div>
+ </div>
+
+ - <abp-row> - <abp-column> .col-md-4</abp-column> - <abp-column size-md="C4" offset-md="C4">.col-md-4 .offset-md-4</abp-column> - </abp-row> - <abp-row> - <abp-column size-md="C3" offset-md="C3">.col-md-3 .offset-md-3</abp-column> - <abp-column size-md="C3" offset-md="C3">.col-md-3 .offset-md-3</abp-column> - </abp-row> - <abp-row> - <abp-column size-md="C6" offset-md="C3">.col-md-6 .offset-md-3</abp-column> - </abp-row> -+
+ <abp-container>
+ <abp-row>
+ <abp-column size-sm="_5" size-md="_6">.col-sm-5 .col-md-6</abp-column>
+ <abp-column size-sm="_5" offset-sm="_2" size-md="_6" offset-md="_">.col-sm-5 .offset-sm-2 .col-md-6 .offset-md-0</abp-column>
+ </abp-row>
+ <abp-row>
+ <abp-column size-sm="_6" size-md="_5" size-lg="_6">col-sm-6 .col-md-5 .col-lg-6</abp-column>
+ <abp-column size-sm="_6" size-md="_5" offset-md="_2" size-lg="_6" offset-lg="_">.col-sm-6 .col-md-5 .offset-md-2 .col-lg-6 .offset-lg-0</abp-column>
+ </abp-row>
+ </abp-container>
+
+
+ <div class="container">
+ <div class="row">
+ <div class="col col-sm-5 col-md-6">.col-sm-5 .col-md-6</div>
+ <div class="col col-sm-5 col-md-6 offset-sm-2 offset-md-0">col-sm-5 .offset-sm-2 .col-md-6 .offset-md-0</div>
+ </div>
+ <div class="row">
+ <div class="col col-sm-6 col-md-5 col-lg-6">col-sm-6 .col-md-5 .col-lg-6</div>
+ <div class="col col-sm-6 col-md-5 col-lg-6 offset-md-2 offset-lg-0">.col-sm-6 .col-md-5 .offset-md-2 .col-lg-6 .offset-lg-0</div>
+ </div>
+ </div>
+
+