Подтвердить что ты не робот

Скрыть элементы управления формой при печати страницы HTML с помощью CSS

У некоторых элементов формы HTML есть дополнительный интерфейс, прикрепленный к ним, например стрелки вверх/вниз на number. Однако при печати страницы эти кнопки больше не нужны, так как пользователь не может взаимодействовать с ними в печатной форме.

Текстовые поля легко справляются с:

@media print {
    input {
        border: none;
        border-bottom: 2px solid #000000;
    }
}

Делает их печать довольно красиво, как строка с текстом на нем. Так же, как форма, которую вы заполняете вручную. Однако, делая то же самое для входов, таких как number, вы получаете эти неприятные стрелки вверх/вниз:

HTML <input type="number">

И тогда есть еще менее полезные распечатки, такие как range, что ничего не значит, когда на странице:

HTML <input type="range"

Есть ли способ обойти это? Любой способ стилизовать ту часть элемента, которая будет невидимой, но все же увидеть значение/текст?

Я понимаю, что можно поменять атрибут type="" с помощью JS или иметь другой элемент, содержащий значение, которое будет отображаться на печать, но если есть решение, которое может быть сделано только с помощью CSS, это будет лучше.

4b9b3361

Ответ 1

Этот эффект может быть достигнут в браузерах webkit. Я все еще не могу найти способ сделать это в других, но он будет работать для webkit.

@media print {
    input::-webkit-outer-spin-button,  
        input::-webkit-inner-spin-button {
        -webkit-appearance: none;
    }
}

Webkit фактически обрабатывает эти кнопки как псевдоэлементы (без уважительной причины) и предоставляет возможность их скрыть. Это именно то поведение, которое нужно было бы хотеть, хотя его ограничивает просто вебкит, это немного раздражает.

Ответ 2

Вы можете скрыть определенные элементы с помощью селекторов CSS

@media print {
    input[type=range] {
        display: none;
    }
}

Однако, чтобы скрыть стрелки в элементе number, возможно, вы могли бы попробовать поместить 2 элемента вместо: 1 text и 1 number, а затем отобразить number в режиме экрана, в то время как text скрыт, и наоборот в режиме печати

@media print {
    input[type=text] {
        display: inline-block;
        border:none;
        border-bottom:2px solid #000;
        etc..
    }
    input[type=number] {
        display: none;
    }
}
@media screen {
    input[type=number] {
        display: inline-block;
    }
    input[type=text] {
        display: none;
    }
}

Нечто подобное может быть сделано для других элементов формы. Это будет зависеть от вашей реализации, если вы можете использовать этот метод.

Ответ 3

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

@media print {
    .hideOnprint {
        display: none;
    }
    .hideOnScreen {
        display: block;
    }
}
@media screen {
    .hideOnprint {
        display: block;
    }
    .hideOnScreen {
        display: none;
    }
}

влияет на текст с классом hideOnScreen и ввод с классом hideOnPrint

Ответ 4

Лучшим решением, поскольку он не использует префикс поставщика, будет использовать элемент output.

Принципы

  • Скрыть элемент output на @media screen;
  • обновить значение элемента output при вводе поля;
  • переключить видимость элемента input и output на @media print.

код доступен здесь.

HTML

<form onsubmit="return false" oninput="print.value = parseInt(screen.value)">
  <input class='screen' name="screen" type="number" value='0'> →
  <output class='print' name="print">5 (default print value)</output>
</form>
<p>The <code>output</code> element replace the <code>input</code> on print media</p>

CSS

.print {
  display: none;
}

@media print {
  .screen {
    display: none;
  }
  .print {
    display: inline-block;
  }
}

Ответ 5

Может быть, вы должны использовать простой javascript для получения только значений соответствующих полей, действия печати, изменения в формате для печати, выполнения печати и изменения ее обратно в нормальное русло?

На самом деле не знаю, выполним ли только CSS.

Возможно, вам стоит рассмотреть возможность использования механизма синтаксического анализа XML. Это действительно удобный метод для таких задач.

http://webdesign.about.com/od/xslt/a/xslt-tutorial-1.htm

Ответ 6

Альтернативой может быть предоставление ссылки для печати и другая копия страницы без лишних вещей

ie:        www.something.com/page.htm
printpage  www.something.com/page-print.htm

это наиболее распространенная практика (также вы можете повторно использовать css с частями только для печати)

надеюсь, что поможет