2016-11-23 2 views
1

Я успешно размещал надписи над полями ввода формы, когда сфокусирован, но я в тупике о том, как держать метки плавающими, если текст вводится в поле и не сфокусирован.Как сохранить плавающие метки, плавающие после ввода. Pure CSS

В настоящее время существует множество примеров чистого CSS, но для меня нет ясного понимания того, что удерживает заполненную полевую метку плавающей. Я уверен, что это довольно легко, но я довольно новичок в этом.

EDIT: Мне нужно сделать это, не используя «необходимый» метод, упомянутый в комментариях ниже. Моя форма представляет собой комбинацию требуемых и необязательных полей.

Вот один из многих примеров, которые я нашел: http://codepen.io/atunnecliffe/pen/gpKzQw

Вот мой jsfiddle: https://jsfiddle.net/yzzxrsnn/1/

Большое спасибо заранее.

HTML:

<fieldset class="form-field"> 
<textarea maxlength="280" class="form-textarea"></textarea> 
<label class="form-label" alt='Search Map' placeholder='Search Map'>Text Area</label> 
<br> 
<input type='text' class="form-input" placeholder="" onclick='this.value = "";'> 
<label class="form-label" alt='Search Map' placeholder='Search Map'>Text</label> 
<br> 
<select class="form-input" > 
    <option value="" disabled selected hidden></option> 
    <option value="AL">Alabama</option> 
    <option value="AK">Alaska</option> 
    <option value="AZ">Arizona</option> 
    <option value="AR">Arkansas</option> 
    <option value="CA">California</option> 
</select> 
<label class="form-label" for="name">Select</label> 
</fieldset> 

CSS:

.form-input { 
    box-sizing: border-box; 
    width: 100%; 
    max-width: 400px; 
    height: 55px; 
    margin: 15px 0 15px 0; 
    padding: 0px 10px 0px 10px; 
    border: 3px solid #ccc; 
    outline: none; 
    border-radius: 8px; 
    outline: none; 
    resize: none; 
    text-align:left; 
    -webkit-appearance: none; 
    background: transparent; 
    font-family: 'Yanone Kaffeesatz', Arial, sans-serif; 
    color: #000; 
    background:#fff; 
    font-size: 18px; 
    -webkit-transition: border-color ease-in-out .5s,box-shadow ease-in-out .5s; 
    transition: border-color ease-in-out .5s,box-shadow ease-in-out .5s; 
} 

.form-input:focus { 
    border-color: #00bafa; 
} 

.form-input + .form-label { 
    display: block; 
    pointer-events: none; 
    margin: 0 0 0 15px; 
    line-height: 0px; 
    margin-top: -43px; 
    margin-bottom: 43px; 
    transition: transform 1s; 

} 

.form-label { 
    font-family: 'Yanone Kaffeesatz', Arial, sans-serif; 
    color: #ccc; 
    font-size: 18px; 
} 

.form-input:focus + .form-label { 
    transform: translateY(-38px); 
    font-family: 'Yanone Kaffeesatz', Arial, sans-serif; 
    color: #00bafa; 
    font-size: 18px; 
} 

.form-textarea { 
    box-sizing: border-box; 
    width: 100%; 
    max-width: 400px; 
    height: 150px; 
    margin: 15px 0 15px 0; 
    padding: 15px 10px 0px 10px; 
    border: 3px solid #ccc; 
    border-radius: 8px; 
    outline: none; 
    resize: none; 
    text-align:left; 
    -webkit-appearance: none; 
    background: transparent; 
    font-family: 'Yanone Kaffeesatz', Arial, sans-serif; 
    color: #000; 
    background:#fff; 
    font-size: 18px; 
    -webkit-transition: border-color ease-in-out .5s,box-shadow ease-in-out .5s; 
    transition: border-color ease-in-out .5s,box-shadow ease-in-out .5s; 
} 

.form-textarea:focus { 
    border-color: #00bafa; 
} 

.form-textarea + .form-label { 
    display: block; 
    pointer-events: none; 
    margin: 0 0 0 15px; 
    line-height: 0px; 
    margin-top: -145px; 
    margin-bottom: 145px; 
    transition: transform 1s; 
} 

.form-textarea:focus + .form-label { 
    transform: translateY(-30px); 
    font-family: 'Yanone Kaffeesatz', Arial, sans-serif; 
    color: #00bafa; 
    font-size: 18px; 
} 

.form-textarea + .form-label:before { 
    transform: translateY(-38px); 
    pointer-events: none; 
    font-family: 'Yanone Kaffeesatz', Arial, sans-serif; 
    color: #00bafa; 
    font-size: 18px; 
} 

