Сховати текст за допомогою css


306

Я маю тег у своєму html так:

<h1>My Website Title Here</h1>

Використовуючи css, я хочу замінити текст власним логотипом. У мене логотип немає жодних проблем, якщо змінити розмір тегу та розмістити фонове зображення через css. Однак я не можу зрозуміти, як позбутися тексту. Я бачив це раніше, по суті, виштовхуючи текст з екрану. Проблема в тому, що я не можу згадати, де я це бачив.


3
тут є багато застарілих відповідей: розгляньте можливість скасування останньої відповіді stackoverflow.com/a/27769435/2586761, щоб викрити її
ptim

Відповіді:


426

Це один із способів:

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;
}

5
довгі заголовки матимуть проблему з цим методом, оскільки лише текст перед загортанням слів буде відступів, а специфікація W3C не визначає ситуацію щодо негативного відступу, тому це може мати непередбачувані результати
Кріс Фармілое,

3
Якщо ви використовуєте цей метод, вам слід додати "переповнення: приховано", щоб запобігти стрільбі поле вибору сеїр ліворуч (особливо за посиланнями)
willoller

4
Якщо у вас є будь-які посилання в елементах з негативним текстовим відступом, переконайтеся, що ви також вказали "контур: жоден", інакше ви отримаєте пунктирну межу, що йде зліва від екрана.
nickf

9
Я вважаю за краще використовувати "текст-відступ: -9999px;" просто для того, щоб переконатися, що текст дійсно далеко за межі екрана. Трохи оборонної параної.
Енді Форд

4
Крім того, додайте "пробіл: пробіл" просто для того, щоб бути на безпечній стороні, якщо ваш текст довгий, поки лише перший рядок є відступом.
Ендрю Мур

177

Чому б просто не використовувати:

h1 { color: transparent; }

16
Чому ні? Тому що Google це не любить.
alekwisnia

32
Валідація (CSS 2.1): "прозорий" не є дійсним значенням для властивості "color".
HasanG

15
Текст стане видимим, якщо користувач вибере його (STRG + A тощо) - Це виглядає дуже непрофесійно! Привітання Крістофер
Крістофер Сток

24
@ HasanGürsoy та майбутні googlers- "CSS3 розширює значення кольору, включаючи" прозоре "ключове слово ...."
ABMagil

11
color: transparent;працює разом з user-select: none;, якщо ви не перекриєте колір.
stan-z

162

Просто додайте font-size: 0;до свого елемента, який містить текст.

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


1
Це саме те, що мені було потрібно. Я хотів приховати те, що було у діві, але показати, що було в дитячих прольотах (приховати розділові знаки між ними).
mskfisher

2
Це здається найбільш логічним (читайте: Найменше Bizarre) методом - однак мені цікаво, наскільки добре він підтримується в різних браузерах? (Я можу підтвердити, що це працює у Firefox.)
Брайан Лейсі

1
Він все ще показує дуже маленький текст у більш браузерах, ніж просто IE7, це не повне крос-браузерне рішення.
macguru2000

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

1
Це також змінює розмір div, тому я не рекомендую цього.
Стефан Біцзіттер

30

Найбільш зручним для браузера способом є написання HTML як

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

потім використовуйте CSS, щоб приховати проміжок і замінити зображення

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

Якщо ви можете використовувати CSS2, то є кілька кращих способів використання contentвластивості, але, на жаль, Інтернет ще не на 100%.


Але не забудьте також встановити атрибут ширини та висоти для зображення - і переконайтеся, що "padding" та "margin" встановлені, оскільки у веб-переглядачів є різні ідеї щодо того, скільки потрібно мати тег H1.

Недолік тут - якщо зображення вимкнено, або якщо з'явиться бот, знаючий css, заголовок не буде видно.
willoller

13
Боти пошукових систем та зчитувачі екранів, ймовірно, не пропустять важливий текст у дисплеї. Використовуйте натомість текстовий відступ.
dylanfm

1
Це не робити нічого, ОП може також видалити текст із заголовка. Зчитувачі екрану нічого не роблять із екраном ..
Idris Dopico Peña

23

Приховування тексту з врахуванням доступності:

Окрім інших відповідей, тут є ще один корисний підхід для приховування тексту.

Цей метод ефективно приховує текст, але дозволяє залишати його видимим для читачів екрану. Це варіант, який слід врахувати, чи є проблемою доступність.

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

Варто зазначити, що цей клас зараз використовується у Bootstrap 3 .


Якщо вам цікаво читати про доступність:



Це добре працює для додавання елемента лише для читання екрана; однак це не працює з оригінальним запитанням, де зображення має відображатися фоновим зображенням, зазначеним у css.
vossad01

