Положение диапазона внутри входа - НЕ ДЛЯ МЕСТОПОЛОЖНИКА - PullRequest
1 голос
/ 18 сентября 2011

Я нахожусь в процессе разработки проекта, в котором мой клиент хочет использовать функцию «показать / скрыть» пароль - достаточно просто, но ему нужна кнопка внутри поля ввода.Что также легко сделать - если бы мы работали на статическом экране.

Однако, это проект, использующий медиа-запросы, и поэтому возникает вопрос, как динамически позиционировать якорь (якорь является нашим управляющим элементомдля маски / снятия маски) внутри вход.

Я в растерянности.Я установил простую скрипку, показывающую идеальную цель (без учета радиуса и т. Д.) Здесь: http://jsfiddle.net/x4jPE/

Решение

http://jsfiddle.net/LyfTJ/2/

Большое спасибо Робу W

1 Ответ

1 голос
/ 18 сентября 2011

Создайте контейнер и установите атрибут position CSS на relative, чтобы любой внутри абсолютно позиционированный элемент относился к контейнеру.Также добавьте display:inline-block, чтобы контейнер сжимался до минимально необходимого размера (= размер поля ввода).

Затем добавьте padding-right:42px в поле пароля, чтобы кнопка неперекрывать содержимое поля.Наконец, добавьте position:absolute; right:0; к якору, чтобы он располагался справа от поля ввода.

Fiddle: http://jsfiddle.net/LyfTJ/1/

HTML:

<div class="zpass">
    <input type="password" name="zpass" />
</div>

JS:

$(document).ready(function(){
    $(".zpass").each(function(){
        $(this).append("<a>Show</a>");
        var zpass = $("input", this)[0];
        $("a", this)[0].href = "javascript:;";
        $("a", this).click(function(){
            if(zpass.type == "password"){
                zpass.type = "text";
                this.innerHTML = "Hide";
            } else {
                zpass.type = "password";
                this.innerHTML = "Show";
            }
        });
    });
});

CSS:

.zpass {
    position: relative;
    display: inline-block;
}
.zpass > input {
    padding: 8px 42px 8px 8px;
    width: 250px;
    border: 1px solid #ccc;
}
.zpass > a {
    position: absolute;
    right: 0px;
    padding: 9px 4px 8px;
    font-size: .85em;
    color: #a5a5a5;
    background: #eee;
    border: 1px solid #ccc;
    border-left: 0;
    text-decoration: none;
    cursor: pointer;
    text-align: center;
    width: 33px;
}
.zpass > a:hover {
    background-color: #ccc;
}
...