Автоматическая ширина для grid-елементов
Всем привет. Уже который час бьюсь над задачей, суть такая, что у нас есть грид контейнер, нужно что бы элементы шли друг за другом, сейчас же почему то текст идет на всю ширину, и кнопка шире положенного(
.upload {
display: -ms-grid;
display: grid;
-ms-grid-columns: auto auto auto;
grid-template-columns: auto auto auto;
-ms-grid-rows: auto auto;
grid-template-rows: auto auto;
pointer-events: none
}
.upload:before {
-ms-grid-row: 2;
grid-row: 2;
-ms-grid-column: 1;
-ms-grid-column-span: 1;
grid-column: 1/2;
display: flex;
align-items: center;
justify-content: center;
content: "Выбрать " attr(data-document);
-webkit-appearance: initial;
-moz-appearance: initial;
appearance: initial;
border: none;
box-shadow: none;
box-sizing: border-box;
cursor: pointer;
outline: 0;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
pointer-events: auto;
font-family: inherit;
font-size: 16px;
font-weight: 400;
margin: 0;
padding: 6px 12px;
text-decoration: none;
min-height: 34px;
transition: box-shadow 150ms;
box-shadow: inset 0 -2px rgba(52,52,52,.2),inset 0 0 0 1px rgba(255,255,255,.15);
background-color: #ff4252;
color: #fff;
border-radius: 4px
}
.upload:hover::before {
box-shadow: inset 0 -2px rgba(52,52,52,.2),inset 0 5px 20px 5px rgba(255,255,255,.15)
}
.upload__label {
-ms-grid-row: 1;
grid-row: 1;
-ms-grid-column: 1;
-ms-grid-column-span: 3;
grid-column: 1/4;
font-weight: 700;
padding-bottom: .4em;
pointer-events: auto;
display: block
}
.upload__control[required] ~ .upload__label::after {
content: " * ";
color: #ee3f58
}
.upload__control[hidden] {
display: none
}
.upload__file {
-ms-grid-column: 2;
-ms-grid-column-span: 1;
grid-column: 2/3;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
padding: 6px
}
.upload__close {
-ms-grid-column: 3;
-ms-grid-column-span: 1;
grid-column: 3/4;
border: 1px solid red;
padding: 6px
}
<label class="upload" data-name="Выбрать" data-document="">
<span class="upload__file">Имя файла.pdf</span>
<span class="upload__close"></span>
<input class="upload__control" type="file" name="TODO" hidden="">
<span class="upload__label">Лейбл</span>
</label>
Ответы (1 шт):
Автор решения: Sasha Omelchenko
→ Ссылка
Если надо, чтобы сетка была выстроена по контенту, то есть значение min-content. Ну и не забывайте пользоваться repeat(),
.upload {
display: grid;
grid-template-columns: repeat(3, min-content);
grid-template-rows: repeat(2, auto);
pointer-events: none
}
.upload:before {
grid-row: 2;
grid-column: 1/2;
display: flex;
align-items: center;
justify-content: center;
content: "Выбрать " attr(data-document);
appearance: initial;
border: none;
box-shadow: none;
box-sizing: border-box;
cursor: pointer;
outline: 0;
user-select: none;
pointer-events: auto;
font-family: inherit;
font-size: 16px;
font-weight: 400;
margin: 0;
padding: 6px 12px;
text-decoration: none;
min-height: 34px;
transition: box-shadow 150ms;
box-shadow: inset 0 -2px rgba(52,52,52,.2),inset 0 0 0 1px rgba(255,255,255,.15);
background-color: #ff4252;
color: #fff;
border-radius: 4px
}
.upload:hover::before {
box-shadow: inset 0 -2px rgba(52,52,52,.2),inset 0 5px 20px 5px rgba(255,255,255,.15)
}
.upload__label {
grid-row: 1;
grid-column: 1/4;
font-weight: 700;
padding-bottom: .4em;
pointer-events: auto;
display: block
}
.upload__control[required] ~ .upload__label::after {
content: " * ";
color: #ee3f58
}
.upload__control[hidden] {
display: none
}
.upload__file {
grid-column: 2/3;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
padding: 6px
}
.upload__close {
grid-column: 3/4;
border: 1px solid red;
padding: 6px
}
<label class="upload" data-name="Выбрать" data-document="">
<span class="upload__file">Имя файла.pdf</span>
<span class="upload__close"></span>
<input class="upload__control" type="file" name="TODO" hidden="">
<span class="upload__label">Лейбл</span>
</label>