Получить тип ввода = текст, который будет выглядеть как type = password

TL;DR

У меня есть вход с type=text, который я хочу показать звездам как вход с type=password, используя только CSS.


В принципе у меня есть форма со следующим вводом:

<input type='text' value='hello' id='cake' />

Я не создаю форму, у меня вообще нет доступа к ее HTML. Однако у меня есть доступ к CSS, который применяется к странице.

Я бы хотел, чтобы он вел себя как type=password, то есть - показывать звезды для того, что пользователь вводил, а не набираемый текст. В принципе, я бы хотел, чтобы этот аспект (презентация ввода пользователя) выглядел как поле type=password.

Поскольку это кажется проблемой только для презентации, я решил, что для этого нужно использовать CSS, поскольку он находится в области ответственности. Однако - я так не нашел. Я должен поддерживать IE8 +, но я бы предпочел иметь решение, которое работает для современных браузеров только без какого-либо решения. Дополнительные пункты для предотвращения копирования/вставки, но я могу жить без этого.

Примечание: Если это не ясно, я не могу добавить HTML или JavaScript на страницу - только CSS.


(Единственное, что я нашел, это этот вопрос, но он касается проблемы, связанной с jQuery, и у нее есть решение для JavaScript)

Ответ 1

Ну как @ThiefMaster предложил

input.pw {
    -webkit-text-security: disc;
}

Однако это будет работать в браузерах, которые являются потомками webkit. Opera, Chrome и Safari, но не очень хорошая поддержка для остальных, другое решение для этого - использование webfonts.

Используйте любую утилиту для редактирования шрифтов, например FontForge, чтобы создать шрифт со всеми символами * (или любым символом, который вы хотите). Затем используйте веб-шрифты CSS, чтобы использовать их в качестве настраиваемого шрифта.

Ответ 2

Вы можете создать шрифт , сделанный только из точек

@font-face
    {
    font-family:'dotsfont';
    src:url('dotsfont.eot');
    src:url('dotsfont.eot?#iefix')  format('embedded-opentype'),
        url('dotsfont.svg#font')    format('svg'),
        url('dotsfont.woff')        format('woff'),
        url('dotsfont.ttf')         format('truetype');
    font-weight:normal;
    font-style:normal;
}

input.myclass
    {-webkit-text-security:disc;font-family:dotsfont;}

Это может быть то, что вы ищете...

Есть много глифов, которые можно определить, но может быть более простой способ сделать это. Вы можете создать абсолютно пустой шрифт и определить только глиф .notdef (идентификатор глифа 0), который используется в качестве замены, когда другой глиф не определен

Как вы, наверное, знаете, обычно выглядит так: missing glyph icons

Итак, вы должны заменить его точкой/звездочкой и проверить, что происходит с браузерами... потому что я не уверен, что он работает над всеми из них (некоторые могут захотеть использовать свою замену отсутствующего глифа). Дайте мне знать, если вы попробуете...

НТН

Ответ 3

В браузерах на основе WebKit вы можете сделать это, используя свойство -webkit-text-security. Он даже позволяет вам выбирать форму пуль (диск, круг, квадрат).

input.pw {
    -webkit-text-security: disc;
}

Демо: http://jsfiddle.net/ThiefMaster/6uJJw/1/

Однако это, по-видимому, нестандартное. По крайней мере Safari CSS docs говорят, что это расширение Apple. Он отлично работает в Chrome - очевидно - но я не думаю, что любой другой механизм рендеринга поддерживает его...

Ответ 4

Это работает только для поля text (:

input { -webkit-text-security: none; } 
input { -webkit-text-security: circle; } 
input { -webkit-text-security: square; } 
input { -webkit-text-security: disc; /* Default */ }

Ответ 5

В принципе вы можете сделать

input { -webkit-text-security: disc; }

внутри вашего файла css.

Но осторожность, кто-то может просто "проверить элемент" в Chrome и изменить элемент css с "диска" на "none", а реальный текст будет отображаться как день.

Что касается отключения select/copy, обратитесь к этому сообщению: Как отключить выделение выделения текста с помощью CSS?

Ответ 6

Если вы хотите предотвратить функциональность копирования вставки, вы можете использовать:

-webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: moz-none; -ms-user-select: none; user-select: none;

который не позволит другим выбрать текст, и поэтому они не смогут копировать.