Стиль ввода текста html в соответствии с его содержимым

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

Краткая версия состоит в том, что у меня много html-страниц, каждая из которых имеет форму, которая принимает ввод, но никогда не сохраняет ввод нигде - они всегда распечатываются для отправки по почте. Ранее разработчик, который никогда не слышал о @media print, проделал начальную работу над большинством из них, и поэтому он придумал некоторые ... решения странный, чтобы скрыть уродливые текстовые поля на печатной странице, что обычно приводит к созданию двух полностью отдельных копий почти тот же html. К сожалению, во многих случаях это сломало кнопку возврата, и теперь я должен вернуться и исправить их.


В некоторых случаях эти html-формы действительно представляют собой буквы с вводом текста в середине текста. Я могу стилизовать текстовые поля так, чтобы поле не отображалось, но они все еще имеют неправильный размер. Это приводит к появлению дополнительных уродливых пробелов, которым не место. Как сделать так, чтобы вводимые данные соответствовали тексту, введенному пользователем?

Лучшее, что я могу придумать на данный момент, - это иметь скрытый <span> рядом с каждым вводом, который стилизован для отображения вместо ввода при печати, и использовать javascript для его синхронизации. Но это некрасиво. Я ищу что-нибудь получше.

Обновлять:
Большинство наших пользователей все еще используют IE6, но у нас есть IE7 и firefox.

Обновление2:
Я немного переосмыслил это, чтобы использовать ярлык, а не промежуток. Я буду поддерживать отношения, используя атрибут for метки. См. Мой окончательный код в этот вопрос.

Я предполагаю, что у вас были проблемы с установкой свойств padding и margin для начала на 0?

Phil.Wheeler 13.11.2008 00:25
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
1
6 258
2

Ответы 2

Идея диапазона не так уж и плоха. С библиотекой Javascript, такой как jquery, одна 1-2-строчная функция Javascript может динамически заменять все соответствующие теги <input> на <span>..</span>. Вам не придется самому входить ни в один из пролетов.

В действительно грубом коде псевдо-javascript с jquery это будет примерно так:

function replaceInputsOnSomeButtonClick() {
 // Find all inputs, wrap value with span tag, remove the input tag
 $("input").text().wrap("<span>").remove();
}

Мне также нужно, чтобы он был обратимым, но это дает мне еще лучшее представление: я могу использовать атрибут имени каждого элемента для переключения. Проблема, однако, в том, что они должны вручную запускать мой код при печати - они не смогут использовать кнопку печати в браузере.

Joel Coehoorn 13.11.2008 00:30

У CSS нет ответа на этот вопрос. Входные данные - это «замененные элементы» - черный ящик в CSS.

input {content:attr(value)} работает только для начального значения в HTML и не отражает никаких последующих изменений.

Так что лучшее, что вы можете получить, - это менее уродливый Javascript.

for(var i=0; i < form.elements.length; i++)
{
   var input = form.elements[i]; 
   if (input.type != 'text') continue;

   var span = document.createElement('span');
   input.parentNode.insertBefore(span,input);

   span.className = 'show-in-print';
   input.className = 'hide-in-print';

   input.onchange = (function(span){ // trick to preserve current value of span
      return function()
      {
         if (span.firstChild) span.removeChild(span.firstChild);
         span.appendChild(document.createTextNode(this.value));
      }
   })(span);
}

Другие вопросы по теме