vue-float-label
Float label pattern for Vue.js. Cross-browser compatible and easy to customize with CSS.
<float-label>
<input type="text" placeholder="Label">
</float-label>
Installation
yarn / npm
Install package using yarn
or npm
:
$ yarn add vue-float-label
# or
$ npm install --save vue-float-label
Global
Load the plugin by calling Vue.use()
:
import Vue from "vue";
import VueFloatLabel from "vue-float-label";
Vue.use(VueFloatLabel);
Now you have access in your templates to the <float-label>
component.
Local
You may prefer to explicitly import the plugin and use it inside your components:
<template>
<float-label>
...
</float-label>
</template>
<script>
import FloatLabel from "vue-float-label/components/FloatLabel";
export default {
components: {
FloatLabel
}
};
</script>
CDN
Load the script file from CDN:
<div id="root"></div>
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.2.1/vue.min.js"></script>
<script src="//unpkg.com/vue-float-label"></script>
<script>
new Vue({
el: '#root',
template: '<float-label>...</float-label>'
})
</script>
Usage
Wrap input, textarea or select with <float-label>
:
<float-label>
<input type="email" placeholder="E-mail">
</float-label>
<float-label>
<textarea placeholder="Comment"></textarea>
</float-label>
<float-label :dispatch="false">
<select>
<option disabled selected>Framework</option>
<option>Vue</option>
<option>React</option>
<option>Angular</option>
<option>Ember</option>
</select>
</float-label>
See more examples at Demo.vue.
Customization
Design
Style .vfl-label
, .vfl-label-on-input
and .vfl-label-on-focus
to meet your design requirements:
.vfl-label {
text-transform: uppercase;
}
.vfl-label-on-input {
top: -1em;
}
.vfl-label-on-focus {
color: #ff851b;
}
.vfl-label + input {
padding-left: 0;
font-size: 100%;
border: 0;
border-bottom: 2px solid #aaa;
transition: border 0.2s;
}
.vfl-label-on-focus + input {
border-bottom: 2px solid #ff851b;
}
Props
Set :on
prop to add an additional condition for label activation:
<template>
<float-label :on="isActive">
<input type="text" placeholder="Inactive">
</float-label>
</template>
<script>
export default {
computed: {
isActive() {
return false;
}
},
components: {
FloatLabel
}
};
</script>
Set :label
prop to override placeholder
attribute for input/textarea or
option[disabled][selected]
for select:
<float-label label="Last name">
<input type="text" placeholder="Surname">
</float-label>
<template>
<float-label label="Version">
<select v-model="version">
<option v-for="option in options" :value="option.value">
{{ option.text }}
</option>
</select>
</float-label>
</template>
<script>
export default {
data() {
return {
version: "beta",
options: [
{ value: "alpha", text: "Alpha" },
{ value: "beta", text: "Beta" },
{ value: "stable", text: "Stable" }
]
};
},
components: {
FloatLabel
}
};
</script>
Set :fixed
to true
to make label permanently active:
<template>
<float-label fixed>
<input type="text" placeholder="Fixed">
</float-label>
</template>
Set :dispatch
to false
to disable triggering input
event
once the component is mounted:
By default it's set to true to activate label when form element has value.
<template>
<float-label :dispatch="false">
<input type="email" placeholder="Email" v-model="email">
</float-label>
</template>
<script>
export default {
data() {
return {
email: "[email protected]"
};
},
components: {
FloatLabel
}
};
</script>
Development
-
Clone the repository:
$ git clone [email protected]:bkzl/vue-float-label.git
-
Install dependencies:
$ yarn install
-
Start development:
$ yarn start
Code is open sourced on GitHub. Up to date changelog is available under the releases section.