Скрыть текст с помощью CSS

У меня в HTML есть такой тег:

<h1>My Website Title Here</h1>

Используя css, я хочу заменить текст своим настоящим логотипом. У меня есть логотип без проблем, изменив размер тега и вставив фоновое изображение через css. Однако я не могу понять, как избавиться от текста. Я видел, как это делалось раньше, в основном путем выталкивания текста с экрана. Проблема в том, что я не могу вспомнить, где это видел.

здесь много устаревших ответов: подумайте о том, чтобы проголосовать за более свежий ответ stackoverflow.com/a/27769435/2586761, чтобы раскрыть его

ptim 09.02.2017 03:15
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
331
1
691 106
30
Перейти к ответу Данный вопрос помечен как решенный

Ответы 30

Ответ - создать промежуток со свойством

{display:none;}

Вы можете найти пример на этот сайт

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

Marvo 08.09.2015 09:05

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

cchamberlain 31.03.2021 01:19

Самый удобный способ кроссбраузерности - написать HTML как

<h1><span>Website Title</span></h1>

затем используйте CSS, чтобы скрыть диапазон и заменить изображение

h1 {background:url(/nicetitle.png);}
h1 span {display:none;}

Если вы можете использовать CSS2, то есть несколько более эффективных способов использования свойства content, но, к сожалению, Интернет еще не на 100%.

Но не забудьте также установить атрибут ширины и высоты изображения - и убедитесь, что установлены «отступы» и «поля», потому что у браузеров разные представления о том, сколько отступов / полей должно быть у тега H1.

user19302 23.01.2009 04:28

Недостатком здесь является то, что изображения отключены или появляется бот с поддержкой css, заголовок не будет виден.

willoller 23.01.2009 07:05

Важный текст в display none, вероятно, будет пропущен роботами поисковых систем и программами чтения с экрана. Вместо этого используйте text-indent.

dylanfm 23.01.2009 07:47

Это ни к чему не приведет, OP может также удалить текст в заголовке. Программы чтения с экрана ничего не делают с дисплеем.

Idris Dopico Peña 21.11.2017 14:32

вы можете использовать свойство css background-image и z-index, чтобы изображение оставалось перед текстом.

Пример? Я не понимаю, как z-index применим к background-image.

Martynas Jusevičius 01.12.2019 15:19
Ответ принят как подходящий

Это один способ:

h1 {
    text-indent: -9999px;                 /* sends the text off-screen */
    background-image: url(/the_img.png);  /* shows image */
    height: 100px;                        /* be sure to set height & width */
    width: 600px;
    white-space: nowrap;            /* because only the first line is indented */
}

h1 a {
    outline: none;  /* prevents dotted line when link is active */
}

Вот другой путь, чтобы скрыть текст, избегая огромного поля в 9999 пикселей, которое создаст браузер:

h1 {
    background-image: url(/the_img.png);  /* shows image */
    height: 100px;                        /* be sure to set height & width */
    width:  600px;

    /* Hide the text. */
    text-indent: 100%;
    white-space: nowrap;
    overflow: hidden;
}

Длинные заголовки будут иметь проблему с этим методом, так как только текст перед переносом слов имеет отступ, а спецификация W3C не определяет ситуацию для отрицательного отступа, поэтому это может привести к непредсказуемым результатам

Chris Farmiloe 23.01.2009 04:34

Если вы используете этот метод, вы должны добавить «overflow: hidden», чтобы предотвратить смещение окна выбора влево (особенно со ссылками).

willoller 23.01.2009 07:03

Если у вас есть какие-либо ссылки в элементах с отрицательным текстовым отступом, убедитесь, что вы также указали «outline: none», иначе вы получите пунктирную границу, выходящую за левую часть экрана.

nickf 23.01.2009 07:20

Я предпочитаю использовать text-indent: -9999px; просто чтобы убедиться, что текст действительно далеко уходит за пределы экрана. Немного защитной паранойи.

Andy Ford 23.01.2009 11:15

Также добавьте «white-space: nowrap» на всякий случай, если ваш текст длинный и с отступом только первая строка.

Andrew Moore 08.05.2009 17:38

Чтобы дополнительно подтвердить утверждение, что «это правильный способ», см. Этот отличный вопрос для получения подробной информации о совместимости программ чтения с экрана: stackoverflow.com/questions/1755656/…

Jordan Lev 09.11.2011 07:27

