Исчезающая кнопка в HTML

Я написал простое поле ввода с кнопкой. Код приведен ниже.

form {
  width: 50%;
}


/* Style the search field */

.add-on {
  position: relative;
}

.add-on input {
  width: 100%;
  border-radius: 0;
}

.add-on button {
  position: absolute;
  border-radius: 0;
  top: 2px;
  right: 3px;
  height: 33px;
  width: 60px;
  z-index: 2;
  font-size: 14px;
  padding: 5px;
}
<link href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel = "stylesheet">
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<form class = "navbar-form my-2 my-lg-0 ml-auto" role = "search">
  <div class = "input-group add-on">
    <input type = "text" class = "form-control" placeholder = "Search" name = "srch-term" id = "srch-term">
    <button class = "btn btn-primary" type = "submit">Search</button>
  </div>
</form>

Как видите, когда я нажимаю в поле ввода, кнопка исчезает. Когда я щелкаю за пределами этой формы, она снова появляется. Но я не хочу, чтобы он исчезал при нажатии на поле ввода. Как я могу это сделать?

Я получаю эту ошибку... { "message": "Ошибка скрипта.", "filename": "", "lineno": 0, "colno": 0 }

Dat Boi Trump 24.04.2019 09:20

Хм. Я думаю, что кнопка исчезает, потому что. текстовое поле расширяется за кнопку. Уменьшите ширину ввода текста, и это может сработать...

Dat Boi Trump 24.04.2019 09:23

Кнопка все еще там - она ​​просто закрыта полем ввода. Вы можете видеть, что поле ниже обычно является кнопкой, а затем оно появляется сверху, когда вы нажимаете на него.

VLAZ 24.04.2019 09:23

@AjayKulkarni не рекомендуется показывать кнопка поиска с помощью position: absolute в поле input. Предположим, у вас есть длинный контент в вашем input, тогда ваш кнопка поиска будет перекрывать ваш контент. В настоящее время это происходит в вашем коде.

Hassan Siddiqui 24.04.2019 09:35

Можете ли вы объяснить, ПОЧЕМУ вы хотите, чтобы кнопка перекрывала ввод? Может быть, мы придумаем другое решение.

Mr Lister 24.04.2019 10:13

Добавьте padding-right: 45px; к .add-on input, чтобы решить проблему, которую описывает @HassanSiddiqui.

Henrik Ripa 29.04.2019 09:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
6
369
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Вы должны установить position: relative на кнопку

form {
  width: 50%;
}


/* Style the search field */

.add-on {
  position: relative;
}

.add-on input {
  width: 100%;
  border-radius: 0;
}

.add-on button {
  position: relative;
  border-radius: 0;
  top: 2px;
  right: 3px;
  height: 33px;
  width: 60px;
  z-index: 2;
  font-size: 14px;
  padding: 5px;
}
<link href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel = "stylesheet">
<script src = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form class = "navbar-form my-2 my-lg-0 ml-auto" role = "search">
  <div class = "input-group add-on">
    <input type = "text" class = "form-control" placeholder = "Search" name = "srch-term" id = "srch-term">
    <button class = "btn btn-primary" type = "submit">Search</button>
  </div>
</form>

что выводит кнопку за пределы поля ввода. Я хочу, чтобы он оставался внутри поля ввода.

Ajay Kulkarni 24.04.2019 09:23
Ответ принят как подходящий

используйте z-index во время фокусировки

 input:focus ~ .btn-primary {
     z-index: 100;
 }

form {
  width: 50%;
}


/* Style the search field */

.add-on {
  position: relative;
}

.add-on input {
  width: 100%;
  border-radius: 0;
}

.add-on button {
  position: absolute;
  border-radius: 0;
  top: 2px;
  right: 3px;
  height: 33px;
  width: 60px;
  z-index: 2;
  font-size: 14px;
  padding: 5px;
}

 input:focus ~ .btn-primary {
     z-index: 100;
 }
<link href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel = "stylesheet">
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<form class = "navbar-form my-2 my-lg-0 ml-auto" role = "search">
  <div class = "input-group add-on">
    <input type = "text" class = "form-control" placeholder = "Search" name = "srch-term" id = "srch-term">
    <button class = "btn btn-primary" type = "submit">Search</button>
  </div>
</form>

Установите z-index: 1 на элемент #srch-term

Измените z-index в правиле CSS .add-on button на 3.

