#css #css-grid
#css — код #css-сетка
Вопрос:
Я пробую макет с использованием CSS grid. Внутри заголовка у меня есть div с классом под названием logo, и я хочу, чтобы он был выровнен по вертикали.
Вот полный код (просмотрите полноэкранный режим, чтобы увидеть проблему):
html,
body {
height: 100%;
}
.container {
display: grid;
height: 100%;
grid-template-rows: 1fr 1fr 1fr;
grid-template-columns: 1fr 1fr;
grid-template-areas: "h h" "s m" "f f";
grid-gap: 10px;
}
.header {
grid-area: h;
background-color: red;
}
.header .logo {
display: inline-grid;
padding: 5px;
border: 1px solid #ccc;
align-content: center;
}
.sidebar {
grid-area: s;
background-color: grey;
}
.main {
grid-area: m;
background-color: purple;
}
.footer {
grid-area: f;
background-color: blue;
}
<div class="container">
<div class="header">
<div class="logo">
<img src="https://via.placeholder.com/50" alt="">
</div>
</div>
<div class="sidebar">Sidebar</div>
<div class="main">Main Content</div>
<div class="footer">Footer</div>
</div>
Я пробовал: align-content: center и justify-self: center, но он не перемещается сверху.
Как я могу выровнять логотип класса по вертикали в заголовке с помощью css grid?
Ответ №1:
Это то, что вы хотите сделать
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<style>
html,
body {
height: 100%;
}
.container {
display: grid;
height: 100%;
grid-template-rows: 1fr 1fr 1fr;
grid-template-columns: 1fr 1fr;
grid-template-areas: "h h" "s m" "f f";
grid-gap: 10px;
}
.header {
padding: 70px 0; /* this code */
grid-area: h;
background-color: red;
}
.header .logo {
display: inline-grid;
padding: 5px;
border: 1px solid #ccc;
}
.sidebar {
grid-area: s;
background-color: grey;
}
.main {
grid-area: m;
background-color: purple;
}
.footer {
grid-area: f;
background-color: blue;
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<div class="logo">
<img src="https://via.placeholder.com/150" alt="">
</div>
</div>
<div class="sidebar">Sidebar</div>
<div class="main">Main Content</div>
<div class="footer">Footer</div>
</div>
</body>
</html>
Другой вариант
.header {
display: table;
overflow: hidden;
height: 500px;
grid-area: h;
background-color: red;
}
.header .logo {
display: table-cell;
vertical-align: middle;
padding: 5px;
border: 1px solid #ccc;
}
Комментарии:
1. Извините, я имею в виду вертикально центрированный. Он должен быть слева, но в вертикальном центре заголовка. Вы можете увидеть проблему только тогда, когда она у вас есть на всей странице. Я опубликовал скриншот
2. Хорошо, я жду
3. Это тот образ, который вам нужен? Я приложил скриншот.
4. Хорошо, теперь я понимаю, я немедленно обновляю ответ.
5. Извините, использование px не будет автоматически оставаться центрированным, если заголовок должен был изменяться во время выполнения
Ответ №2:
Это все, что вам нужно:
.header .logo {
display: inline-grid;
padding: 5px;
border: 1px solid #ccc; //remove this
align-content: center;
height: 100%; //This will work for responsive screens as well.
}