BlazorBootstrap 5 столбцов: объедините равную ширину и установите ширину

#c# #blazor #multiple-columns #bootstrap-5

Вопрос:

Я попробовал учебник по начальной загрузке 5 и у меня есть следующий вопрос относительно его оперативности: Насколько я понял, правила применяются от малого до большого (например, сначала sm, затем md) первое применяемое правило-это общее правило без размеров (например, col-12)

Теперь мне нужно, чтобы части информации, которые я хочу отображать рядом друг с другом на большом экране, были расположены вертикально на маленьких экранах. для этого я сделал строку с 2 столбцами, в каждом классе есть col-12 для маленьких экранов и col-md-6 для большего экрана.

теперь я хочу просмотреть правильную часть информации в зависимости от bollean (с измененной кнопкой).,

поэтому я написал:

 
<div class="container-fluid">
    <div class="row">
        <div class="col-12 col-md" style="background-color:lightblue">
            this is always visible
        </div>
        @if (displaySecond)
        {
            <div class="col-12 col-md" style="background-color:lightcoral">
             optional optic
            </div>
        }

    </div>
    <div class="row">
        <TelerikButton OnClick="@(() => displaySecond = !displaySecond)">Display</TelerikButton>
    </div>
</div>


@code{
    private bool displaySecond = false;
}

 

В чем здесь проблема?
ожидаемое поведение:
На большом экране: первый-во всю ширину, если второй скрыт
, первый и второй-по половине каждого, если видны оба
На маленьком экране:
каждая из обеих частей находится в своем собственном ряду.

Есть ли какие-нибудь предложения?

Заранее большое вам спасибо

Ответ №1:

Самое простое решение-удалить col-12 и разрешить поведение по умолчанию.

Точка останова для начальной загрузки col-mdxxx составляет 768 пикселей, поэтому «col-md» вступает в силу только для ширины страницы, превышающей 768 пикселей. Ниже этого вы получаете сложенные дивы, там не определен col.

Если вам нужно больше контроля, вы можете увидеть это в приведенном ниже коде, где я устанавливаю разные размеры md для каждого столбца.

 @page "/Test"
<div class="container-fluid">
    <div class="row">
        <div class="col-md" style="background-color:lightblue">
            this is always visible
        </div>
        @if (displaySecond)
        {
            <div class="col-md" style="background-color:lightcoral">
                optional optic
            </div>
        }

    </div>
    <div class="row">
        <div class="col-md @col1" style="background-color:lightblue">
            this is always visible
        </div>
        @if (displaySecond)
        {
            <div class="col-md @col2" style="background-color:lightcoral">
                optional optic
            </div>
        }

    </div>
    <div class="row">
        <button @onclick="Display2">Display</button>
    </div>
</div>


@code{
    private bool displaySecond = false;

    private void Display2(MouseEventArgs e)
    {
        displaySecond = !displaySecond;
    }

    private string col1 => displaySecond ? "col-md-4" : "";

    private string col2 => displaySecond ? "col-md-8" : "";
}
 

Комментарии:

1. Большое спасибо! Я на самом деле надеялся, что мне не придется смешивать код и стиль из-за разделения проблем и, возможно, других шаблонов. В этом случае мне все еще нужно создавать правила css с помощью logic/c#. Тогда моя логика представления действительно должна знать о начальной загрузке и о том, как элементы выровнены. Кроме того, трудно изменить стили, потому что мне нужно искать строковые литералы. Я просто надеялся, что есть другое решение, которое только с помощью простого bootstrap-css (без if, без переменных). Насколько я вижу, этого нет. Спасибо вам большое за разрешение.