Ответ 1
Возникает проблема, когда вы ставите элемент :after
в абсолютный. Я не могу понять, почему. Но если вы просто поместите его относительно, проблема исчезнет.
Я обновил вашу скрипку: http://jsfiddle.net/NicoO/Lt3Wb/1/
Вот новый CSS (с некоторыми экспериментальными дополнениями)
$pad:10px;
div{
padding:$pad;
border:1px solid #CCC;
height:120px;
position:relative;
&:before
{
position:relative;
color:#999;
content:"Write a comment...";
}
}
div:focus
{
border-color: red;
}
div:not(:empty):before{
display: none;
}
Единственная проблема, которая остается в том, что вы можете сфокусироваться на тексте элемента :before
. Вот почему вы хотели, чтобы это было абсолютно. Представление также: если вы поместите псевдоэлемент в float: left;
, он будет показывать то же поведение, что и на position:absolute;
.
Обновление
Когда вы вынуждены использовать абсолютные элементы peseudo, на данный момент существует только одно решение. Определите другое дополнение для окна, пока оно пустое и сфокусированное. Игровая площадка: http://jsfiddle.net/NicoO/Lt3Wb/5/
$pad:10px;
#test
{
padding: $pad;
border:1px solid #CCC;
height:120px;
position:relative;
overflow: hidden;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
&:empty:focus
{
padding: #{($pad*2)+6} $pad;
}
&:before
{
position:absolute;
color:#999;
top: $pad;
left: $pad;
content: "Leave a comment"
}
}