@ vossad01 - Якщо ви не можете додати ще один елемент, і ви застрягли в одному елементі (як у випадку, про який ви згадали), тоді одним хорошим вирішенням буде використання псевдоелемента ... також я опублікував це відповідь через 6 років після того, як було задано початкове запитання, і моя відповідь мала на меті націлити широку аудиторію, оскільки це питання є популярним.
Джош Крозьє


14

Дивіться mezzoblue, щоб отримати хороший підсумок кожної методики з сильними та слабкими сторонами, а також приклади html та css.


10

Стільки складних рішень.

Найпростіший - просто використовувати:

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

Чудово! Це працює для будь-якого кольору фону. Дякую.
Sandeep Amarnath

8

ви можете просто приховати текст, додавши цей атрибут:

font size: 0 !important;

Також варто перевірити, чи дійсно !importantстаття потрібна у вашому випадку. У моєму випадку він працював чудово і без нього.
Ерік Свен Пуудист

6

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


5
<style>
body {
     visibility:hidden
}
body .moz-signature p{
    visibility:visible
}
</style>

Сказане також добре працює в останніх Thunderbird.


Зауважте, що використання цього методу робить текст нечитабельним для більшості читачів екрану - див. Stackoverflow.com/questions/1755656/…
Йордан Лев

5

ви можете використовувати background-imageвластивість css та z-indexзабезпечити, щоб зображення залишалося перед текстом.


Приклад? Я не бачу, як z-indexзастосовується до background-image.
Martynas Jusevičius

5

Чому ви не використовуєте:

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

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

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

Якщо у вас немає елемента span або div, він прекрасно працює для посилань.


4

Відповідь - створити проміжок із властивістю

{display:none;}

Ви можете знайти приклад на цьому сайті


1
Деякі з низових мотивів, мабуть, стосуються проблем із доступністю - справедливий момент. Але в моєму випадку я перетягую меню сервісу меню ресторану на веб-сайт через їх веб-сервіс. Власник ресторану не бажає відображати ціни (але та сама послуга використовується для друку фактичних меню.) Це ситуація, коли людина взагалі не хоче ціни на сайті. Добре знати всі можливі підходи.
Марво

4

Це насправді область, яка дозріла для обговорення, з багатьма тонкими методами. Важливо, щоб ви вибрали / розробили техніку, яка відповідає вашим потребам, включаючи: екрани зчитування, комбінації зображень / css / сценаріїв увімкнення / вимкнення, seo тощо.

Ось кілька хороших ресурсів, щоб розпочати шлях стандартних методів заміни зображень:

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

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

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


3

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


3

Якщо суть просто в тому, щоб зробити текст всередині елемента невидимим, встановіть атрибут кольору таким, що має 0 непрозорості, використовуючи значення rgba, таке color:rgba(0,0,0,0);чисте та просте.


3

Я не пам'ятаю, де я це взяв, але успішно використовую його протягом століть.

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

Мій міксин знаходиться в сасі, але ви можете використовувати його будь-яким способом, який вважаєте за потрібне. На добру міру я зазвичай тримаю .hiddenклас десь у своєму проекті, щоб приєднати до елементів, щоб уникнути дублювання.


Думаю, я десь читав, що ця версія надається перевагу, оскільки негативний текстовий відступ призведе до того, що браузер відобразить довге поле 10000 пікселів (або будь-який приклад, який ви використовуєте). Зміна шрифту, як у цьому прикладі, не призведе до того, що браузер створить велике поле, яке він намагається надати.
Гамбо

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

}

3
Чому існує висота лінії?
SandRock

2

Спробуйте цей код, щоб скоротити та приховати текст

.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; }



1

Я зазвичай використовую:

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

1

Якщо ми можемо відредагувати розмітку, життя може бути простішим, просто видаліть текст і будьте щасливі. Але іноді розмітку розміщували за допомогою 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. Я хочу запобігти збільшенню коробки.


1

Використання нульового значення для 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>

1

Щоб приховати текст з html, використовуйте властивість text-indent у css

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

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


1

Одним із способів досягнення цього є використання :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;
    }

0

Це працювало для мене з прольотом (нокаутом перевірки).

<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

Рішення, яке працює для мене:

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;
}

-1

Найкраща відповідь працює на короткий текст, але якщо текст обгортається, він просто відображається на зображенні.

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

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

Див. ЗРАЗОВИЙ КОД


-1
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;
 }

3
Хоча цей код може відповісти на питання, надаючи додатковий контекст щодо того, чому та / або як цей код відповідає на питання, покращує його довгострокове значення.
Бенджамін В.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.