@Jordan Lev: Я не, однако, если дать схему: нет; - правильный способ сделать это. Удаление контура?

MEM 22.06.2012 20:43

Также используйте text-align: left, иначе текст может не сдвинуться.

sparebytes 17.08.2012 19:37

Возможный побочный эффект этого в WebKit - большие слои, вредные для рендеринга с ограниченными ресурсами (источник: youtube.com/watch?v=xuMWhto62Eo @ 35:30).

Regis Frey 22.08.2012 20:45

У меня были проблемы с Firefox, который все еще не полностью скрывал текст, поэтому я изменил text-indent на 200%, и он работал нормально.

aalaap 14.12.2013 21:43

как насчет добавления «цвет: прозрачный»; ?

Pola Edward 22.03.2014 04:46

Джеффри Зельдман предлагает не использовать -9999 пикселей; так как он более ресурсоемкий, чем -100%; Более подробная информация ниже.

chocolata 14.11.2014 18:03

Итак, после 7 лет существования этой возможности в HTML для решения этой проблемы, остается ли это «правильным» способом ее решения (теперь, когда у нас есть HTML5)?

Barrosy 15.04.2016 14:14

Если ваш текст содержит <br/>, текст после этих разрывов останется видимым.

Richard de Wit 06.10.2016 14:49

На самом деле это область, созревшая для обсуждения, поскольку доступно множество тонких техник. Важно, чтобы вы выбрали / разработали технику, которая соответствует вашим потребностям, включая: программы чтения с экрана, комбинации включения / выключения изображений / CSS / сценариев, поисковую оптимизацию и т. д.

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

http://faq.css-standards.org/Image_Replacement

http://www.alistapart.com/articles/fir

http://veerle.duoh.com/blog/links/#l-10

См. меццо-синий для хорошего обзора каждой техники, с сильными и слабыми сторонами, плюс примеры html и css.

Не использовать { display:none; }. Это делает контент недоступным. Вы хотите, чтобы программы чтения с экрана видели ваш контент и визуально стилизовали его, заменив текст изображением (например, логотипом). Используя text-indent: -999px; или аналогичный метод, текст все еще присутствует - только не визуально. Используйте display:none, и текст исчезнет.

Просто добавьте font-size: 0; в свой элемент, содержащий текст.

.hidden { font-size: 0; }
  font-size: 0; hides text. <span class = "hidden"> You can't see me :) </span>

Это именно то, что мне было нужно. Я хотел скрыть то, что было в div, но показать, что было в дочерних промежутках (чтобы скрыть пунктуацию между ними).

mskfisher 30.09.2011 03:24

Это кажется наиболее логичным (читай: наименее странным) методом - однако мне интересно, насколько хорошо он поддерживается в различных браузерах? (Я могу подтвердить, что он работает в Firefox.)

Brian Lacy 27.04.2012 21:34

Он по-прежнему показывает очень мелкий текст в большем количестве браузеров, чем только в IE7, это не полное кроссбраузерное решение.

macguru2000 26.10.2012 03:47

Я тестировал трюк {font-size: 0} в Chrome 27, Firefox 17, Safari для Windows 5.1.7, Opera 12.12, IE8, IE9, IE10 - он работает во всех этих браузерах. Этот трюк лучше всего подходит, если вы не можете установить фоновое изображение на самом элементе (например, потому что вы используете плотно упакованное изображение спрайта, а требуемый значок не имеет достаточно пустого отступа вокруг него) и вам нужно использовать псевдоселектор , например element: after для отображения фонового изображения.

beluga 22.01.2013 19:35

Это также изменяет размер div, поэтому я не рекомендую это делать.

Stephan Bijzitter 26.03.2015 11:42

По какой-то причине этот трюк добавил место над .myElement, когда я его попробовал.

Flimm 16.06.2016 15:43

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

Charmie 23.01.2017 09:37

Спасибо! это сработало очень хорошо.

acido 12.02.2021 22:28
<style>
body {
     visibility:hidden
}
body .moz-signature p{
    visibility:visible
}
</style>

Вышеуказанное хорошо работает и в последней версии Thunderbird.

Обратите внимание, что использование этого метода делает текст нечитаемым для большинства программ чтения с экрана - см. stackoverflow.com/questions/1755656/…

Jordan Lev 09.11.2011 07:26

Почему бы просто не использовать:

h1 { color: transparent; }

