我正在尝试制作一个类似于新的google样式的输入标签,但是当我的标签向上移动时,他会在中间被切开,如您在此处看到的
我试图更改页边距,填充和Z索引。然后没有一个解决我的问题。
我没有使用默认的离子类,因为它不合适。
如何使标签像Google输入一样显示?
我的SCSS:
.invalid {
border: 2px solid #f53d3d !important;
}
.danger {
color: #f53d3d;
}
.item-input {
margin-top: 5px;
&.invalid {
color: red;
}
}
ion-label.google-label {
color: #fff;
background-color: #3880ff;
font-size: 12px;
margin-left: 10px !important;
padding-left: 4px !important;
padding-right: 4px !important;
position: absolute !important;
margin-bottom: 5px !important;
z-index: 9;
}
ion-input.google-input {
padding-top: 10px !important;
color: white;
border: 2px solid white;
width: 100%;
max-width: 100%;
padding-left: 10px !important;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
.item-label-floating {
&.ion-invalid.ion-touched {
.google-label {
color: #f53d3d !important;
}
}
&.item-has-value {
.google-label {
padding-left: 4px !important;
padding-right: 4px !important;
color: #062f77 !important;
-webkit-transform: translate3d(0, -50%, 0) !important;
transform: translate3d(0, -50%, 0) !important;
-webkit-transform-origin: left top;
transform-origin: left top;
-webkit-transition: color 0.15s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);
transition: color 0.15s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);
transition: color 0.15s cubic-bezier(0.4, 0, 0.2, 1), transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);
transition: color 0.15s cubic-bezier(0.4, 0, 0.2, 1), transform 0.15s cubic-bezier(0.4, 0, 0.2, 1),
-webkit-transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);
&.danger {
color: #f53d3d !important;
}
}
&.ion-valid.ion-touched {
.google-label {
color: #fff !important;
}
}
}
&.item-has-focus {
.google-label {
padding-left: 4px !important;
padding-right: 4px !important;
color: #062f77 !important;
-webkit-transform: translate3d(0, -50%, 0) !important;
transform: translate3d(0, -50%, 0) !important;
-webkit-transform-origin: left top;
transform-origin: left top;
-webkit-transition: color 0.15s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);
transition: color 0.15s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);
transition: color 0.15s cubic-bezier(0.4, 0, 0.2, 1), transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);
transition: color 0.15s cubic-bezier(0.4, 0, 0.2, 1), transform 0.15s cubic-bezier(0.4, 0, 0.2, 1),
-webkit-transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);
&.danger {
color: #f53d3d !important;
}
}
.google-input {
border: 2px solid #062f77;
}
&.ion-valid.ion-touched {
.google-label {
color: #062f77 !important;
}
}
}
}
我的HTML:
<ion-item lines="none">
<ion-label class="google-label" position="floating" [class.danger]="showErrors('email')">
E-Mail
</ion-label>
<ion-input formControlName="email" class="google-input" [class.invalid]="showErrors('email')" type="text">
</ion-input>
</ion-item>
我希望标签显示为
答案 0 :(得分:0)
由于技术上来说文本超出了元素,因此必须在其上设置overflow: visible
。如果那不起作用,那么给它一点点padding-top
还是可以的,尽管这是一种黑客。
答案 1 :(得分:0)
对于其他用户,我使用以下方法解决了该问题:
HTML:
<div class="label-float" [class.invalid]="showErrors('email')">
<input type="text" formControlName="email" placeholder=" " />
<label>E-Mail</label>
</div>
SCSS:
.label-float {
position: relative;
padding-top: 13px;
&.invalid {
label {
color: #f53d3d !important;
}
input {
border: 2px solid #f53d3d !important;
}
}
input {
background-color: transparent;
border: 2px solid #fff;
border-radius: 5px;
outline: none;
min-width: 250px;
padding: 15px 20px;
font-size: 16px;
transition: all 0.1s linear;
-webkit-transition: all 0.1s linear;
-moz-transition: all 0.1s linear;
-webkit-appearance: none;
&:focus {
border: 2px solid #3951b2;
}
&::placeholder {
color: transparent;
}
}
label {
color: #fff;
pointer-events: none;
position: absolute;
top: calc(50% - 8px);
left: 20px;
transition: all 0.1s linear;
-webkit-transition: all 0.1s linear;
-moz-transition: all 0.1s linear;
background-color: #3880ff;
padding-top: 5px;
margin-left: 10px;
padding-left: 4px;
padding-right: 4px;
box-sizing: border-box;
}
}
.label-float input:focus + label,
input:not(:placeholder-shown):not(.invalid) + label {
font-size: 13px;
top: 0;
color: #3951b2;
}
.label-float input:not(:focus):not(:placeholder-shown):not(.invalid) + label {
font-size: 13px;
top: 0;
color: #fff;
}
答案 2 :(得分:0)
不需要z-index等,只需添加ion-item CSS溢出:继承即可。