Удалить ширину поля ввода по умолчанию - PullRequest
4 голосов
/ 11 октября 2011

У меня есть input field для пользователей и других, таких как электронная почта, телефон и т. Д.

Я хочу input field, который принимает width его контента, потому что имя пользователя может быть маленьким и большим, но правильнымтеперь, что происходит, если текст маленький, он берет default width, что оставляет некоторое нежелательное пространство справа.

Я пробовал float, inline, но ничего не работает.

Проверьте скрипку http://jsfiddle.net/sandeep/Qa8R5/

Я не хотел javascript для этого

Спасибо

Ответы [ 3 ]

5 голосов
/ 11 октября 2011

Невозможно использовать только CSS для создания элемента input шириной, равной тексту внутри него.

Причина в том, что input является замененным элементом .

Вам нужен JavaScript, что-то вроде этого .

1 голос
/ 11 октября 2011

Я знаю, вы сказали, что не хотите JavaScript, но JS - единственный способ ответить на ваш вопрос.

Вот рабочая скрипка , демонстрирующая эту функциональность.Ниже приведен код, необходимый для его выполнения.Источник: jQuery - автоматический ввод текста размера (не textarea!)

Плагин:

(function($){

$.fn.autoGrowInput = function(o) {

    o = $.extend({
        maxWidth: 1000,
        minWidth: 0,
        comfortZone: 70
    }, o);

    this.filter('input:text').each(function(){

        var minWidth = o.minWidth || $(this).width(),
            val = '',
            input = $(this),
            testSubject = $('<tester/>').css({
                position: 'absolute',
                top: -9999,
                left: -9999,
                width: 'auto',
                fontSize: input.css('fontSize'),
                fontFamily: input.css('fontFamily'),
                fontWeight: input.css('fontWeight'),
                letterSpacing: input.css('letterSpacing'),
                whiteSpace: 'nowrap'
            }),
            check = function() {

                if (val === (val = input.val())) {return;}

                // Enter new content into testSubject
                var escaped = val.replace(/&/g, '&amp;').replace(/\s/g,' ').replace(/</g, '&lt;').replace(/>/g, '&gt;');
                testSubject.html(escaped);

                // Calculate new width + whether to change
                var testerWidth = testSubject.width(),
                    newWidth = (testerWidth + o.comfortZone) >= minWidth ? testerWidth + o.comfortZone : minWidth,
                    currentWidth = input.width(),
                    isValidWidthChange = (newWidth < currentWidth && newWidth >= minWidth)
                                         || (newWidth > minWidth && newWidth < o.maxWidth);

                // Animate width
                if (isValidWidthChange) {
                    input.width(newWidth);
                }

            };

        testSubject.insertAfter(input);

        $(this).bind('keyup keydown blur update', check);

    });

    return this;

};

})(jQuery);

Использование:

$('input#myinput').autoGrowInput({
    comfortZone: 50,
    minWidth: 200,
    maxWidth: 2000
});
0 голосов
/ 11 октября 2011

Вы должны использовать Javascript или что-то еще, что может генерировать контент динамически.HTML и CSS не могут этого сделать.Вот решение с использованием jQuery, возьмите его или оставьте: http://jsfiddle.net/Qa8R5/3/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...