ответ

2

Вы можно сделать это с помощью jquery. С помощью JQuery мы можем добавить класс к входу, и это метка, если значение этого входа больше, чем 0.

$(document).ready(function() { 
    var $input = $('.form-input'); 

    $input.focusout(function() { 
     if($(this).val().length > 0) { 
      $(this).addClass('input-focus'); 
      $(this).next('.form-label').addClass('input-focus-label'); 
     } 
     else { 
     $(this).removeClass('input-focus'); 
      $(this).next('.form-label').removeClass('input-focus-label'); 

     } 
    }); 
}); 

и некоторые CSS

.input-focus-label{ 
    transform: translateY(-38px); 
    font-family: 'Yanone Kaffeesatz', Arial, sans-serif; 
    color: #00bafa; 
    font-size: 18px; 
} 
.input-focus{ 
    border-color: #00bafa; 
} 

Вот пример fiddle .HOpe это поможет вам ,

+0

Спасибо. Теперь я понимаю, что в Pure CSS нет способа сделать это без использования атрибута «required». Я пошел этот метод. –

+0

Рад помочь вам. – Sasith

+0

странный предмет. Я делал изменения на сайте и удалял часть скрипта Java вашего решения при аварии, и он все еще работает. Есть ли какой-нибудь конкретный случай, когда javascript вступает в игру? –

1

Если установить required для ваших входных элементов, вы можете воспользоваться :valid селекторе:

 .form-input { 
 
      box-sizing: border-box; 
 
      width: 100%; 
 
      max-width: 400px; 
 
      height: 55px; 
 
      margin: 15px 0 15px 0; 
 
      padding: 0px 10px 0px 10px; 
 
      border: 3px solid #ccc; 
 
      outline: none; 
 
      border-radius: 8px; 
 
      outline: none; 
 
      resize: none; 
 
      text-align: left; 
 
      -webkit-appearance: none; 
 
      background: transparent; 
 
      font-family: 'Yanone Kaffeesatz', Arial, sans-serif; 
 
      color: #000; 
 
      background: #fff; 
 
      font-size: 18px; 
 
      -webkit-transition: border-color ease-in-out .5s,box-shadow ease-in-out .5s; 
 
      transition: border-color ease-in-out .5s,box-shadow ease-in-out .5s; 
 
     } 
 

 
      .form-input:focus { 
 
       border-color: #00bafa; 
 
      } 
 

 
      .form-input + .form-label { 
 
       display: block; 
 
       pointer-events: none; 
 
       margin: 0 0 0 15px; 
 
       line-height: 0px; 
 
       margin-top: -43px; 
 
       margin-bottom: 43px; 
 
       transition: transform 1s; 
 
      } 
 

 
     .form-label { 
 
      font-family: 'Yanone Kaffeesatz', Arial, sans-serif; 
 
      color: #ccc; 
 
      font-size: 18px; 
 
     } 
 

 
     .form-input:focus + .form-label, .form-input:valid + .input-label, .form-input:valid + .dropdown-label { 
 
      transform: translateY(-38px); 
 
      font-family: 'Yanone Kaffeesatz', Arial, sans-serif; 
 
      color: #00bafa; 
 
      font-size: 18px; 
 
     } 
 

 
     .form-textarea { 
 
      box-sizing: border-box; 
 
      width: 100%; 
 
      max-width: 400px; 
 
      height: 150px; 
 
      margin: 15px 0 15px 0; 
 
      padding: 15px 10px 0px 10px; 
 
      border: 3px solid #ccc; 
 
      border-radius: 8px; 
 
      outline: none; 
 
      resize: none; 
 
      text-align: left; 
 
      -webkit-appearance: none; 
 
      background: transparent; 
 
      font-family: 'Yanone Kaffeesatz', Arial, sans-serif; 
 
      color: #000; 
 
      background: #fff; 
 
      font-size: 18px; 
 
      -webkit-transition: border-color ease-in-out .5s,box-shadow ease-in-out .5s; 
 
      transition: border-color ease-in-out .5s,box-shadow ease-in-out .5s; 
 
     } 
 

 
      .form-textarea:focus { 
 
       border-color: #00bafa; 
 
      } 
 

 
      .form-textarea + .form-label { 
 
       display: block; 
 
       pointer-events: none; 
 
       margin: 0 0 0 15px; 
 
       line-height: 0px; 
 
       margin-top: -145px; 
 
       margin-bottom: 145px; 
 
       transition: transform 1s; 
 
      } 
 

 
      .form-textarea:focus + .form-label, .form-textarea:valid + .textarea-label { 
 
       transform: translateY(-38px); 
 
       font-family: 'Yanone Kaffeesatz', Arial, sans-serif; 
 
       color: #00bafa; 
 
       font-size: 18px; 
 
      } 
 

 
      .form-textarea + .form-label:before { 
 
       transform: translateY(-38px); 
 
       pointer-events: none; 
 
       font-family: 'Yanone Kaffeesatz', Arial, sans-serif; 
 
       color: #00bafa; 
 
       font-size: 18px; 
 
      }
