Сховати текст за допомогою 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.