CSS: Как сделать так, чтобы метка пользовательского ввода перетекла в фон, а не поверх него? - PullRequest
0 голосов
/ 06 июня 2018

Таким образом, у меня есть ввод числа, сделанный с помощью styled components, где рядом с ним находится метка для формы span:

enter image description here

и css для этого:

input {
  display: block;
  outline: none;
  font-size: 16px;
  font-weight: 500;
  -webkit-appearance: none;
  border: 1px solid #e6e6e6;
  border-radius: 5px;
  background-color: #fff;
  border: ${(props) => (props.option === true ? '0px' : '')};
  line-height: 19px;
  z-index: 1;
  height: 40px;
  width: ${(props) => (props.numberInputWidth)};
  padding: 0 8px;
  margin-left: 5px;
  margin-top: 20px;
  transition: border-color 0.3s ease-in-out;
  white-space: nowrap;

  &:focus {
    border-color: ${COLORS.LIGHTGREEN};
    transition: border-color 0.3s ease-in-out;

    ${({ error }) => error && `
      border-color: ${COLORS.ERROR};
    `}
  }
}

и метка:

.label {
  white-space: nowrap;
  position: absolute;
  display: inline-block;
  font-size: 16px;
  font-weight: 500;
  left: 20px;
  bottom: 7px;
  user-select: none;
  pointer-events: none;
  z-index: 0;
  height: 40%;
}

и невидимое расстояние внутри метки:

.invis {
  opacity: 0;
}

Какиевсе работает.Однако, когда пользователь вводит очень длинное целое число, заполнитель будет вытекать из контейнера, что, как я полагаю, связано с тем, что он абсолютно расположен:

enter image description here

Ради потомков, вот контейнер, содержащий элементы:

.container {
  position: relative;
  margin-left: 10px;
  text-align: left;
  display: inline-block;
  vertical-align: top;
}

Можно ли сделать так, чтобы метка / заполнитель не переполнялась над контейнером, а переполнялась внутри контейнера и позади / под контейнером?Вроде как:

enter image description here

, где знак процента немного обрезан.

Мой HTML выглядит следующим образом:

<div class="container">
  <input type="number" />
  <span class="label"><span class="invis">**invisible value for spacing here**</span> seats</span>
</div>

Я попробовал несколько вещей в контейнере, и я уверен, что это виновник в том, чтобы заставить это работать.Любая помощь очень, очень ценится.Спасибо!

1 Ответ

0 голосов
/ 06 июня 2018

Попробуйте использовать text-overflow: ellipsis; для поля ввода, поэтому, если у вас большое число, оно также не выйдет за пределы поля.

.b {
    white-space: nowrap;
    width: 120px;
    height: 25px;
    overflow: hidden;
    text-overflow: ellipsis;
    border: 1px solid #000000;
    padding: 20px;
    font-size: 23px;
    border-radius: 13px;
    border-color: red;
<!DOCTYPE html>
<html>
<body>

<!-- The number is very large but it will not go outside the input box. -->

<div class="b">123456789012345678901234567890</div>

</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...