我想使用CSS网格重新创建与下面第二张图片相同的设计。我遇到了对齐问题,这当然是因为两个跨度输入的对齐方式不正确。我几乎在CSS网格中,但是我无法弄清楚。有没有办法用网格做到这一点,或者有其他解决方案吗?
<div className="grade-card">
<div className="grade-card-header">
<span className="title">{this.props.title}</span>
</div>
<div className="grade-card-body">
<div className="grade-input">
<span>I</span>
<input type="text"/>
<span>1x</span>
</div>
<div className="grade-input">
<span>I</span>
<input type="text"/>
<span>Min</span>
</div>
<div className="grade-input">
<span>I</span>
<input type="text"/>
<span>1x</span>
</div>
<div className="grade-input">
<span>I</span>
<input type="text"/>
</div>
<div className="grade-input">
<span>I</span>
<input type="text"/>
</div>
<div className="grade-input">
<input type="text"/>
</div>
</div>
</div>
.grade-card{
width: 349px;
height: 384px;
background-color: white;
border-radius: 28px;
.grade-card-header{
display: flex;
align-items: center;
justify-content: center;
height: 20%;
border-radius: 28px 28px 0 0;
background-color: #1089FF;
.title{
color: white;
font-size: 1.5em;
}
}
.grade-card-body{
height: 80%;
cursor: pointer;
display: grid;
grid-template-columns: repeat(2, 174.5px);
grid-template-rows: repeat(3, 102.4px);
justify-items: center;//horizontally
align-items: center;//vertically
input{
outline: none;
width: 74px;
height: 51px;
border: 1px solid #707070;
border-radius: 6px;
font-size: 1.3em;
text-align: center;
}
.grade-input:last-child{
input{
width: 117px;
height: 69px;
}
}
}
}
答案 0 :(得分:1)
这与@Brice的回答略有不同,因为在他的版本中:
此版本解决了该问题,但是使用绝对定位来逃避流程的想法是相同的。
/*********** begin changes **********/
.grade-input {
position: relative;
}
.label {
position: absolute;
top: 50%;
}
.label-left {
transform: translate(calc(-100% - 6px), -50%);
}
.label-right {
transform: translate(6px, -50%);
}
/*********** end changes **********/
.grade-card {
width: 349px;
height: 384px;
background-color: white;
border-radius: 28px;
}
.grade-card .grade-card-header {
display: flex;
align-items: center;
justify-content: center;
height: 20%;
border-radius: 28px 28px 0 0;
background-color: #1089ff;
}
.grade-card .grade-card-header .title {
color: white;
font-size: 1.5em;
}
.grade-card .grade-card-body {
height: 80%;
cursor: pointer;
display: grid;
grid-template-columns: repeat(2, 174.5px);
grid-template-rows: repeat(3, 102.4px);
justify-items: center;
align-items: center;
}
.grade-card .grade-card-body input {
outline: none;
width: 74px;
height: 51px;
border: 1px solid #707070;
border-radius: 6px;
font-size: 1.3em;
text-align: center;
}
.grade-card .grade-card-body .grade-input:last-child input {
width: 117px;
height: 69px;
}
<div class="grade-card">
<div class="grade-card-header">
<span class="title">{this.props.title}</span>
</div>
<div class="grade-card-body">
<div class="grade-input">
<span class="label label-left">I</span>
<input type="text"/>
<span class="label label-right">1x</span>
</div>
<div class="grade-input">
<span class="label label-left">I</span>
<input type="text"/>
<span class="label label-right">Min</span>
</div>
<div class="grade-input">
<span class="label label-left">I</span>
<input type="text"/>
<span class="label label-right">1x</span>
</div>
<div class="grade-input">
<span class="label label-left">I</span>
<input type="text"/>
</div>
<div class="grade-input">
<span class="label label-left">I</span>
<input type="text"/>
</div>
<div class="grade-input">
<input type="text"/>
</div>
</div>
</div>
答案 1 :(得分:0)
由于跨度是不同的值,因此您的.grade-input
div的宽度将变得不同,这将导致对齐问题。
编辑以使输入精确居中对齐:
如果使跨度为position: absolute;
,则只需对齐输入即可。
尝试以下HTML:
<div className="grade-card">
<div className="grade-card-header">
<span className="title">{this.props.title}</span>
</div>
<div className="grade-card-body">
<div className="grade-input">
<span className="left-absolute">I</span>
<input type="text"/>
<span className="right-absolute oneX">1x</span>
</div>
<div className="grade-input">
<span className="left-absolute">I</span>
<input type="text"/>
<span className="right-absolute min">Min</span>
</div>
<div className="grade-input">
<span className="left-absolute">I</span>
<input type="text"/>
<span className="right-absolute oneX">1x</span>
</div>
<div className="grade-input">
<span className="left-absolute">I</span>
<input type="text"/>
</div>
<div className="grade-input">
<span className="left-absolute">I</span>
<input type="text"/>
</div>
<div className="grade-input">
<input type="text"/>
</div>
</div>
</div>
将以下内容添加到您的css文件中:
.grade-input {
position: relative;
}
.left-absolute {
position: absolute;
left: -7px;
top: 20px;
}
.right-absolute.oneX {
position: absolute;
right: -15px;
top: 20px;
}
.right-absolute.min {
position: absolute;
right: -27px;
top: 20px;
}