Почему нет? Потому что Google это не нравится.

alekwisnia 02.04.2012 13:43

Проверка (CSS 2.1): «прозрачный» не является допустимым значением для свойства «цвет».

HasanG 21.04.2012 03:11

Текст станет видимым, если пользователь выберет его (STRG + A и т. д.) - это выглядит очень непрофессионально! Привет Кристофер

Christopher Stock 27.11.2013 18:39

Это самое простое решение, если оно соответствует вашим потребностям (IE8 +, а не выделяемый текст).

Jonathan 09.02.2014 13:57

@ HasanGürsoy и будущие гуглеры - "CSS3 расширяет значение цвета, чтобы включить ключевое слово 'transparent' ...."

ABMagil 02.07.2014 17:22

прозрачный недействителен. еще вы можете выбрать / выделить

kuma DK 22.06.2015 17:47
color: transparent; работает вместе с user-select: none;, если вы не измените цвет.
stan-z 13.03.2017 12:37

@ChristopherStock когда-нибудь задумывался о том, чтобы отображать дроби со смешанной нотацией достойным образом, не нарушая математики, когда дело доходит до копирования и вставки? Я бы сказал, вам лучше переосмыслить значение слова "профессиональный"

Wolf 10.11.2020 13:49
h1 {
    text-indent: -3000px; 
    line-height: 3000px;
    background-image: url(/LOGO.png);
    height: 100px; width:  600px;  /* height and width are a must */

}

Почему есть высота строки?

SandRock 27.05.2014 13:24

Если мы сможем редактировать разметку, жизнь станет проще, просто удалите текст и будьте счастливы. Но иногда разметка была размещена JS-кодом или нам просто не разрешено ее редактировать, слишком плохой css оказался единственным оружием, которое мы получили в наше распоряжение.

Мы не можем разместить <span>, обернув текст, и скрыть весь тег. Кстати, некоторые браузеры не только скрывают элементы с display:none, но и отключают компоненты внутри.

И font-size:0px, и color:transparent могут быть хорошими решениями, но некоторые браузеры их не понимают. На них нельзя полагаться.

Я предлагаю:

h1 {
  background-image: url(/LOGO.png);  /* Our image */
  text-indent: -3000px;  /* Send text out of viewable area */
  height: 100px; width: 600px;  /* height and width are a must, agree */
  overflow:hidden;  /* make sure our size is respected */
}

Использование overflow:hidden обеспечивает нашу ширину и высоту. Некоторые браузеры (не буду называть их ... IE) могут читать ширину и высоту как min-width и min-height. Я хочу, чтобы коробка не увеличивалась.

Обычно я использую:

span.hide
{
  position:fixed;
  right:-5000px;
}

Используйте тег Condition для другого браузера и используя css, который вы должны разместить height:0px и width:0px также вы должны разместить font-size:0px.

Почему бы вам не использовать:

<li><a href = "#">bla</a></li>

a {
    opacity: 0.0;
    font-size: 1px;
}

li {
    background-image: url('test.jpg');
}

Если у вас нет элемента span или div, он отлично работает для ссылок.

Это сработало для меня с диапазоном (проверка нокаута).

<span class = "validationMessage">This field is required.</span>

.validationMessage {
    background-image: url('images/exclamation.png');
    background-repeat: no-repeat;
    margin-left: 5px;
    width: 16px;
    height: 16px;
    vertical-align: top;

    /* Hide the text. */
    display: inline-block;
    overflow: hidden;
    font-size: 0px;
}

Если цель состоит в том, чтобы просто сделать текст внутри элемента невидимым, установите для атрибута цвета значение непрозрачности 0, используя значение rgba, такое как color:rgba(0,0,0,0);, чистый и простой.

Джеффри Зельдман предлагает следующее решение:

.hide-text {
  text-indent: 100%;
  white-space: nowrap;
  overflow: hidden;
}

Он должен быть менее ресурсоемким, чем -9999px;

Прочтите об этом здесь:

http://www.zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement/

Лучший ответ работает для короткого текста, но если текст оборачивается, он просто отображается на изображении.

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

$('#logo img').error(function(){
    $('#logo').html('<h1>My Website Title Here</h1>');
});

См. ОБРАЗЕЦ КОДА

Решение, которое мне подходит:

HTML

<div class = "website_title"><span>My Website Title Here</span></div>

CSS

