<p><span>*</span>Here lies a note.</p>
с помощью CSS, как можно скрыть (то есть, display:none
) текст: «Здесь лежит записка.» И показать только «*»?дисплей: нет на всех, кроме первого дочернего элемента
<p><span>*</span>Here lies a note.</p>
с помощью CSS, как можно скрыть (то есть, display:none
) текст: «Здесь лежит записка.» И показать только «*»?дисплей: нет на всех, кроме первого дочернего элемента
Поскольку вы не можете выбирать текстовые узлы с помощью CSS, один из них - установить font-size
родительского элемента на 0
, что эффективно скроет весь текст. Затем вы можете сбросить текст для нужного элемента.
.target {
font-size: 0;
}
.target > :first-child {
font-size: 16px;
}
<p class="target">
<span>First node</span>
Second node
More text nodes...
</p>
В качестве альтернативы, вы можете также использовать visibility
property, а также (так как вы можете установить дочерний элемент к visibility: visible
даже тогда, когда родительский элемент установлен в visibility: hidden
:
.target {
visibility: hidden;
}
.target > :first-child {
visibility: visible;
}
<p class="target">
<span>First node</span>
Second node
More text nodes...
</p>
В качестве примечания, если вы хотите альтернативу, можно обернуть текстовые узлы с <span>
элементов с помощью JavaScript, а затем установить display
из всех дочерних элементов, которые не первый ребенок none
используя селектор:
.target > :not(:first-child) {
display: none;
}
Здесь фрагмент демонстрирует это:
var target = document.querySelector('.target');
Array.from(target.childNodes).forEach(function (node, index) {
if (node.nodeType === 3 && node.nodeValue.trim()) {
var span = document.createElement('span');
span.textContent = node.nodeValue;
target.replaceChild(span, node);
}
});
.target > :not(:first-child) {
display: none;
}
<p class="target">
<span>First node</span>
Second node
More text nodes...
</p>
Если вы используете JQuery, это было бы еще короче:
$('.target').contents()
.filter(function() {
return this.nodeType === 3 && this.nodeValue.trim();
}).wrap('<span />');
.target > :not(:first-child) {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="target">
<span>First node</span>
Second node
More text nodes...
</p>
Вы можете использовать visibility
скрыть родителя и показать дочерний элемент.
p {
visibility: hidden;
}
p > :first-child {
visibility: visible;
}
<p><span>*</span>Here lies a note.</p>
Изначально это задумано, что это не сработает. Приятно удивлен. Ухоженная. Насколько хорошо поддерживается 'видимость'? (Похоже, я не единственный, кто ошибочно занижен) – Eamonn
Вы можете увидеть совместимость браузера в конце https://developer.mozilla.org/en-US/docs/Web/CSS/visibility –
Было бы здесь, но видимость не всегда будет работать, так как пространство еще принято. Является ли 'font-size: 0' ОК, чтобы сделать? Мне показалось, что я читал, что некоторые браузеры плохо себя ведут. – JPM
@JPM - Да, это будет занимать место при использовании 'видимость: hidden', поэтому я бы лично пошел с опцией' font-size', так как он будет работать последовательно. Все зависит от того, чего вы пытаетесь достичь, я думаю. –
: «Некоторые браузеры позволяют пользователю устанавливать минимальный размер шрифта, который не может быть запущен таблицей стилей любого веб-сайта, и есть даже браузеры с таким минимальным значением, установленным по умолчанию (так что пользователь делает не нужно активно выбирать) ... так что ваши ярлыки могут появиться в конце концов. » – JPM