input:focus 换一个 div

input:focus to change an other div

我想 select 我的输入字段,我输入字段中的段落向上移动。所以当我有 input:focus 时,我想 .tekstenveld p 向上移动。

我正在尝试重新创建我在 codrops 上看到的关于创意输入字段的内容,但我无法弄清楚它们如何 select 一件事,然后移动另一件事。

Here is the link 到创意输入字段,以便您了解我的意思。

这是我目前在 JS fiddle

中尝试过的方法

input {
  height: 65px;
  width: 300px;
  outline: none;
  border: none;
  padding: 0 10px 0 10px;
  font-size: 2em;
  font-family: 'Lato';
  border-bottom: 2px solid #000;
  transition: 0.2s;
  -webkit-transition: 0.2s;
  z-index: 100;
}

input:focus {
  border-bottom: 6px solid #D11E1F;
  transition: 0.2s;
  -webkit-transition: 0.2s;
}

.tekstenveld {
  position: relative;
  margin: 10px 0 10px 0;
}

.tekstenveld p {
  position: absolute;
  display: block;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  font-size: 1.5em;
  bottom: 7px;
  left: 12px;
  z-index: 50;
  pointer-events: none;
}

.tekstenveld input:focus p {
  bottom: 40px;
}
<div class="tekstenveld">
  <p>Example text</p>
  <input type="text" class="bedrijfsnaam" name="bedrijfsnaam">
</div>

要在 :focus 上激活纯 css 效果,您需要先切换段落和输入之间的顺序。那么 css 规则应该是

.tekstenveld input:focus + p {
  ...
}

也许在 bottom 属性 上应用一个简短的 css transition 以使其更好:

p {
   ...
   transition: bottom .5s;
}

(当段落移动到 input 元素上方时,请确保段落有足够的空间)

这是最终结果:https://jsfiddle.net/0y9k50e5/1/


如果您还需要在填充时将文本保留在输入上方,您可以将 required 属性添加到 input 并像这样更改样式

.tekstenveld input:focus + p,
.tekstenveld input:valid + p {
  bottom: 40px;
}

https://jsfiddle.net/0y9k50e5/2/ (注意:此方法适用于IE10+)

检查此代码并告诉我:)

input {
  height: 65px;
  width: 300px;
  outline: none;
  border: none;
  padding: 0 10px 0 10px;
  font-size: 2em;
  font-family: 'Lato';
  border-bottom: 2px solid #000;
  transition: 0.2s;
  -webkit-transition: 0.2s;
  z-index: 100;
}

input:focus {
  border-bottom: 6px solid #D11E1F;
  transition: 0.2s;
  -webkit-transition: 0.2s;
}

.tekstenveld {
  position: relative;
  margin: 10px 0 10px 0;
}

.tekstenveld p {
  position: absolute;
  display: block;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  font-size: 1.5em;
  bottom: 7px;
  left: 12px;
  z-index: 50;
  pointer-events: none;
}

.tekstenveld input:focus + p {
  bottom: 40px;
}
<div class="tekstenveld">
  <input type="text" class="bedrijfsnaam" name="bedrijfsnaam">
  <p>Example text</p>
</div>