.add-on button {
  position: absolute;
  border-radius: 0;
  top: 2px;
  right: 3px;
  height: 33px;
  width: 60px;
  z-index: 3;
  font-size: 14px;
  padding: 5px;
}

Просто дайте более высокое значение z-index вашей кнопки. Вероятно, подсветка ввода, которая помещает на него div

form {
  width: 50%;
}


/* Style the search field */

.add-on {
  position: relative;
}

.add-on input {
  width: 100%;
  border-radius: 0;
}

.add-on button {
  position: absolute;
  border-radius: 0;
  top: 2px;
  right: 3px;
  height: 33px;
  width: 60px;
  z-index: 5;
  font-size: 14px;
  padding: 5px;
}
<link href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel = "stylesheet">
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<form class = "navbar-form my-2 my-lg-0 ml-auto" role = "search">
  <div class = "input-group add-on">
    <input type = "text" class = "form-control" placeholder = "Search" name = "srch-term" id = "srch-term">
    <button class = "btn btn-primary" type = "submit">Search</button>
  </div>
</form>

Как говорят другие, поле ввода закрывает кнопку, когда она сфокусирована. Попробуйте установить постоянный z-индекс для ввода и кнопки и сделать z-индекс для кнопки выше, чем для ввода.

form {
    width: 50%;
  }


  /* Style the search field */

  .add-on {
    position: relative;
  }

  .add-on input {
    width: 100%;
    border-radius: 0;
    z-index: 1020;
  }

  .add-on button {
    position: absolute;
    border-radius: 0;
    top: 2px;
    right: 3px;
    height: 33px;
    width: 60px;
    z-index: 2;
    font-size: 14px;
    padding: 5px;
    z-index: 1021;
  }
 <link href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel = "stylesheet">
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<form class = "navbar-form my-2 my-lg-0 ml-auto" role = "search">
  <div class = "input-group add-on">
    <input type = "text" class = "form-control" placeholder = "Search" name = "srch-term" id = "srch-term">
    <button class = "btn btn-primary" type = "submit">Search</button>
  </div>
</form>

Проблема исчезнет, ​​если я добавлю z-index: 1 для ввода и z-index: 3 для кнопки. Не могу понять, почему, но z-index: 2 на кнопке, похоже, не работает.

просто добавьте z-index к вводу. значение больше -1 и меньше кнопки z-index

/* Style the search field */

.add-on input {
  width: 100%;
  border-radius: 0;
  z-index: 0
}

.add-on button {
  position: absolute;
  border-radius: 0;
  top: 2px;
  right: 3px;
  height: 33px;
  width: 60px;
  z-index: 2;
  font-size: 14px;
  padding: 5px;
}

Это ничем не отличается от любого другого ответа.

coops 24.04.2019 09:43

Solution 1 - Change z-index: 2 to z-index: 3 in .add-on button, but if your content increase the search button will overlap with content.

form {
  width: 50%;
}


/* Style the search field */

.add-on {
  position: relative;
}

.add-on input {
  width: 100%;
  border-radius: 0;
}

.add-on button {
  position: absolute;
  border-radius: 0;
  top: 2px;
  right: 3px;
  height: 33px;
  width: 60px;
  z-index: 3;
  font-size: 14px;
  padding: 5px;
}
<link href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel = "stylesheet">
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<form class = "navbar-form my-2 my-lg-0 ml-auto" role = "search">
  <div class = "input-group add-on">
    <input type = "text" class = "form-control" placeholder = "Search" name = "srch-term" id = "srch-term">
    <button class = "btn btn-primary" type = "submit">Search</button>
  </div>  
</form>

Solution 2 - Remove position: absolute, top: 2px, right: 3px, z-index: 2 from .add-on button and update height: 33px; to height: 38px; in .add-on button, it'll display search next to input field and it'll not overlap content.

form {
  width: 50%;
}


/* Style the search field */

.add-on {
  position: relative;
}

.add-on input {
  width: 100%;
  border-radius: 0;
}

.add-on button {
  border-radius: 0;
  height: 38px;
  width: 60px;
  font-size: 14px;
  padding: 5px;
}
<link href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel = "stylesheet">
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<form class = "navbar-form my-2 my-lg-0 ml-auto" role = "search">
  <div class = "input-group add-on">
    <input type = "text" class = "form-control" placeholder = "Search" name = "srch-term" id = "srch-term">
    <button class = "btn btn-primary" type = "submit">Search</button>
  </div>  
</form>

Другие вопросы по теме