Вопрос или проблема
Как выровнять структуру входа по центру страницы?
import React, {useState} from 'react'
import "./Signin.css"
const Signin = () => {
const [addClass, setaddClass] = useState("");
return (
<div className={`container ${addClass}`} id='container'>
<div className="form-container sign-up-container">
<form>
<h1>Создать аккаунт</h1>
<input type="text" placeholder="имя"/>
<input type="email" placeholder="электронная почта"/>
<input type="password" placeholder="пароль"/>
<button type="submit">Отправить</button>
</form>
</div>
<div className="form-container sign-in-container">
<form>
<h1>Вход</h1>
<input type="email" placeholder="электронная почта"/>
<input type="password" placeholder="пароль"/>
<button type="submit">Отправить</button>
</form>
</div>
<div className="overlay-container">
<div className="overlay">
<div className="overlay-panel overlay-left">
<button className="ghost" id="signIn" onClick={() =>setaddClass("")}>Перейти к входу
</button>
</div>
<div className="overlay-panel overlay-right">
<button className="ghost" id="signUp" onClick={() =>setaddClass("right-panel-active")} >Перейти к регистрации</button>
</div>
</div>
</div>
</div>
)
}
export default Signin
.container {
background: #f6f5f7;
position: fixed;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
font-family: "Montserrat", sans-serif;
height: 100vh;
margin: -20px 0 50px;
}
h1 {
font-weight: bold;
margin: 0;
}
button {
border-radius: 20px;
border: 1px solid #2c143e;
background-color: #2c143e;
color: #ffffff;
font-size: 12px;
font-weight: bold;
padding: 12px 45px;
letter-spacing: 1px;
text-transform: uppercase;
transition: transform 80ms ease-in;
}
button:active {
transform: scale(0.95);
}
button:focus {
outline: none;
}
button.ghost {
background-color: transparent;
border-color: #ffffff;
}
form {
background-color: #ffffff;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
padding: 0 50px;
height: 100%;
text-align: center;
}
input {
background-color: #eee;
border: none;
padding: 12px 15px;
margin: 8px 0;
width: 100%;
}
.container {
background-color: #fff;
border-radius: 10px;
box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);
position: relative;
overflow: hidden;
width: 768px;
max-width: 100%;
min-height: 480px;
}
.form-container {
position: absolute;
top: 0;
height: 100%;
transition: all 0.6s ease-in-out;
}
.sign-in-container {
left: 0;
width: 50%;
z-index: 2;
}
.container.right-panel-active .sign-in-container {
transform: translateX(100%);
}
.sign-up-container {
left: 0;
width: 50%;
opacity: 0;
z-index: 1;
}
.container.right-panel-active .sign-up-container {
transform: translateX(100%);
opacity: 1;
z-index: 5;
animation: show 0.6s;
}
@keyframes show {
0%,
49.99% {
opacity: 0;
z-index: 1;
}
50%,
100% {
opacity: 1;
z-index: 5;
}
}
.overlay-container {
position: absolute;
top: 0;
left: 50%;
width: 50%;
height: 100%;
overflow: hidden;
transition: transform 0.6s ease-in-out;
z-index: 100;
}
.container.right-panel-active .overlay-container {
transform: translateX(-100%);
}
.overlay {
background: #2c143e;
background: -webkit-linear-gradient(to right, #2c143e, #2c143e);
background: linear-gradient(to right, #2c143e, #2c143e);
background-repeat: no-repeat;
background-size: cover;
background-position: 0 0;
color: #ffffff;
position: relative;
left: -100%;
height: 100%;
width: 200%;
transform: translateX(0);
transition: transform 0.6s ease-in-out;
}
.container.right-panel-active .overlay {
transform: translateX(50%);
}
.overlay-panel {
position: absolute;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
padding: 0 40px;
text-align: center;
top: 0;
height: 100%;
width: 50%;
transform: translateX(0);
transition: transform 0.6s ease-in-out;
}
.overlay-left {
transform: translateX(-20%);
}
.container.right-panel-active .overlay-left {
transform: translateX(0);
}
.overlay-right {
right: 0;
transform: translateX(0);
}
.container.right-panel-active .overlay-right {
transform: translateX(20%);
}
import React, {useState} from ‘react’
import “./Signin.css”
const Signin = () => {
const [addClass, setaddClass] = useState(“”);
return (
<div className={container ${addClass}
} id=’container’>
Создать аккаунт
Отправить
</form>
</div>
<div className="form-container sign-in-container">
<form>
<h1>Вход</h1>
<input type="email" placeholder="электронная почта"/>
<input type="password" placeholder="пароль"/>
<button type="submit">Отправить</button>
</form>
</div>
<div className="overlay-container">
<div className="overlay">
<div className="overlay-panel overlay-left">
<button className="ghost" id="signIn" onClick={() =>setaddClass("")}>Перейти к входу
</button>
</div>
<div className="overlay-panel overlay-right">
<button className="ghost" id="signUp" onClick={() =>setaddClass("right-panel-active")} >Перейти к регистрации</button>
</div>
</div>
</div>
</div>
)
}
export default Signin
Вот результат, который у меня есть на данный момент:
Скриншот входа
Я хочу показать вам два метода. Оба метода удовлетворяют вашему запросу. Вы можете выбрать тот, который вам нужен. Мы добавляем свойство flex и свойства justify-content:center в качестве отображения. Таким образом, ваша форма расположена по центру.
Сначала оберните ваш класс container в div-контейнер. Сделайте присвоение css. Пример приведен в коде ниже.
Код React:
return (
<div className="wrapper">
<div className={`container ${addClass}`} id='container'>
//ваши коды
</div>
</div>
)
CSS код:
.wrapper{
display:flex;
justify-content: center;
}
Второй метод заключается в том, что поскольку ваш класс контейнера уже находится в корне, вы можете применить этот CSS к корню, не добавляя никаких оберток.
Код CSS
#root{
display:flex;
justify-content: center;
}
Исмаил Санчес
Ваш CSS был немного неправильным. Чтобы показать ваш компонент Signin по центру экрана, вы можете использовать этот CSS
html, body {
margin: 0;
padding: 0;
height: 100%;
width: 100%;
}
.container {
background: #f6f5f7;
position: fixed;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
font-family: "Montserrat", sans-serif;
height: 100vh;
width: 100vw; /* Полная ширина экрана */
margin: 0;
overflow: hidden; /* Избегает полос прокрутки */
}
h1 {
font-weight: bold;
margin: 0;
}
button {
border-radius: 20px;
border: 1px solid #2c143e;
background-color: #2c143e;
color: #ffffff;
font-size: 12px;
font-weight: bold;
padding: 12px 45px;
letter-spacing: 1px;
text-transform: uppercase;
transition: transform 80ms ease-in;
}
button:active {
transform: scale(0.95);
}
button:focus {
outline: none;
}
button.ghost {
background-color: transparent;
border-color: #ffffff;
}
form {
background-color: #ffffff;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
padding: 0 50px;
height: 100%;
text-align: center;
}
input {
background-color: #eee;
border: none;
padding: 12px 15px;
margin: 8px 0;
width: 100%;
}
.container {
background-color: #fff;
border-radius: 10px;
box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);
position: relative;
overflow: hidden;
width: 100%;
max-width: 100%;
min-height: 480px;
}
.form-container {
position: absolute;
top: 0;
height: 100%;
width: 50%; /* Полная ширина контейнера */
}
.sign-in-container {
left: 0;
width: 50%;
z-index: 2;
}
.container.right-panel-active .sign-in-container {
transform: translateX(100%);
}
.sign-up-container {
left: 0;
width: 50%;
opacity: 0;
z-index: 1;
}
.container.right-panel-active .sign-up-container {
transform: translateX(100%);
opacity: 1;
z-index: 5;
animation: show 0.6s;
}
@keyframes show {
0%,
49.99% {
opacity: 0;
z-index: 1;
}
50%,
100% {
opacity: 1;
z-index: 5;
}
}
.overlay-container {
position: absolute;
top: 0;
left: 50%;
width: 50%;
height: 100%;
}
.container.right-panel-active .overlay-container {
transform: translateX(-100%);
}
.overlay {
background: #2c143e;
background: -webkit-linear-gradient(to right, #2c143e, #2c143e);
background: linear-gradient(to right, #2c143e, #2c143e);
background-repeat: no-repeat;
background-size: cover;
background-position: 0 0;
color: #ffffff;
position: relative;
left: -100%;
height: 100%;
width: 200%;
transform: translateX(0);
transition: transform 0.6s ease-in-out;
}
.container.right-panel-active .overlay {
transform: translateX(50%);
}
.overlay-panel {
position: absolute;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
padding: 0 40px;
text-align: center;
top: 0;
height: 100%;
width: 50%;
transform: translateX(0);
transition: transform 0.6s ease-in-out;
}
.overlay-left {
transform: translateX(-20%);
}
.container.right-panel-active .overlay-left {
transform: translateX(0);
}
.overlay-right {
right: 0;
transform: translateX(0);
}
.container.right-panel-active .overlay-right {
transform: translateX(20%);
}
Я лично использую tailwindcss, который гораздо проще, чем создание CSS-файла для каждого компонента.
display: flexbox;
и justify-content: center;
в CSS — это хороший способ выровнять структуру входа по центру. Читайте этот пост для получения дополнительной информации.
Код:
.form-container {
display: flexbox;
justify-content: center;
/* добавьте остальной стиль */
}
Предупреждение! Ниже устарело!
Тег center
может быть использован для горизонтального центрирования текста. Недостатком использования этого является то, что он устарел и может быть удален в будущих версиях HTML.
Ответ или решение
Чтобы расположить структуру входа в систему по центру страницы, можно использовать CSS и дополнительные обертки для элементов вашего интерфейса. В данной инструкции я приведу два способа, как это сделать, а также объясню их основные преимущества и недостатки.
Способ 1: Обертывание контейнера
Шаг 1: Добавьте обертку вокруг вашего контейнера, который содержит форму входа. Это может быть просто дополнительный <div>
.
Пример кода React:
return (
<div className="wrapper">
<div className={`container ${addClass}`} id='container'>
{/* Ваши коды */}
</div>
</div>
);
Шаг 2: Используйте CSS, чтобы центрировать содержимое:
.wrapper {
display: flex;
justify-content: center; /* Центрирование по горизонтали */
align-items: center; /* Центрирование по вертикали */
height: 100vh; /* Высота на весь экран */
}
Способ 2: Применение стилей к корневому контейнеру
Эта методика может быть более простой, так как вы не добавляете дополнительные HTML-элементы.
Пример реализации CSS:
html, body {
margin: 0;
padding: 0;
height: 100%; /* Высота на весь экран */
width: 100%; /* Ширина на весь экран */
}
.container {
display: flex;
justify-content: center; /* Центрирование по горизонтали */
align-items: center; /* Центрирование по вертикали */
height: 100vh; /* Высота на весь экран */
}
Дополнительные рекомендации
-
Обеспечение минимальной высоты: Чтобы гарантировать, что ваш контейнер всегда будет на экране, всегда задавайте ему
height: 100vh
(высота вьюпорта). -
Стилизация элементов формы: Убедитесь, что кнопки и входные поля прописаны так, чтобы занимать весь доступный внутренний размер контейнера с соответствующими отступами для достижения симметричности.
-
Responsive: Проверьте, чтобы ваша форма адаптировалась к меньшим экранам. Например, давайте максимальную ширину контейнера.
.container {
max-width: 400px; /* Ширина для контента */
margin: auto; /* Центрирование с работой margin */
}
Заключение
Оба предложенных способа помогают расположить структуру входа по центру страницы. Выбор конкретного метода зависит от предпочтений и архитектуры вашего приложения. Используйте Flexbox для наилучшей адаптивности и контроля над макетом. Таким образом, вы сможете обеспечить не только эстетически привлекательный интерфейс, но и функциональность, необходимую для комфортного взаимодействия пользователей.