При зависании одного псевдоэлемента, создайте другой псевдоэлемент?

Я пытался создать экран, в котором используются псевдо-элементы :before и :after, но мне интересно, действительно ли такая функциональность возможна.

У меня есть обертка div, которая обернута вокруг ввода (с учетом pseudo element на этой обертке).

что-то вроде:

+-----------------------------------+
| +-------------------------------+ |
| |                               | | <-- wrapper div
| +-------------------------------+ <-- input element
+-----------------------------------+

Однако, я искал, чтобы псевдо-элемент располагался после div.

+-----------------------------------++-------+
| +-------------------------------+ | |¯¯¯|  |
| |                               | |    /   |
| +-------------------------------+ |   !    |<--pseudo element
+-----------------------------------++-------+

Я хотел иметь возможность навести этот псевдоэлемент и отобразить другой псевдоэлемент.

.wrap {
  position: relative;
  height: 30px;
  width: 200px;
  display: inline-block;
}
.wrap input {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
}
.wrap:after {
  content: "?";
  position: absolute;
  top: 0;
  left: 100%;
  height: 30px;
  width: 30px;
  font-size: 30px;
  text-align: center;
}
.wrap:before {
  content: "";
  position: absolute;
  top: 100%;
  left: 0;
  height: 60px;
  width: 100%;
  background: tomato;
  opacity:0.2;
}
<div class="wrap">
  <input placeholder="input element" type="text" />
</div>

Ответ 1

Похоже, что псевдоэлементы не являются "реальными" элементами, это значит, что (в настоящее время) нельзя использовать таким образом. Вместо этого использование "реального" элемента позволило бы это, поэтому я решил использовать элемент span до тех пор, пока эта функция не будет реализована или не будет реализована.

Текущая реализация отображает:

input {
  position: relative;
  display: inline-block;
  height: 30px;
  vertical-align: top;
}
span {
  position: relative;
  height: 30px;
  width: 30px;
  display: inline-block;
  text-align: center;
  border-radius: 50%;
  font-size: 25px;
  line-height: 30px;
  background: tomato;
}
span:after {
  content: "A Question Mark";
  position: relative;
  display: inline-block;
  top: 0;
  left: 0;
  height: 60px;
  width: 100px;
  background: tomato;
  opacity: 0;
  transition: all 0.8s;
  font-size: 16px;
}
span:hover:after {
  opacity: 1;
}
<input placeholder="input element" type="text" />
<span>?</span>

Ответ 2

Я знаю, что это не совсем то, о чем вы просили, но пока css не сможет выбрать родителей (это произойдет), вы можете просто добавить еще один элемент html:

<div class="wrap">
    <div class="inner_wrap">
      <input placeholder="input element" type="text" />
    </div>
</div>

CSS

.wrap {
  position: relative;
  height: 30px;
  width: 200px;
  display: inline-block;
}
.wrap input {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
}
.wrap:after {
  content: "?";
  position: absolute;
  top: 0;
  left: 100%;
  height: 30px;
  width: 30px;
  font-size: 30px;
  text-align: center;
}
.inner_wrap:before {
  content: "";
  position: absolute;
  top: 100%;
  left: 0;
  height: 60px;
  width: 100%;
  background: tomato;
  opacity:0.2;
    display:none;
}
.wrap:hover .inner_wrap:before{
    display:block;
}
.wrap .inner_wrap:hover:before{
    display:none;
}

http://fiddle.jshell.net/0vwn1w9t/