Firefox contenteditable-cursor-Problem
Habe ich eine contenteditable
div, die, wenn Sie leer sind (nur der Platzhalter-text vorhanden ist, per CSS unten), der Benutzer ist in der Lage, klicken Sie auf der rechten Seite der div-Element und platzieren Sie den cursor dort (siehe screenshot). Sobald der cursor ist es, der Benutzer nicht in der Lage ist zu geben an alle. Das Problem passiert nur in Firefox (ich bin in 33.1.1). Das Problem passiert nicht in jedem anderen browser.
HTML:
<div class="content-editable form-textarea font-face-frank"
placeholder="Type something here..." contenteditable="true"
ng-model="form.message" ng-class="form.fontName" strip-br="true" required></div>
CSS:
.content-editable {
outline-width: 0;
min-height: 1em;
max-height: 300px;
line-height: 1em;
overflow-y: scroll;
display: inline-block;
width: 100%;
font-size: 44px;
padding: 10px;
}
.content-editable:empty:before {
content: attr(placeholder);
}
, Was ich Versucht habe:
- Platzieren Sie einen Raum,
<br>
im div - behebt Problem, aber dann wird der Platzhalter-text wird nicht angezeigt; - Hinzufügen eines
,<br>
über.content-editable:empty {}
; den Platzhalter text bleibt, aber der cursor-Problem wird nicht angesprochen.
Repro der Ausgabe
Update
Entfernen der content: attr(placeholder);
css Richtlinie löst das Problem nicht, dass zu tun, die mir erlaubt, die Anzeige der 'Platzhalter' text in die contenteditable-element.
- First off, schöne Frage! Obwohl
placeholder
scheint Sinn zu machen, die auf Elementen wietextarea
undcontenteditable
(siehe lists.w3.org/Archives/Public/public-whatwg/2012May/0001.html ), derzeit ist nur dazu genutzt werden, um aufinput
html.spec.whatwg.org/multipage/.... Kann es nicht reproduzieren auf meinem Fx 33.1.1. - wirklich, das jsfiddle funktioniert? Hmm. Ein screencap von dem, was ich sehe, in Bezug auf die cursor-Platzierung.
- Kein Problem mit Firefox 31.2.0 ... und was ist genau deine Frage? Vielleicht sind Sie einfach besser füllen Sie einen bug-report.
- Frage gelegt, im detail - ich und andere sehen das oben genannte Problem mit contenteditable, als geliefert in jsfiddle. Froh, dass Sie nicht sehen, Sie - können Sie lassen Sie mich wissen, was OS Sie sind auf?
- 33.1 hat das problem, zuerst ging es gut, aber Klick den ganzen Weg auf der rechten Seite verursacht das problem (Windows 8)
- Passiert 34.0, aber nur wenn er gedrückt wird den ganzen Weg auf der rechten Seite. Benutzer können immer noch bewegen, es wieder auf der linken Seite und geben Sie.
- Nevermind, gleiche Problem mit beiden Versionen. Funktioniert einwandfrei im IE
- wenn jemand Schwierigkeiten hat, sich zu reproduzieren, das problem, klicken Sie bitte auf einen Ort ganz in der Nähe der rechten blau-Grenze, im firefox.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein Turnschuh, die Ihnen gefallen könnten: http://jsfiddle.net/e5gwc1gq/2/
Ich glaube, dass das problem ist, weil der
:before
Pseudo-element nicht erlauben, Zugriff auf die zugrunde liegenden parent-div.Der Grund, warum ich so denken, denn wenn Sie zu ersetzen waren
before
mitafter
besteht das problem weiterhin, aber umgedreht wird, dh, wenn Sie jetzt auf der linken Seite, funktioniert es nicht richtig.Hinweis: möchten Sie vielleicht
word-wrap: break-word;
css-Regel für.content-editable
, da firefox nicht als Standard, sondern chrome.Dieser CSS-Lösung funktioniert tatsächlich. Die Caret-position setzt auf die Ende, der text kann ausgewählt und alles funktioniert wie erwartet.
Getestet auf Firefox 35.0.1, Chrom 40.0.2214.94 m, IE 11
Hier ist ein Turnschuh: http://jsfiddle.net/yam9kkbL/
Wir liefen in das gleiche Problem wie beschrieben in der ursprünglichen Frage. Wir haben eine Prozedur für "auf" und "keydown" für Firefox. Wenn das Feld leer ist und der Benutzer versucht, auf oder geben Sie in das Feld, wir verwischen ihn und konzentriere dich dann wieder drauf.
Tatsächlich, die einfachste Lösung ist folgende :
Set
height: 16px;
für die contentEditable div.Keine Notwendigkeit zum hinzufügen von
placeholder
Attribute, oder andere komplexeCSS-Eigenschaften-Kombinationen
Hinsichtlich
16px;
Das problem ist mit der :vor. Die Lösung ist, um zu simulieren, dass, bevor mit anderen div.
Hier ist meine Lösung zeige ich auch :bevor Sie Schwierigkeiten mit der position relative und absolute.
https://jsfiddle.net/oropesa/d8y1k7yd/
CSS:
HTML:
Funktioniert bei mir... Firefox Hinzugefügt
-moz-user-select: none;
als inline-styleHabe ich mit einer Geige, das scheint zu funktionieren... das problem ist nur, der text muss manuell gelöscht.
Fiddle
HTML
CSS
JavaScript
<script>
im HTML-Körper, nach den div.Das problem der
:before
(oder:after
) pseudoelement abfangen Schwerpunktcontenteditable
im FireFox kann gelöst werden, indem Sie kurz die Fokussierung ein anderes element und wieder den Fokus Rücken:Müssen Sie möglicherweise die Einführung dieses mock
input
transfer konzentrieren zu können.wie scheint FF nicht richtig funktioniert mit ::before/after pseudo-Elemente.auch wenn ich absolute Positionierung der neue bug erschien - ein caret-Zeichen-set auf der Oberseite über den Platzhalter.
also meine Lösung war die Verwendung einer Zeitspanne (in meinem Fall - nach dem contenteditable div), aber Sie können auch legen Sie es im inneren.
css wird so etwas wie: