html - 用于布局表单的 CSS Grid
问题描述
我试图弄清楚是否有任何简单的方法可以通过 usgin css grid 或 css flexbox system 或其他任何东西来布局这个表单
这是我的代码以我自己的方式做,但它似乎太复杂了
<form class="contactus__content1__box__form">
<div class="contactus__content1__box__form__line1">
<label class="contactus__content1__box__form__line1__label" style={{ display : 'block' }} >Name: </label>
<input class="contactus__content1__box__form__line1__input" type="text" name="name" />
</div>
<div class="contactus__content1__box__form__line2">
<label class="contactus__content1__box__form__line2__label"style={{}} >Email: </label>
<input class="contactus__content1__box__form__line2__input" type="text" name="name" />
</div>
<div class="contactus__content1__box__form__line2">
<label class="contactus__content1__box__form__line2__label"style={{}} >Tel No.: </label>
<input class="contactus__content1__box__form__line2__input" type="text" name="name" />
</div>
<div class="contactus__content1__box__form__line3">
<label class="contactus__content1__box__form__line3__label" style={{ display : 'block' }} >Subject: </label>
<input class="contactus__content1__box__form__line3__input" type="text" name="name" />
</div>
<div class="contactus__content1__box__form__line4">
<label class="contactus__content1__box__form__line4__label" style={{ display : 'block' }} >Message: </label>
<input class="contactus__content1__box__form__line4__input" style={{}} type="text" name="name" />
</div>
</form>
这是应用 cssgrid 的 css
&__form{
display:grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: min-content min-content min-content min-content min-content;
align-items: center;
&__line1{
grid-column: 1/3;
margin-bottom: 15px;
&__label{
}
&__input{
width: 95%;
}
}
&__line2{
margin-bottom: 15px;
&__label{
}
&__input{
width: 90%;
}
}
&__line3{
grid-column: 1/3;
grid-row: 3/4;
margin-bottom: 15px;
&__label{
}
&__input{
width: 95%;
}
}
&__line4{
grid-column: 1/ 3;
grid-row:4/5;
margin-bottom: 15px;
&__label{
}
&__input{
// margin-left: 300px;
width: 95%;
line-height: 80px;
}
}
}
如您所见,我需要为每一行(输入+标签)声明 grid-column , grid-row 所以如果有任何更直接的方法请让我知道这个简单的方法需要太多的努力
解决方案
请在下面查看我的解决方案。我曾经css-grid
定制过您的表单,并使其对移动设备友好。
我还简化了你的类名——你可以随意重命名它们。
JSbin 链接:https ://jsbin.com/sedamij/edit?html,css,output
HTML
<main class="contact-us-page">
<div class="contact-us-wrapper">
<h1 class="contact-us-title">SEND US AN EMAIL</h1>
<h2 class="contact-us-subtitle">GET IN TOUCH WITH US</h2>
<form action="index.html" class="contact-us-form">
<label for="name">Name:*</label>
<input type="text" id="name" required></input>
<label for="contact-email">Email:*</label>
<input type="email" id="contact-email" required></input>
<label for="contact-tel">Tel:*</label>
<input type="tel" id="contact-tel" required></input>
<label for="subject">Subject:*</label>
<input type="text" id="subject" required></input>
<label for="message">Message:*</label>
<textarea id="message" rows="15" id="message"></textarea>
<button type="submit" class="button">SEND</button>
</form>
</div>
</main>
CSS
main {
padding-top: 1rem;
}
.contact-us-wrapper {
max-width: 51rem;
margin: 0 auto;
}
.contact-us-title {
font-size: 1.5rem;
color: #E46E00;
margin-bottom: 0.2rem;
}
.contact-us-subtitle {
color: gray;
font-size: 1.3rem;
margin-top: 0;
}
.contact-us-form {
padding: 1rem;
display: grid;
grid-auto-rows: 2rem;
grid-row-gap: 0.5rem;
}
.contact-us-form label {
font-weight: bold;
}
.contact-us-form label,
.contact-us-form input {
display: block;
width: 100%;
}
.contact-us-form input:focus {
outline: none;
background: #ece7e7;
border-color: #2ddf5c;
}
.contact-us-form button[type="submit"] {
display: block;
background-color: #E46E00;
color: white;
}
.contact-us-form input.invalid,
.contact-us-form select.invalid,
.contact-us-form.needs-validation :invalid {
border: 1px solid red !important;
background-color: #ff8e8e
}
label[for="name"] {
grid-row: 1 / 2;
}
#name {
grid-row: 2 / 3;
grid-column: 1 / 2;
}
label[for="contact-email"] {
grid-row: 3 / 4;
}
#contact-email {
grid-row: 4 / 5;
}
label[for="contact-tel"] {
grid-row: 5 / 6;
}
#contact-tel {
grid-row: 6 / 7;
}
label[for="subject"] {
grid-row: 7 / 8;
}
#subject {
grid-row: 8 / 9;
}
label[for="message"] {
grid-row: 9 / 10;
}
#message {
grid-row: 10/ 15;
}
form button[type="submit"] {
grid-row: 15 / 16;
}
@media (min-width: 40rem) {
.contact-us-form {
margin: auto;
width: 50rem;
grid-template-columns: 22rem 22rem;
grid-column-gap: 1rem;
}
label[for="name"] {
grid-row: 1 / 2;
}
#name {
grid-row: 2 / 3;
grid-column: 1 / 3
}
label[for="contact-email"] {
grid-row: 3 / 4;
grid-column: 1 / 2
}
#contact-email {
grid-row: 4 / 5;
grid-column: 1 / 2;
}
label[for="contact-tel"] {
grid-row: 3 / 4;
grid-column: 2 / 3;
}
#contact-tel {
grid-row: 4 / 5;
grid-column: 2 / 3;
}
label[for="subject"] {
grid-row: 5 / 6;
}
#subject {
grid-row: 6 / 7;
grid-column: 1 / 3;
}
label[for="message"] {
grid-row: 7 / 8;
}
#message {
grid-row: 8 / 13;
grid-column: 1 / 3;
}
form button[type="submit"] {
grid-row: 14 / 15;
}
}
截图:
推荐阅读
- angularjs - AngularJS - 仅在一个字段大于另一个字段时验证
- python - 使用 CSS 选择器从网页中提取数据 - Selenium Python
- css - -webkit-text-fill-color 在 Chrome 69.0.3 上不起作用
- c# - 尽管在 WPF 中调用了 GetErrors 方法,但 INotifyDataErrorInfo 验证不起作用
- php - MailChimp Api v1.3 如何将订阅者设置为待处理
- sql-server - Docker-compose MS SQL attach_dbs
- c++ - C++ 数学问题和 5/4*pi vs 5*pi/4
- javascript - 使用 selectAll() 到达特定类
- windows - 将exe的路径设置为批处理脚本中的变量
- django - 如何将上传图像字段添加到 Wagtail?