Як приховати текст прив’язки, не приховуючи прив’язку?


75

Скажімо, у мене є така розмітка:

<li><a href="somehwere">Link text</a></li>

Якщо на тезі у мене є фонове зображення, як я можу приховати текст посилання, використовуючи лише css? font-size: 0, здається, чудово працює на тезі, крім того, як показано в маленьких крапельках ie7.

  • Дякую за допомогу дотепер я використовував line-height: 0;і font-size: 0;та text-indent: -999px. Але це все одно відображає деякі краплі в сафарі, будь-які ідеї?

Відповіді:


193

Спробуйте

 a{
    line-height: 0; 
    font-size: 0;
    color: transparent; 
 }


Висвітлено color: transparent;проблему з браузерами Webkit, які все ще відображають 1 пікс. Тексту.


1
Я виявив, що це не працює в Chrome 15.0.874.120. Також потрібно додати колір: прозорий;
brokenindexfinger

@brokenindexfinger дивно ... але додавання кольору: прозорий працює тоді? Якщо так, сміливо редагуйте свою відповідь та додайте її, або я можу.
Локтар

1
Привіт Локтаре, це інформація, яку я намагався застосувати у своєму блозі і нарешті її отримав. Дякуємо за допомогу.
umarali1981

1
Дякую за цю інформацію. Ця інформація допомогла налаштувати доступність у проекті, над яким я працюю
Лорен Шоу

1
Чортовське гарне рішення. Відступ тексту може бути вигадливим, особливо коли йдеться про декілька елементів, загорнутих один в одного, і множинне позиціонування, встановлене для цих елементів. Приємна відповідь.
agon024

19

Оберніть текст у певний проміжок і встановіть « visibility:hidden;Видимість прихована» приховає елемент, але він все одно займе той самий простір на сторінці (навпаки, відображення: ніхто також не видаляє його зі сторінки).


Дякуємо scrappedcola, це чудове рішення!
klewis

це правильне рішення, але я використав display: none, щоб також видалити всі розміри.
christopher_h

16
a { text-indent:-9999px; }

Як правило, добре працює від мого досвіду.


Ах, приємно навіть не думав про це, я весь час використовую це для заголовків із зображеннями.
Локтар

8
Ви можете отримати показник ефективності від Google, оскільки ви наказали браузеру намалювати поле шириною 9999 пікселів для кожного елемента, який він також застосовує. Особисто кажучи, вам краще застосувати display: none, visibility: hidden, font-size: 0 або щось подібне, щоб уникнути "можливості" Google не поважати вашу надто розширену схему макета. Я теж кодую таким чином, але зупинився. Джерело - stackoverflow.com/questions/8971152 / ...
klewis

1
це також порушує outlineFirefox. Прямокутник контуру почнеться зліва від області перегляду браузера.
Маріуш Павельський

6

Міні-підказка:

У мене був такий сценарій:

<a href="/page/">My link text
:after
</a>

Я приховав текст із розміром шрифту: 0, щоб я міг використовувати для нього піктограму FontAwesome. Це працювало на Chrome 36, Firefox 31 та IE9 +.

Я б не рекомендував колір: прозорий, оскільки текст ще існує і його можна вибрати. Використання line-height: 0px не дозволило мені використовувати: after. Може тому, що моїм елементом був вбудований блок.

Видимість: прихована : Не дозволила мені використовувати: після.

відступ тексту: -9999px; : Також переміщено елемент: after


1
так, у мене теж була проблема з псевдоелементами, і це подбало про це .. дякую!
ari gold


3

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

<li><a href="somehwere"><span class="sr-only">Link text</span></a></li>

Якщо ви не використовуєте bootstrap, все одно дотримуйтесь наведеного вище, але також додайте нижченаведений css, щоб визначити клас "sr-only":

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

1

Я наслідував найкращу відповідь Локтара, і це спрацювало дуже добре. Єдина проблема була у мене з Chrome (моя поточна версія - 27.0.1453.94 м). Проблема у мене полягала в тому, що, здається, Chrome усвідомлює, що текст у посиланні не видно, і посилання ставиться трохи нижче, ніж передбачається (щось на зразок margin-top, але змінити його неможливо ). Це відбувається з усіма способами, якими ми робимо текст невидимим: - line-height: 0; - розмір шрифту: 0; - відступ тексту: -9999px;

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

vertical-align: 25px;

Сподіваюся, це корисно


1

Просто потрібно додати font-size: 0;до вашого елементу, що містить текст. Це добре працює.


1

Ви можете помістити зображення в :: before псевдоелемент і встановити ті самі розміри, що і зображення + додати переповнення: приховане, як:

li a::before{
  content:url('img');
  width:20px;
  height:10px
}

a {
  overflow:hidden;
  width:20px;
  height:10px
}


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