Новое в Grid в CSS и, конечно, начиная с более запутанной потребности.
Подумайте об отображении прибытия / вылета аэропорта. Нет клавиатуры, нет мыши, нет человеческого взаимодействия. Это приложение выноски раньше было одним большим длинным списком прокрутки. Я превращаю это в немного более организованный макет. В зависимости от того, на каком экране он наконец появляется, может быть место для 2 столбцов, 3 столбцов или даже 5 столбцов - где каждый столбец имеет одинаковую ширину и минимальную ширину.
1-я строка: заголовок / полный ширина / 3 строки текста
2-й ряд: должен быть равным оставшейся высоте, полной ширине и является контейнером
В контейнере:
- 2 строки (строка заголовка, строка содержимого)
- N столбцов (где столбец имеет минимальную ширину) -> также панель просмотра текста в выделенном поле (вертикальная прокрутка с помощью js)
@model wsGT4.Models.DictionaryResultSet<string, List<wsGT4.Models.Callout>>
@{
ViewBag.Title = "Callout";
Layout = "~/Views/Shared/_EmptyLayout.cshtml";
}
<section class="header">
<H1>TOMORROW'S CALLOUTS WILL DISPLAY STARTING AT 5PM</H1>
<H2>BRING DOCS TO CALLOUTS</H2>
@if (Model.Success == false)
{
foreach (var msg in Model.Messages)
{
<h2>@msg</h2>
}
}
else
{
if (DateTime.Now.AddHours(Model.TimezoneOffset).Hour >= 17)
{
<h2>CALLOUTS FOR <span style="color:red; background-color: yellow;">TOMORROW</span> - @DateTime.Now.AddDays(1).ToString("MMM dd") <span style="font-size:.6em">(@DateTime.Now.AddHours(Model.TimezoneOffset).ToString("HH:mm"))</span></h2>
}
else
{
<h2>CALLOUTS FOR TODAY - @DateTime.Now.ToString("MMM dd") <span style="font-size:.6em">(@DateTime.Now.AddHours(Model.TimezoneOffset).ToString("HH:mm"))</span></h2>
}
}
</section>
<section class="container">
@foreach (var kvp in Model.ResultList.OrderBy(a => a.Key))
{
<div class="timeDisplay">
>>> @kvp.Key
</div>
<div class="viewPort">
<div class="textList">
@foreach (var subject in kvp.Value.OrderBy(a => a.LastName).ThenBy(a => a.SubjectId))
{
<span>@subject.LastName</span>
<span>#@subject.SubjectId</span>
<span>@subject.EventTitle</span>
}
</div>
</div>
}
</section>
CSS (который я по-королевски облажаю)
.header {
padding: 5px;
border: groove;
border-bottom-color: black;
border-width: 2px;
/* Grid styles */
display: grid;
align-items: center;
/*grid-template-columns: 1fr;*/
grid-template-rows: repeat(3, 1fr);
}
.container {
max-height: 100vh;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 30px auto-fill;
grid-gap: 5px;
}
.timeDisplay{
max-height: 30px;
}
.viewPort {
height: 100%;
overflow: hidden;
}
.textList {
height: 100%;
font-size: 125%;
display: grid;
grid-template-columns: 3fr 2fr 5fr;
}
Поскольку возвращение коллекции моделей может иметь неизвестное количество наборов времени / списка, я пытаюсь позволить автоматизации сделать некоторые из работа. Идея заключается в том, что если у меня больше столбцов, чем может поместиться, то они либо (A)
не отображаются, либо (B)
переносятся под нижнюю часть экрана, фактически скрываясь.