#html #css
#HTML #css
Вопрос:
Для еженедельного календаря мне нужно расположить DIVs для событий во внешнем DIV на день.
Чтобы расположить эти DIVs в нужное время, я попытался использовать абсолютное позиционирование с верхним значением, но это приводит к тому, что DIVs накладываются друг на друга, если у меня одновременно несколько событий.
Теперь я хочу, чтобы эти DIVs «разделяли» ширину внешнего DIV.
Я уже пробовал решение flex, но, похоже, оно не работает с абсолютными позициями. Кроме того, помещение DIVS в дополнительный DIV для их позиционирования не является вариантом.
У кого-нибудь есть идея решения? Спасибо!
.tagclmn {
width: 300px;
font: 12.0px Helvetica;
position: relative;
}
.veranstaltung {
border-radius: 4px;
position: absolute;
width: 100%;
}
<div class="tagclmn">
<div class="veranstaltung" style="top: 200px; height: 200px; background-color: red;">
<div class="container">
<div class="title">Testvorlesung</div>
<div class="time">10:00 - 12:00 st</div>
<div class="place">W.11.010</div>
</div>
</div>
<div class="veranstaltung" style="top: 400px; height: 200px; background-color: green;">
<div class="container">
<div class="title">Testvorlesung 2</div>
<div class="time">12:00 - 14:00 st</div>
<div class="place">W.11.010</div>
</div>
</div>
<div class="veranstaltung" style="top: 400px; height: 200px; background-color: blue;">
<div class="container">
<div class="title">Testvorlesung 3</div>
<div class="time">12:00 - 14:00 st</div>
<div class="place">W.11.003</div>
</div>
</div>
</div>
Комментарии:
1. Абсолютные позиционированные элементы не занимают места в своем родительском элементе …. и не вносят вклад в макет. Возможно, вам придется пересмотреть свой подход.
2. Есть ли какая-либо конкретная причина для использования
position: absolute
дляveranstaltung
Ответ №1:
Большая часть этого может управляться с помощью CSS-Grid.
Если мы знаем количество доступных полных часов, мы можем использовать это, чтобы задать количество строк для нашей сетки.
Допустим, мы ведем дневник с 9 утра до 5 вечера, это будет означать 8 строк.
Затем мы добавляем классы, чтобы сообщать каждой встрече, как долго она длится (span) и в какой час она начинается (start).
Затем:
.tagclmn {
width: 80%;
margin: 1em auto;
border: 1px solid grey;
display: grid;
grid-template-rows: repeat(8, minmax(3em, 1fr));
grid-gap: 4px;
}
[class^="span"] {
grid-column: 1 / -1;
}
.span-2 {
grid-row: 1 / span 2;
}
.span-3 {
grid-row: 1 / span 3;
}
.start-2 {
grid-row-start: 2;
}
.start-4 {
grid-row-start: 4;
}
.start-8 {
grid-row-start: 8;
}
<div class="tagclmn">
<div class="veranstaltung span-2 start-2" style="background-color: red;">
<div class="container">
<div class="title">Testvorlesung</div>
<div class="time">10:00 - 12:00 st</div>
<div class="place">W.11.010</div>
</div>
</div>
<div class="veranstaltung span-1 start-4" style="background-color: lightgreen;">
<div class="container">
<div class="title">Testvorlesung 2</div>
<div class="time">12:00 - 13:00 st</div>
<div class="place">W.11.010</div>
</div>
</div>
<div class="veranstaltung span-2 start-4" style="background-color: lightblue;">
<div class="container">
<div class="title">Testvorlesung 3</div>
<div class="time">12:00 - 14:00 st</div>
<div class="place">W.11.003</div>
</div>
</div>
<div class="veranstaltung span-1 start-8" style="background-color: red;">
<div class="container">
<div class="title">Testvorlesung</div>
<div class="time">16:00 - 17:00 st</div>
<div class="place">W.11.010</div>
</div>
</div>
<div class="veranstaltung span-3 start-4" style="background-color: red;">
<div class="container">
<div class="title">Testvorlesung</div>
<div class="time">12:00 - 15:00 st</div>
<div class="place">W.11.010</div>
</div>
</div>
</div>
Примечание: порядок .veranstaltung
в DOM НЕ связан с их визуальным порядком, что означает, что при условии применения правильных классов unility назначения могут добавляться в HTML непоследовательно.
Ответ №2:
Вы могли бы просто добавить ширину 50% и левую часть 50% ко второму элементу, но я не уверен, что это тот ответ, который вы ищете.
<div class="tagclmn">
<div class="veranstaltung" style="top: 200px; height: 200px; background-color: red;">
<div class="container">
<div class="title">Testvorlesung</div>
<div class="time">10:00 - 12:00 st</div>
<div class="place">W.11.010</div>
</div>
</div>
<div class="veranstaltung" style="top: 400px; height: 200px; background-color: green; width:50%;">
<div class="container">
<div class="title">Testvorlesung 2</div>
<div class="time">12:00 - 14:00 st</div>
<div class="place">W.11.010</div>
</div>
</div>
<div class="veranstaltung" style="top: 400px; height: 200px; background-color: blue;width:50%; left:50%">
<div class="container">
<div class="title">Testvorlesung 3</div>
<div class="time">12:00 - 14:00 st</div>
<div class="place">W.11.003</div>
</div>
</div>
</div>
Таким образом, вы также можете увеличить высоту урока 3. например, с 13:00 до 15:00, он все еще работает