<fieldset class="form-field"> 
 
     <textarea maxlength="280" class="form-textarea" required></textarea> 
 
     <label class="form-label textarea-label" alt='Search Map' placeholder='Search Map'>Text Area</label> 
 
     <br> 
 
     <input type='text' class="form-input" placeholder="" onclick='this.value = "";' required> 
 
     <label class="form-label input-label" alt='Search Map' placeholder='Search Map'>Text</label> 
 
     <br> 
 
     <select class="form-input" required> 
 
      <option value="" disabled selected hidden></option> 
 
      <option value="AL">Alabama</option> 
 
      <option value="AK">Alaska</option> 
 
      <option value="AZ">Arizona</option> 
 
      <option value="AR">Arkansas</option> 
 
      <option value="CA">California</option> 
 
      <option value="CO">Colorado</option> 
 
      <option value="CT">Connecticut</option> 
 
      <option value="DE">Delaware</option> 
 
      <option value="DC">District Of Columbia</option> 
 
      <option value="FL">Florida</option> 
 
      <option value="GA">Georgia</option> 
 
      <option value="HI">Hawaii</option> 
 
      <option value="ID">Idaho</option> 
 
      <option value="IL">Illinois</option> 
 
      <option value="IN">Indiana</option> 
 
      <option value="IA">Iowa</option> 
 
      <option value="KS">Kansas</option> 
 
      <option value="KY">Kentucky</option> 
 
      <option value="LA">Louisiana</option> 
 
      <option value="ME">Maine</option> 
 
      <option value="MD">Maryland</option> 
 
      <option value="MA">Massachusetts</option> 
 
      <option value="MI">Michigan</option> 
 
      <option value="MN">Minnesota</option> 
 
      <option value="MS">Mississippi</option> 
 
      <option value="MO">Missouri</option> 
 
      <option value="MT">Montana</option> 
 
      <option value="NE">Nebraska</option> 
 
      <option value="NV">Nevada</option> 
 
      <option value="NH">New Hampshire</option> 
 
      <option value="NJ">New Jersey</option> 
 
      <option value="NM">New Mexico</option> 
 
      <option value="NY">New York</option> 
 
      <option value="NC">North Carolina</option> 
 
      <option value="ND">North Dakota</option> 
 
      <option value="OH">Ohio</option> 
 
      <option value="OK">Oklahoma</option> 
 
      <option value="OR">Oregon</option> 
 
      <option value="PA">Pennsylvania</option> 
 
      <option value="RI">Rhode Island</option> 
 
      <option value="SC">South Carolina</option> 
 
      <option value="SD">South Dakota</option> 
 
      <option value="TN">Tennessee</option> 
 
      <option value="TX">Texas</option> 
 
      <option value="UT">Utah</option> 
 
      <option value="VT">Vermont</option> 
 
      <option value="VA">Virginia</option> 
 
      <option value="WA">Washington</option> 
 
      <option value="WV">West Virginia</option> 
 
      <option value="WI">Wisconsin</option> 
 
      <option value="WY">Wyoming</option> 
 
     </select> 
 
     <label class="form-label dropdown-label" for="name">Select</label> 
 
    </fieldset>

+0

Спасибо за сообщение. Я должен был упомянуть, что мой сайт в настоящее время использует метод «Обязательный», но я пытаюсь уйти от его использования. Это бесполезные формы, содержащие необязательные поля. –

0

Вот быстрый и грязный edit on your fiddle

<fieldset class="form-field"> 
<input type='text' class="form-input" placeholder="" required onclick='this.value = "";'> 
<label class="form-label" alt='Search Map' placeholder='Search Map'>Text</label> 
</fieldset> 

И для CSS:

.form-input:focus + .form-label, 
.form-input:valid + .form-label { 
transform: translateY(-38px); 
font-family: 'Yanone Kaffeesatz', Arial, sans-serif; 
color: #00bafa; 
font-size: 18px; 
} 

В принципе, воспользоваться :valid, чтобы совпасть с :focus путем добавления required ваших полей

Смежные вопросы