У меня есть загрузчик внутри div. Когда мой компонент находится в режиме загрузки, я хочу визуализировать загрузчик точно в центре указанного контейнера div. Я также хочу уменьшить непрозрачность контейнера div, пока компонент находится в режиме загрузки.
Как и мне, мне удалось получить загрузчик внутри контейнера div, и он рендерится только когда я нажимаю 'LOGIN', который устанавливает isLoading в true, пока он выбирает необходимую информацию. Тем не менее, это отвод в сторону, а не в центре, как я хочу. Кроме того, я не уверен, как уменьшить непрозрачность, только когда isLoading имеет значение true.
Вот соответствующий код из компонента входа в систему. Обратите внимание, что контейнер div имеет имя className main-div
, а компонент загрузчика имеет className login-loader
:
<div className="main-div">
<div className="form-div">
<h2 className="form-heading">Welcome Back</h2>
<form className="login-form" onSubmit={accountType === 'vendor' ? submitVendor : submitDiner}>
<input type="text" name="username" value={credentials.username} placeholder="Enter username" onChange={handleLoginChange} />
<input type="password" name="password" value={credentials.password} placeholder="Enter password" onChange={handleLoginChange} />
<select className="form-control select" onChange={handleTypeChange}>
<option disabled value="initial">
Account Type
</option>
<option value="vendor">Vendor</option>
<option value="diner">Diner</option>
</select>
<button type="submit">Login</button>
<p>Don't have an account?</p>
<a href="/register"><p>Sign up!</p></a>
</form>
</div>
<ScrollAnimation animateIn="fadeIn" className="img-div">
<img src={truckPic} alt="food truck" />
</ScrollAnimation>
{props.isLoading && <Loader className="login-loader" type="ThreeDots" color="#somecolor" height={80} width={80} />}
</div>
Вот стиль из кода s css:
.main-div {
padding: 1rem;
background: #e6ebf5;
width: 80%;
margin-left: auto;
margin-right: auto;
display: flex;
align-items: center;
.form-div {
width: 50%;
height: 100%;
display: flex;
flex-direction: column;
margin-top: 0px;
padding: 0px;
.form-heading {
margin-bottom: 4%;
font-size: 2rem;
font-family: "Acme";
}
.login-form {
display: flex;
flex-direction: column;
align-items: center;
input {
margin-bottom: 2%;
width: 85%;
padding: 18.5px 14px;
border: 0.75px solid lightgrey;
font-family: "Acme";
color: currentColor;
background: none;
box-sizing: content-box;
animation-name: mui-auto-fill-cancel;
-webkit-tap-highlight-color: transparent;
}
select {
width: 30%;
margin-bottom: 3%;
}
button {
margin-bottom: 3%;
background-color: #28243d;
color: #fff;
padding: 6px 8px;
font-family: "Roboto", "Helvetica", "Arial", sans-serif;
font-weight: 500;
border-radius: 4px;
transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
text-transform: uppercase;
}
p {
margin-bottom: 1%;
font-size: 0.8rem;
}
}
}
.img-div {
width: 50%;
img {
width: 100%;
}
}
}
.login-loader {
margin-left: auto;
margin-right: auto;
position: relative;
text-align: center;
z-index: 10;
}