.website_title {
    background-image: url('../images/home.png');
    background-repeat: no-repeat;
    height: 18px;
    width: 16px;
}

.website_title span {
    visibility: hidden;
}

Скрытие текста с учетом специальных возможностей:

В дополнение к другим ответам вот еще один полезный подход для скрытия текста.

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

.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0,0,0,0);
    border: 0;
}

Стоит отметить, что этот класс в настоящее время используется в Бутстрап 3.


Если вам интересно прочитать о доступности:

Это хорошо работает для добавления элемента только в программу чтения с экрана; однако он не работает с исходным вопросом, где изображение должно отображаться с помощью фонового изображения, указанного в css.

vossad01 29.05.2017 05:59

@ vossad01 - Если вы не можете добавить еще один элемент, и вы застряли на одном элементе (как в случае, о котором вы упомянули), тогда одним хорошим обходным путем было бы использовать псевдоэлемент ... также я опубликовал этот ответ 6 спустя годы после того, как был задан первоначальный вопрос, и мой ответ был предназначен для более широкой аудитории, поскольку этот вопрос кажется популярным.

Josh Crozier 29.05.2017 06:08

Попробуйте этот код, чтобы сократить и скрыть текст

.hidetxt{

  width: 346px;
  display: table-caption;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: no-drop;
  
}

.hidetxt:hover { 

  visibility: hidden;
  
}
<div class = "hidetxt">
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when</p>
</div>

или скрыть использование в вашем классе css .hidetxt { visibility: hidden; }

Использование нулевого значения для font-size и line-height в элементе помогает мне:

<style>
    .text {
        display: block;
        width: 200px;
        height: 200px;

        font-size: 0;
        line-height: 0;
    }
</style>

<span class = "text">
    Invisible Text
</span>

Чтобы скрыть текст из html, используйте свойство text-indent в css

.classname {
 text-indent: -9999px;
 white-space: nowrap; 
}

/ * для динамического текста вам нужно добавить пробел, чтобы ваш примененный CSS не мешал. nowrap означает, что текст никогда не переносится на следующую строку, текст продолжается в той же строке до тех пор, пока не будет обнаружен тег <br>.

h1{
   background:url("../images/logo.png") no-repeat;
   height:180px;
   width:200px;
   display:inline-block;
   font-size:0px !important;
   text-intent:-9999999px !important;
   color:transparent !important;
 }

Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно Зачем и / или как, этот код отвечает на вопрос, улучшает его долгосрочное значение.

Benjamin W. 16.03.2016 09:25

Так много сложных решений.

Самый простой - просто использовать:

color:rgba(0,0,0,0)

Большой! Это работает для любого цвета фона. Спасибо.

Sandeep Amarnath 28.12.2019 00:52

Станьте видимым при выборе.

arcadius 10.02.2021 03:37

Не помню, где я это взял, но уже много лет пользуюсь им успешно.

  =hide-text()
    font: 0/0 a
    text-shadow: none
    color: transparent

Мой миксин написан в стиле sass, но вы можете использовать его так, как считаете нужным. Для удобства я обычно держу класс .hidden где-нибудь в моем проекте, чтобы прикрепить его к элементам, чтобы избежать дублирования.

Я думаю, что где-то читал, что эта версия предпочтительнее, потому что отрицательный текстовый отступ заставит браузер отобразить длинное поле в 10000 пикселей (или любой другой пример, который вы используете). Изменение шрифта, как в этом примере, не приведет к тому, что браузер создаст большое поле, которое он попытается отобразить.

Gambo 02.06.2019 11:14

заменить контент на CSS

 h1{  font-size: 0px;}
 h1:after {
    content: "new content";
    font-size: 15px;
  }

Один из способов добиться этого - использовать :before или :after. Я использовал этот подход в течение нескольких лет и особенно хорошо работает с векторными иконками с глифами.

h1 {
    position: relative;
    text-indent: -9999px;                 /* sends the text off-screen */
    }
h1:before {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 1;
    display: block;
    width: 600px;
    height: 100px;
    content: ' ';
    background: transparent url(/the_img.png) 0 0 no-repeat;
    }

вы можете просто скрыть свой текст, добавив этот атрибут:

font-size: 0 !important;

Также стоит проверить, действительно ли пункт !important нужен в вашем случае. В моем случае он отлично работал и без него.

Eerik Sven Puudist 16.04.2020 00:16

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