У меня в HTML есть такой тег:
<h1>My Website Title Here</h1>
Используя css, я хочу заменить текст своим настоящим логотипом. У меня есть логотип без проблем, изменив размер тега и вставив фоновое изображение через css. Однако я не могу понять, как избавиться от текста. Я видел, как это делалось раньше, в основном путем выталкивания текста с экрана. Проблема в том, что я не могу вспомнить, где это видел.






Ответ - создать промежуток со свойством
{display:none;}
Вы можете найти пример на этот сайт
Некоторые из отрицательных голосов, вероятно, связаны с проблемами доступности - верный момент. Но в моем случае я перетаскиваю меню из службы меню ресторана на веб-сайт через их веб-службу. Владелец ресторана не хочет, чтобы цены отображались (но тот же сервис используется для печати фактических меню). Это ситуация, когда цены на сайте вообще не нужны. Хорошо знать все возможные подходы.
Противоположные голоса связаны с тем, что вопрос вообще не задан. Это полностью скрывает элемент, но не только текст элемента.
Самый удобный способ кроссбраузерности - написать HTML как
<h1><span>Website Title</span></h1>
затем используйте CSS, чтобы скрыть диапазон и заменить изображение
h1 {background:url(/nicetitle.png);}
h1 span {display:none;}
Если вы можете использовать CSS2, то есть несколько более эффективных способов использования свойства content, но, к сожалению, Интернет еще не на 100%.
Но не забудьте также установить атрибут ширины и высоты изображения - и убедитесь, что установлены «отступы» и «поля», потому что у браузеров разные представления о том, сколько отступов / полей должно быть у тега H1.
Недостатком здесь является то, что изображения отключены или появляется бот с поддержкой css, заголовок не будет виден.
Важный текст в display none, вероятно, будет пропущен роботами поисковых систем и программами чтения с экрана. Вместо этого используйте text-indent.
Это ни к чему не приведет, OP может также удалить текст в заголовке. Программы чтения с экрана ничего не делают с дисплеем.
вы можете использовать свойство css background-image и z-index, чтобы изображение оставалось перед текстом.
Пример? Я не понимаю, как z-index применим к background-image.
Это один способ:
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 не определяет ситуацию для отрицательного отступа, поэтому это может привести к непредсказуемым результатам
Если вы используете этот метод, вы должны добавить «overflow: hidden», чтобы предотвратить смещение окна выбора влево (особенно со ссылками).
Если у вас есть какие-либо ссылки в элементах с отрицательным текстовым отступом, убедитесь, что вы также указали «outline: none», иначе вы получите пунктирную границу, выходящую за левую часть экрана.
Я предпочитаю использовать text-indent: -9999px; просто чтобы убедиться, что текст действительно далеко уходит за пределы экрана. Немного защитной паранойи.
Также добавьте «white-space: nowrap» на всякий случай, если ваш текст длинный и с отступом только первая строка.
Чтобы дополнительно подтвердить утверждение, что «это правильный способ», см. Этот отличный вопрос для получения подробной информации о совместимости программ чтения с экрана: stackoverflow.com/questions/1755656/…
@Jordan Lev: Я не, однако, если дать схему: нет; - правильный способ сделать это. Удаление контура?
Также используйте text-align: left, иначе текст может не сдвинуться.
Возможный побочный эффект этого в WebKit - большие слои, вредные для рендеринга с ограниченными ресурсами (источник: youtube.com/watch?v=xuMWhto62Eo @ 35:30).
У меня были проблемы с Firefox, который все еще не полностью скрывал текст, поэтому я изменил text-indent на 200%, и он работал нормально.
как насчет добавления «цвет: прозрачный»; ?
Джеффри Зельдман предлагает не использовать -9999 пикселей; так как он более ресурсоемкий, чем -100%; Более подробная информация ниже.
Итак, после 7 лет существования этой возможности в HTML для решения этой проблемы, остается ли это «правильным» способом ее решения (теперь, когда у нас есть HTML5)?
Если ваш текст содержит <br/>, текст после этих разрывов останется видимым.
На самом деле это область, созревшая для обсуждения, поскольку доступно множество тонких техник. Важно, чтобы вы выбрали / разработали технику, которая соответствует вашим потребностям, включая: программы чтения с экрана, комбинации включения / выключения изображений / CSS / сценариев, поисковую оптимизацию и т. д.
Вот несколько полезных ресурсов, чтобы начать использовать стандартные методы замены изображений:
http://faq.css-standards.org/Image_Replacement
См. меццо-синий для хорошего обзора каждой техники, с сильными и слабыми сторонами, плюс примеры 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, но показать, что было в дочерних промежутках (чтобы скрыть пунктуацию между ними).
Это кажется наиболее логичным (читай: наименее странным) методом - однако мне интересно, насколько хорошо он поддерживается в различных браузерах? (Я могу подтвердить, что он работает в Firefox.)
Он по-прежнему показывает очень мелкий текст в большем количестве браузеров, чем только в IE7, это не полное кроссбраузерное решение.
Я тестировал трюк {font-size: 0} в Chrome 27, Firefox 17, Safari для Windows 5.1.7, Opera 12.12, IE8, IE9, IE10 - он работает во всех этих браузерах. Этот трюк лучше всего подходит, если вы не можете установить фоновое изображение на самом элементе (например, потому что вы используете плотно упакованное изображение спрайта, а требуемый значок не имеет достаточно пустого отступа вокруг него) и вам нужно использовать псевдоселектор , например element: after для отображения фонового изображения.
Это также изменяет размер div, поэтому я не рекомендую это делать.
По какой-то причине этот трюк добавил место над .myElement, когда я его попробовал.
Я думаю, что это решение является лучшим, если вы хотите вывести текст за пределы экрана. Я попробовал принятый ответ, но, к моему удивлению, у меня была горизонтальная полоса прокрутки, ведущая туда, где находится скрытый текст.
Спасибо! это сработало очень хорошо.
<style>
body {
visibility:hidden
}
body .moz-signature p{
visibility:visible
}
</style>
Вышеуказанное хорошо работает и в последней версии Thunderbird.
Обратите внимание, что использование этого метода делает текст нечитаемым для большинства программ чтения с экрана - см. stackoverflow.com/questions/1755656/…
Почему бы просто не использовать:
h1 { color: transparent; }
Почему нет? Потому что Google это не нравится.
Проверка (CSS 2.1): «прозрачный» не является допустимым значением для свойства «цвет».
Текст станет видимым, если пользователь выберет его (STRG + A и т. д.) - это выглядит очень непрофессионально! Привет Кристофер
Это самое простое решение, если оно соответствует вашим потребностям (IE8 +, а не выделяемый текст).
@ HasanGürsoy и будущие гуглеры - "CSS3 расширяет значение цвета, чтобы включить ключевое слово 'transparent' ...."
прозрачный недействителен. еще вы можете выбрать / выделить
color: transparent; работает вместе с user-select: none;, если вы не измените цвет.
@ChristopherStock когда-нибудь задумывался о том, чтобы отображать дроби со смешанной нотацией достойным образом, не нарушая математики, когда дело доходит до копирования и вставки? Я бы сказал, вам лучше переосмыслить значение слова "профессиональный"
h1 {
text-indent: -3000px;
line-height: 3000px;
background-image: url(/LOGO.png);
height: 100px; width: 600px; /* height and width are a must */
}
Почему есть высота строки?
Если мы сможем редактировать разметку, жизнь станет проще, просто удалите текст и будьте счастливы. Но иногда разметка была размещена 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.
Если вам интересно прочитать о доступности:
Исходники для bs4 и h5bp: github.com/h5bp/html5-boilerplate/blob/master/src/css/…, github.com/twbs/bootstrap/blob/v4-dev/scss/mixins/…
Это хорошо работает для добавления элемента только в программу чтения с экрана; однако он не работает с исходным вопросом, где изображение должно отображаться с помощью фонового изображения, указанного в css.
@ vossad01 - Если вы не можете добавить еще один элемент, и вы застряли на одном элементе (как в случае, о котором вы упомянули), тогда одним хорошим обходным путем было бы использовать псевдоэлемент ... также я опубликовал этот ответ 6 спустя годы после того, как был задан первоначальный вопрос, и мой ответ был предназначен для более широкой аудитории, поскольку этот вопрос кажется популярным.
Попробуйте этот код, чтобы сократить и скрыть текст
.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;
}
Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно Зачем и / или как, этот код отвечает на вопрос, улучшает его долгосрочное значение.
Так много сложных решений.
Самый простой - просто использовать:
color:rgba(0,0,0,0)
Большой! Это работает для любого цвета фона. Спасибо.
Станьте видимым при выборе.
Не помню, где я это взял, но уже много лет пользуюсь им успешно.
=hide-text()
font: 0/0 a
text-shadow: none
color: transparent
Мой миксин написан в стиле sass, но вы можете использовать его так, как считаете нужным. Для удобства я обычно держу класс .hidden где-нибудь в моем проекте, чтобы прикрепить его к элементам, чтобы избежать дублирования.
Я думаю, что где-то читал, что эта версия предпочтительнее, потому что отрицательный текстовый отступ заставит браузер отобразить длинное поле в 10000 пикселей (или любой другой пример, который вы используете). Изменение шрифта, как в этом примере, не приведет к тому, что браузер создаст большое поле, которое он попытается отобразить.
заменить контент на 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 нужен в вашем случае. В моем случае он отлично работал и без него.
здесь много устаревших ответов: подумайте о том, чтобы проголосовать за более свежий ответ stackoverflow.com/a/27769435/2586761, чтобы раскрыть его