2016-04-25 3 views

ответ

19

Вы можете, но ваш CSS неверен. Следующая версия работает (по крайней мере, в Chrome). Это делает невидимым dt и определяет превышение первой буквы, чтобы сделать ее видимой снова.

Я тоже пробовал то же самое с display, но это не работает, как и ожидалось. visibility: hidden скрывает содержимое, но сохраняет элемент на месте, а display: none удаляет его из потока и делает невозможным повторное видимость субэлементов (первая буква в этом случае).

Я добавил также зависание, чтобы вы могли навести письмо, чтобы увидеть остальную часть dt.

dt { 
 
    visibility: hidden; 
 
} 
 
dt::first-letter { 
 
    visibility: visible; 
 
} 
 

 
/* Hover the first letter to see the rest */ 
 
dt:hover { 
 
    visibility: visible; 
 
}
Hover to see the rest: 
 
<dt>Lorum ipsum is a weird text</dt> 
 
<dt>Foo bar</dt>

Побочным эффектом будет то, что область, которая покрыта текст по-прежнему востребован. Возможно, это не проблема, но если это вам, вам понадобится другое решение. Одна из возможностей - сделать шрифт размером dt0. Таким образом, текст настолько мал, что не требует места. Не поможет, если он также содержит изображения, конечно.

Поскольку это не работает, вот альтернатива, использующая шрифт. Меньше идеала, но, надеюсь, он все равно решит вашу проблему.

dt { 
 
    font-size: 0; 
 
} 
 
dt::first-letter { 
 
    font-size: 1rem; 
 
} 
 

 
/* Hover the first letter to see the rest */ 
 
dt:hover { 
 
    font-size: 1em; 
 
}
Hover to see the rest: 
 
<dt>Lorum ipsum is a weird text</dt> 
 
<dt>Foo bar</dt>

+12

ли, кажется, не работает на Firefox. Даже парящий ничего не раскрывает. – Bakuriu

+0

Действительно. На FF весь текст невидим, даже первая буква. Этого не должно произойти, так как должно быть разрешено сделать элемент невидимым, делая видимыми части его содержимого. Чувствует себя как ошибка. Однако, как альтернатива, вы можете не скрывать текст, но сделать его прозрачным или настроить сторону шрифта на 0. – GolezTrol

+0

@Paulie_D 'dt' должен быть блочным, но даже если я добавлю к нему« display: block », это не помогает. – GolezTrol

-1

Попробуйте это ....

.newline1::first-letter { 
 
    font-size: 200%; 
 
    color: #8A2BE2; 
 
} 
 
.newline2::first-letter { 
 
    /*color: transparent;*/ 
 
font-size: 0px; 
 
}
<div class="newline1"> 
 
Test Stackoverflow.com 
 
</div> 
 
<div class="newline2"> 
 
Test Stackoverflow.com 
 
</div>

.newline1::first-letter { 
 
    font-size: 200%; 
 
    color: #8A2BE2; 
 
} 
 
.newline2::first-letter { 
 
    color: transparent; 
 
}
<div class="newline1"> 
 
Test Stackoverflow.com 
 
</div> 
 
<div class="newline2"> 
 
Test Stackoverflow.com 
 
</div>

+4

Как это ответить на вопрос? Проблема не * скрывает * первую букву, а прячет * остальную * букв ... – Bakuriu

+0

Это ответ на совершенно другой вопрос к тому, который задают. Я должен, вероятно, снизить этот ответ. – wizzwizz4

11

Я думаю, что вы с попробовать это:

.twitter{ 
 
     display: block; 
 
     color: transparent; 
 
    } 
 

 
    .twitter:first-letter{ 
 
     color: #000; 
 
    }
<div id="socialMedia"> 
 
    <a class="twitter">Twitter</a> 
 
</div> 
 
<div id="socialMedia"> 
 
    <a class="twitter">Google</a> 
 
</div>

Смотрите также эту fiddle

+0

Ну, я частично забираю его обратно: хорошо выглядит и работает в JSFiddle, но не в фрагменте стека. Будет опубликован отчет об ошибке позже. – Kroltan

+0

Извините, но в моем firefox это хорошо выглядит – Jainam

+0

, пожалуйста, проверьте ссылку на скрипку – Jainam

5

Вы не можете использовать :not с селектором псевдо элемента (см this).

Что вы можете сделать, это думать по-другому: прозрачно-обойти все это, а затем цвет с ::first-letter. Поскольку последний имеет более высокую специфичность, он переопределит прозрачную настройку, таким образом, достигнет желаемого результата.

2

Альтернатива, основанная на ответе Варуны, с использованием color вместо атрибутов на основе макета. Главное преимущество заключается в том, что он работает на каждом проверенном мной браузере (Firefox, Chrome и M $ Edge, но, вероятно, должен работать на всех браузерах), и он не вызывает каких-либо визуальных сбоев (например, «базовый прыжок пикселя» из второго решения принятого ответа), поскольку он использует полностью визуальный атрибут.

Проблема с вашим оригинальным CSS заключается в том, что вы не можете использовать псевдоэлементы (::blah) внутри :not. Вы должны расширить его в обратной логике, так что вам не нужно :not

dt { 
 
    color: transparent; 
 
} 
 
dt::first-letter { 
 
    color: black; 
 
} 
 

 
/* For testing */ 
 
dt:hover { 
 
    color: black; 
 
}
<dt>Hello World!</dt>

+1

Нам действительно нужен другой ответ для всех возможных способов сделать текст невидимым в css? В лучшем случае это должен быть комментарий к принятому ответу. «Третий вариант - использовать« color: transparent »для скрытия и« color: black »для отображения« – alexanderbird

+0

@alexanderbird. Это работает в каждом браузере без видимой скрещивости, в отличие от принятого решения (ов). – Kroltan

+1

Ах! Не могли бы вы добавить это к своему ответу? Когда я читал это, я спрашивал себя: «Что это делает, что другие не делают?» – alexanderbird

Смежные вопросы