Мне кажется, что он работает нормально, используя ваш точный код. Я создал jsFiddle здесь , который отображает красную "каретку" в Safari.
Есть ли конкретная версия Safari, с которой у вас проблемы? Показанный jsFiddle работает для вас? Он использует только предоставленный вами код.
При дальнейшем исследовании кажется, что диапазон должен иметь контент, чтобы показать границу. Я не совсем уверен, почему - возможно, Safari «оптимизирует» пустой диапазон, или задает нулевую высоту, или что-то в этом роде.
Похоже, что это проблема WebKit, как и в Chrome. В качестве обходного пути, если вы установите высоту на промежутке, это похоже на работу. Если я изменю ваш CSS на:
.cursor {
border-left: solid 1px red;
margin-right: -1px;
display: block;
position: relative;
z-index: 1;
height: 1em;
}
... то есть, добавляя высоту к промежутку, ваша граница отображает, есть ли у нее содержимое. Поэтому я предполагаю, что без контента WebKit не дает высоты вашему диапазону и, следовательно, не имеет границ. Что действительно разумное поведение, на самом деле.
Вот ваш оригинальный jsfiddle с добавленной высотой, который работает в Safari и Chrome .