WEBMASTER
Pure-CSS Float Label
Ng
Nghia Phan
•
•
⚡ 3 phút đọc
MỤC LỤC BÀI VIẾT (Nhấn để xem)
Code sưu tầm trên internet, lưu lại sau này đỡ phải tìm 😊
Tài trợ / Quảng cáo
DEMO:
HTML
<fieldset>
<legend>Sign up</legend>
<div class="input-group">
<div class="has-float-label">
<input id="first" type="text" placeholder="Name"/>
<label for="first">First</label>
</div>
<div class="has-float-label">
<input id="last" type="text" placeholder="Surname"/>
<label for="last">Last</label>
</div>
</div>
<label class="has-float-label">
<input type="email" placeholder="email@example.com"/>
<span>Email</span>
</label>
<label class="has-float-label">
<input type="password" placeholder="••••••••"/>
<span>Password</span>
</label>
<button>Sign up</button>
</fieldset>
SCSS/CSS
/* Powered by: https://github.com/tonystar/float-label-css
*/
/* Re-usable mixins
* https://github.com/tonystar/float-label-css/blob/master/scss/_mixins.scss
*/
@mixin float-label-container {
display: block;
position: relative;
}
@mixin float-label {
label, > span {
position: absolute;
left: 0;
top: 0;
cursor: text;
font-size: 75%;
opacity: 1;
transition: all .2s;
@content;
}
}
@mixin float-label-input {
&::placeholder {
opacity: 1;
transition: all .2s;
}
&:placeholder-shown:not(:focus)::placeholder {
opacity: 0;
}
}
@mixin float-label-scaled {
&:placeholder-shown:not(:focus) + * {
font-size: 150%;
opacity: .5;
@content;
}
}
/* Default styling
* https://github.com/tonystar/float-label-css/blob/master/scss/float-label.scss
*/
.has-float-label {
@include float-label-container;
@include float-label;
select {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
input, select {
@include float-label-input;
font-size: inherit;
padding-top: 1em;
margin-bottom: 2px;
border: 0;
border-radius: 0;
border-bottom: 2px solid rgba(0,0,0,.1);
@include float-label-scaled {
top: .25em;
}
&:focus {
outline: none;
border-color: rgba(0,0,0,.5);
}
}
select {
padding-right: 1em;
background: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .5em bottom .25em;
background-size: 8px 10px;
}
}
// Custom styling
* {
box-sizing: border-box;
}
body {
position: relative;
max-width: 20rem;
background: #eee;
margin: 2rem auto;
}
fieldset {
padding: 1.5rem;
background: white;
}
input, select {
width: 100%;
margin-bottom: .5rem;
}
button {
background: #333;
color: white;
border: 0;
padding: .5em 1em;
margin-top: 1rem;
}
.input-group {
display: table;
width: 100%;
}
.input-group > * {
display: table-cell;
width: 50%;
}
/* Powered by: https://github.com/tonystar/float-label-css
*/
/* Re-usable mixins
* https://github.com/tonystar/float-label-css/blob/master/scss/_mixins.scss
*/
/* Default styling
* https://github.com/tonystar/float-label-css/blob/master/scss/float-label.scss
*/
.has-float-label {
display: block;
position: relative;
}
.has-float-label label, .has-float-label > span {
position: absolute;
left: 0;
top: 0;
cursor: text;
font-size: 75%;
opacity: 1;
transition: all 0.2s;
}
.has-float-label select {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
.has-float-label input, .has-float-label select {
font-size: inherit;
padding-top: 1em;
margin-bottom: 2px;
border: 0;
border-radius: 0;
border-bottom: 2px solid rgba(0, 0, 0, 0.1);
}
.has-float-label input::-moz-placeholder, .has-float-label select::-moz-placeholder {
opacity: 1;
-moz-transition: all 0.2s;
transition: all 0.2s;
}
.has-float-label input:-ms-input-placeholder, .has-float-label select:-ms-input-placeholder {
opacity: 1;
-ms-transition: all 0.2s;
transition: all 0.2s;
}
.has-float-label input::placeholder, .has-float-label select::placeholder {
opacity: 1;
transition: all 0.2s;
}
.has-float-label input:placeholder-shown:not(:focus)::-moz-placeholder, .has-float-label select:placeholder-shown:not(:focus)::-moz-placeholder {
opacity: 0;
}
.has-float-label input:placeholder-shown:not(:focus):-ms-input-placeholder, .has-float-label select:placeholder-shown:not(:focus):-ms-input-placeholder {
opacity: 0;
}
.has-float-label input:-moz-placeholder-shown:not(:focus)::placeholder, .has-float-label select:-moz-placeholder-shown:not(:focus)::placeholder {
opacity: 0;
}
.has-float-label input:-ms-input-placeholder:not(:focus)::placeholder, .has-float-label select:-ms-input-placeholder:not(:focus)::placeholder {
opacity: 0;
}
.has-float-label input:placeholder-shown:not(:focus)::placeholder, .has-float-label select:placeholder-shown:not(:focus)::placeholder {
opacity: 0;
}
.has-float-label input:-moz-placeholder-shown:not(:focus) + *, .has-float-label select:-moz-placeholder-shown:not(:focus) + * {
font-size: 150%;
opacity: 0.5;
top: 0.25em;
}
.has-float-label input:-ms-input-placeholder:not(:focus) + *, .has-float-label select:-ms-input-placeholder:not(:focus) + * {
font-size: 150%;
opacity: 0.5;
top: 0.25em;
}
.has-float-label input:placeholder-shown:not(:focus) + *, .has-float-label select:placeholder-shown:not(:focus) + * {
font-size: 150%;
opacity: 0.5;
top: 0.25em;
}
.has-float-label input:focus, .has-float-label select:focus {
outline: none;
border-color: rgba(0, 0, 0, 0.5);
}
.has-float-label select {
padding-right: 1em;
background: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.5em bottom 0.25em;
background-size: 8px 10px;
}
* {
box-sizing: border-box;
}
body {
position: relative;
max-width: 20rem;
background: #eee;
margin: 2rem auto;
}
fieldset {
padding: 1.5rem;
background: white;
}
input, select {
width: 100%;
margin-bottom: 0.5rem;
}
button {
background: #333;
color: white;
border: 0;
padding: 0.5em 1em;
margin-top: 1rem;
}
a {
display: block;
padding: 10px;
position: absolute;
z-index: -1;
top: 1rem;
left: 100%;
margin-left: -65px;
transition: all 0.2s;
}
a:hover {
margin-left: 0;
}
.input-group {
display: table;
width: 100%;
}
.input-group > * {
display: table-cell;
width: 50%;
}
Nguồn: github://tonystar/float-label-css