TL; DR
Этот код работает в Chrome, но не в MS Edge https://angular -ysqrgh.stackblitz.io / , поскольку ширина контейнера grid
в MS Edge
не изменяется
Контекст
Я пытаюсь добавить контейнер кнопок в правой части моей страницы для инструмента карты. Представьте себе такие кнопки, как увеличение, уменьшение и т. Д. Из-за остального пользовательского интерфейса он должен располагаться там.
Существует несколько различных типов групп кнопок, которые будут все находиться внутри этого контейнера кнопок. В моем примере я провел различие между группами, пометив их +
или -
.
Желаемое поведение
Каждая группа кнопок определяется как display: grid
. Поведение, которое я ищу, состоит в том, что когда экран достаточно высок по высоте, отображаются все кнопки. Если высота не достаточно мала, чтобы отобразить их все, каждая группа будет переносить лишние кнопки в другой столбец с минимальным количеством в 2 строки (столько столбцов, сколько необходимо).
Кроме того, я хочу, чтобы каждая сетка занимала столько же высоты, сколько имеет содержимое, а не расширялась до высоты всего родителя (поэтому я не использую flex-grow).
Это пример того, что я хочу https://angular -ysqrgh.stackblitz.io /
Работает в Chrome, но не в Edge. Примечание: я отразил элементы на левой стороне только для справки в этом примере.
Что я думаю, это причина
MS Edge, кажется, имеет проблему при использовании этого поведения grid-auto-flow: column
. Я выполнил тест с перевернутыми строками и столбцами, и MS Edge, похоже, в этом режиме вполне может изменить размеры ширины и высоты https://angular -mzvgjm.stackblitz.io , поэтому я чувствую, что проблема должна делать с тем, как MS Edge обрабатывает свойство grid-auto-flow
.
В этом примере «строки» у меня была проблема с тем, чтобы он раскладывал все кнопки в одной строке при развертывании ... Может быть, это связано с проблемой, с которой я сталкиваюсь с макетом столбца, но я не видя решения.
Есть ли способ добиться поведения, которое я ищу?
EDIT1: Вот код, указанный в ссылке на Stackblitz ...
HTML
<div id="map-controls-container">
<div id="map-navigation-controls" class="map-controls-style">
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
</div>
<div id="map-selection-controls" class="map-controls-style">
<button type="button" class="btn">-</button>
<button type="button" class="btn">-</button>
<button type="button" class="btn">-</button>
</div>
</div>
<div id="map-controls-container2">
<div id="map-navigation-controls" class="map-controls-style">
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
<button type="button" class="btn">+</button>
</div>
<div id="map-selection-controls" class="map-controls-style">
<button type="button" class="btn">-</button>
<button type="button" class="btn">-</button>
<button type="button" class="btn">-</button>
</div>
</div>
SCSS
.btn {
border-radius: 0.15rem;
background-color: #4caf50;
color: #fff;
cursor: pointer;
user-select: none;
text-align: center;
white-space: nowrap;
font-size: 1rem;
border: 1px solid #4caf50;
margin: 0;
}
#map-controls-container {
left: 0;
}
#map-controls-container2 {
right: 0;
}
#map-controls-container,
#map-controls-container2 {
position: absolute;
top: 0;
background-color: #0000ff;
display: inline-flex;
flex-direction: column;
min-height: 172px;
height: 100%;
.map-controls-style {
min-height: 86px;
max-height: 100%;
display: grid;
background-color: #1b5e20;
grid-template-rows: repeat(auto-fit, 40px);
align-content: space-around;
grid-gap: 2px;
padding: 2px;
grid-auto-flow: column;
grid-auto-columns: 40px;
button {
background-size: 100% 100%;
background-origin: content-box;
background-position: center center;
width: 40px;
height: 40px;
padding: 0;
}
}
}
EDIT2: Просто чтобы уточнить, я ищу ответ CSS на эту проблему. Мне удалось получить желаемые результаты на данный момент, подписавшись на событие изменения размера окна и вручную вычисляя новую ширину, используя Typescript.