Измените текст метки, используя только CSS [duplicate]

вместе с $ project будет более уместным, чтобы другие мудрые элементы соответствия были сгруппированы вместе с другими элементами документа.

db.test.aggregate(
  { "$unwind" : "$shapes" },
  { "$match" : {
     "shapes.color": "red"
  }},
{"$project":{
"_id":1,
"item":1
}}
)
213
задан RyanS 25 November 2015 в 02:17
поделиться

17 ответов

Попробуйте использовать: before и: after. Один вставляет текст после рендеринга html, другие вставки перед отображением html. Если вы хотите заменить текст, оставьте содержимое кнопки пустым.

В этом примере задается текст кнопки в соответствии с размером ширины экрана.

<meta name="viewport" content="width=device-width, initial-scale=1">

<style>
        button:before {
            content: 'small screen';
        }

        @media screen and (min-width: 480px) {
            button:before {
                content: 'big screen';
            }
        }
</style>
<body>
    <button type="button">xxx</button>
    <button type="button"></button>
</body>

Текст кнопки:

1) с: перед

большой экранxxx

большой экран

2) с: после

xxxbig screen

g7]

большой экран

12
ответ дан 40-Love 20 August 2018 в 23:01
поделиться

У меня возникла проблема, когда мне пришлось заменить текст ссылки, но не мог использовать javascript, и я не мог напрямую изменить текст гиперссылки, поскольку она была скомпилирована из XML. Кроме того, я не мог использовать псевдоэлементы, или они, похоже, не работали, когда я их пробовал.

В принципе, я помещал текст, который я хотел в промежуток, и помещал привязывающий тег под ним завернутый в div. Я в основном переместил якорный тег через css, а затем сделал шрифт прозрачным. Теперь, когда вы нависаете над промежутком, он «действует» как ссылка. Это очень хакерский способ сделать это, но так вы можете иметь ссылку с другим текстом ...

Это сценарий того, как я обошел эту проблему

Мой HTML

<div class="field">
    <span>This is your link text</span><br/>
    <a href="//www.google.com" target="_blank">This is your actual link</a>
</div>

Мой CSS

 div.field a {
     color:transparent;
     position:absolute;
     top:1%;
 }
 div.field span {
     display:inline-block;
 }

CSS необходимо будет изменить в соответствии с вашими требованиями, но это общий способ делать то, что вы спрашивают.

Изменить: может ли кто-нибудь сказать мне, почему это было приостановлено? Мое решение работает ...

1
ответ дан AlmightyWhy 20 August 2018 в 23:01
поделиться
  • 1
    @AlmightПочему я подозреваю, что это было приостановлено, потому что это решение требует изменения разметки, и я подозреваю, что OP может изменить разметку, он или она просто изменит текст напрямую. Другими словами, OP требовало только CSS-решения – dannie.f 21 February 2018 в 19:24

На основании ответа mikemaccana это сработало для меня

button {
  position: absolute;
  visibility: hidden;
}

button:before {
  content: "goodbye";
  visibility: visible;
}

& sect; Абсолютное позиционирование

элемент, который позиционируется абсолютно, вынимается из потока и, следовательно, не занимает места при размещении других элементов.

45
ответ дан Community 20 August 2018 в 23:01
поделиться
  • 1
    Для меня этот ответ был лучше других, потому что он работает с заменой текста в той же строке, то есть он не форсирует разрыв строки в тексте (для моей конкретной комбинации HTML и CSS). – pgr 23 May 2015 в 21:40

В отличие от того, что я вижу в каждом другом ответе, вам не нужно , чтобы использовать псевдоэлементы, чтобы заменить содержимое баллиза изображением

. Факты
div.pvw-title { /* no :after or :before required*/
content: url("your url here");
}
1
ответ дан Estecka 20 August 2018 в 23:01
поделиться
  • 1
    Начиная с CSS2, content применяется только к :before и :after. CSS3 расширяет его ко всему, но модуль «Сгенерированный контент» все еще находится в черновом статусе, поэтому любое использование high , вероятно, зависит от браузера. – mrec 7 August 2017 в 11:22

Вы не можете, ну, можете.

.pvw-title:after {
  content: "Test";
}

Это вставляет содержимое после текущего содержимого элемента. Это фактически не заменяет его, но вы можете выбрать пустой div и использовать CSS для добавления всего содержимого.

Но пока вы более или менее можете, вы не должны. Фактический контент должен быть помещен в документ. Свойство содержимого в основном предназначено для небольшой разметки, например, кавычек вокруг текста, который должен отображаться.

12
ответ дан GolezTrol 20 August 2018 в 23:01
поделиться
  • 1
    Я очень уверен в том, что я использовал код для замены текста каким-то способом. '& Lt; div class = & quot; pvw-title & quot; & quot; Факты & lt; / div & gt; & lt; div class = "pvw-title" & quot; Факты & lt; / div & gt; Я не могу использовать: после, потому что я получил более одного класса div с тем же именем :( – MokiTa 25 October 2011 в 23:11
  • 2
    Насколько широко совместима версия для браузеров? И я подозреваю, что javascript будет лучшим выбором для долгосрочной гибкости. – Sir 3 August 2013 в 00:29
  • 3
    Современные браузеры поддерживают его. Я не уверен в более старых версиях IE, но, я думаю, это можно найти на quirksmode.com. -edit- Он может: quirksmode.org/css/user-interface/content.html – GolezTrol 3 August 2013 в 17:34
  • 4
    Каждый современный браузер поддерживает его сегодня: caniuse.com/#feat=css-gencontent – GolezTrol 23 November 2014 в 00:17

Простой, короткий, эффективный. Никакого дополнительного html не нужно.

.pvw-title { color: transparent; }

.pvw-title:after { 
        content: "New Text To Replace Old";
        color: black; /* set color to original text color */
        margin-left: -30px;
        /* margin-left equals length of text we're replacing */
    }

Мне пришлось сделать это для замены текста ссылки, кроме дома, для палочек woocommerce

SASS / LESS

body.woocommerce .woocommerce-breadcrumb > a[href$="/shop/"] {
    color: transparent;
    &:after { 
        content: "Store";
        color: grey;
        margin-left: -30px;
    }
}

CSS

body.woocommerce .woocommerce-breadcrumb > a[href$="/shop/"] {
    color: transparent;
}

body.woocommerce .woocommerce-breadcrumb > a[href$="/shop/"]&:after { 
    content: "Store";
    color: @child-color-grey;
    margin-left: -30px;
}
24
ответ дан hawkeye126 20 August 2018 в 23:01
поделиться

Если вы хотите использовать псевдоэлементы и позволить им вставлять содержимое, вы можете сделать следующее. Он не предполагает знания исходного элемента и не требует дополнительной разметки.

.element {
  text-indent: -9999px;
  line-height: 0; /* Collapse the original line */
}

.element::after {
  content: "New text";
  text-indent: 0;
  display: block;
  line-height: initial; /* New content takes up original line height */
}

Пример JSFiddle

117
ответ дан James van Dyke 20 August 2018 в 23:01
поделиться
  • 1
    Этот ответ работает в тех местах, где некоторые другие ответы не такие, как текстовые узлы внутри элемента <th>. – Chris Kerekes 8 April 2014 в 14:23
  • 2
    Это хорошо работает. В моем случае, line-height: 0 и color: transparent на главном элементе и сброс этих значений на псевдо-задании (без использования text-indent), – dontGoPlastic 9 June 2014 в 22:38
  • 3
    Разве это не должно быть line-height: normal вместо initial? – Benjamin 27 November 2014 в 16:10
  • 4
    причина использования текстового отступа заключается в том, что если исходный текст длиннее, элемент остается размером старого текста, а не уменьшается до размера нового текста (предполагая, что это то, что вы хотите) – Chris Janssen 9 July 2015 в 20:34
  • 5
    Гениальная техника, которая работает с текстовым контентом. – Robert Koritnik 17 September 2015 в 11:27

Мне посчастливилось установить font-size: 0 внешнего элемента, а font-size селектора :after - все, что мне нужно.

6
ответ дан jerome 20 August 2018 в 23:01
поделиться

Или, может быть, вы можете обернуть «Факты» вокруг <span> следующим образом:

<div class="pvw-title"><span>Facts</span></div>

Затем используйте:

.pvw-title span {
  display: none;
}
.pvw-title:after {
  content: 'whatever it is you want to add';
}
202
ответ дан Matthew Cachia 20 August 2018 в 23:01
поделиться
  • 1
    Приятно, но это изменение HTML, а не просто CSS. – mikemaccana 10 January 2013 в 17:58
  • 2
    Иногда это ваш единственный вариант – locrizak 6 February 2014 в 22:49
  • 3
    span {display: none; } также должен скрывать псевдоэлемент. Вы должны использовать видимость: скрытый вместо этого – xryl669 18 August 2014 в 07:16
  • 4
    display: none; и видимость: скрытые; оба скрывают псевдоэлемент – Facundo Colombier 23 February 2015 в 15:20
  • 5
    @Mathew скрывает диапазон, но добавляет псевдоэлемент в div, поэтому псевдоэлемент не должен быть скрыт (либо с помощью видимости, либо с помощью свойства отображения) – dewtea 5 June 2015 в 17:19

Обязательно: это взломать: CSS не подходит для этого, но в некоторых ситуациях - например, у вас есть сторонняя библиотека в iframe, которую можно настроить только с помощью CSS - такой взлом единственный вариант.

Вы можете заменить текст через CSS. Давайте заменим зеленую кнопку «hello» красной кнопкой, которая говорит «до свидания», используя CSS. Смотрите http://jsfiddle.net/ZBj2m/274/ для живой демонстрации:

Вот наша зеленая кнопка:

<button>Hello</button>

button {
  background-color: green;
  color: black;
  padding: 5px;
}

Теперь давайте спрячемся исходный элемент, но потом добавьте еще один элемент блока:

button {
  visibility: hidden;
}
button:after {
  content:'goodbye'; 
  visibility: visible;
  display: block;
  position: absolute;
  background-color: red;
  padding: 5px;
  top: 2px;
}

Примечание:

  • Мы явно должны отметить это как элемент блока, после того, как элементы «span» по умолчанию
  • Нам нужно компенсировать исходный элемент, отрегулировав положение псевдоэлемента.
  • Мы должны скрыть исходный элемент и отобразить псевдоэлемент с помощью visibility. Примечание display: none на исходном элементе не работает.
168
ответ дан mikemaccana 20 August 2018 в 23:01
поделиться
  • 1
    Это не работает, т. Е. 10, любая идея, как изменить его для этого? – Solmead 21 July 2013 в 04:02
  • 2
    display: none; не работает, потому что ::after действительно означает «внутри этого элемента, но в конце», если кому-то было любопытно. – Ry-♦ 30 June 2014 в 23:17
  • 3
    К сожалению, "модифицированный" кнопка больше не работает как кнопка. Это хороший пример, просто он не относится к кнопке. – xryl669 18 August 2014 в 07:18
  • 4
    display: none; и видимость: скрытые; оба скрывают псевдоэлемент – Facundo Colombier 23 February 2015 в 15:20
  • 5
    Почему, когда я это делаю, он заменяет элемент, но текст все шапки и не может быть изменен на нижний регистр? – Jpaji Rajnish 3 May 2015 в 17:47

Это невозможно сделать без трюков. Вот как это работает, заменив текст изображением текста.

.pvw-title{
    text-indent:-9999px;
    background-image:url(text_image.png)
}

Этот тип вещей обычно выполняется с помощью Javascript. Вот как это можно сделать с помощью jQuery:

$('.pvw-title').text('new text');
1
ответ дан Nathan Manousos 20 August 2018 в 23:01
поделиться
  • 1
    Я не могу использовать Javascript: / – MokiTa 25 October 2011 в 23:16
  • 2
    Это единственный способ, с помощью которого я мог бы работать: .pvw-title span [style * = & quot; color: # 000, font-size: 14px; & quot;] {видимость: скрытая; } .pvw-title span [style * = & quot; color: # 000; font-size: 14px; & quot;]: после {видимость: видимая; цвет: # 000; Размер шрифта: 14px; содержание: «Тест»; } но, поскольку они оба используют один и тот же стиль, я не могу этого сделать.: / – MokiTa 25 October 2011 в 23:20
  • 3
    почему вы выбираете его на основе цвета / шрифта? – Nathan Manousos 25 October 2011 в 23:22
  • 4
    Я бы выбрал его на основе всего стиля, поэтому я могу отредактировать этот конкретный заголовок, а не оба, так как оба имеют один и тот же «div & quot; имя. – MokiTa 25 October 2011 в 23:25

Это работало для меня со встроенным текстом. Протестировано в FF, Safari, Chrome и Opera

<p>Lorem ipsum dolor sit amet, consectetur <span>Some Text</span> adipiscing elit.</p>


span {
visibility: hidden;
word-spacing:-999px;
letter-spacing: -999px; 
}

span:after {
content: "goodbye";
visibility: visible;
word-spacing:normal;
letter-spacing:normal; 
}
9
ответ дан Noel Williams 20 August 2018 в 23:01
поделиться

Я использую этот трюк:

.pvw-title {
    text-indent: -999px;
}
.pvw-title:after {
    text-indent: 0px;
    float: left;
    content: 'My New Content';
}

Я даже использовал это для обработки интернационализации страниц, просто изменив базовый класс ...

.translate-es .welcome {
    text-indent: -999px;
}
.translate-es .welcome:after {
    text-indent: 0px;
    float: left;
    content: '¡Bienvenidos!';
}
8
ответ дан Pete OK 20 August 2018 в 23:01
поделиться
  • 1
    Это проблематично для пользователей с программами чтения с экрана. Если вы не меняете недостаток / видимость элемента и не указываете никаких намеков на арию, ваш «невидимый» текст может по-прежнему читаться устройством чтения с экрана. – Conspicuous Compiler 8 March 2016 в 18:20

Это может не совсем ответить на вопрос, но он удовлетворил мои потребности и, возможно, и другие.

Итак, если вы просто хотите показать разные тексты или изображения, сохраните тег пустым и напишите свой контент в нескольких атрибутах данных, таких как <span data-text1="Hello" data-text2="Bye"></span>. Отобразите их с одним из псевдо классов :before {content: attr(data-text1)}

Теперь у вас есть несколько способов переключения между ними. Я использовал их в сочетании со мультимедийными запросами для гибкого подхода к дизайну, чтобы изменить имена моей навигации на значки.

демонстрация jsfiddle и примеры

7
ответ дан Robbendebiene 20 August 2018 в 23:01
поделиться

Замена текста с помощью псевдоэлементов & amp; CSS Visibility

HTML

<p class="replaced">Original Text</p>

CSS

.replaced {
    visibility: hidden;
    position: relative;
}

.replaced:after {
    visibility: visible;
    position: absolute;
    top: 0;
    left: 0;
    content: "This text replaces the original.";
}
0
ответ дан Stephen Rauch 20 August 2018 в 23:01
поделиться

Этот флажок установлен как кнопка, которая показывает либо «Да», либо «Нет» в зависимости от состояния «проверено». Таким образом, он демонстрирует один способ замены текста с помощью CSS без необходимости писать какой-либо код.

Он по-прежнему будет вести себя как флажок, возвращающий (или не возвращающий) значение POST, но из точки отображения

Цвета могут быть не по своему вкусу, они только там, чтобы проиллюстрировать точку.

HTML:

<input type="checkbox" class="yesno" id="testcb" /><label for="testcb"><span></span></label>

... и CSS:

/* --------------------------------- */
/* Make the checkbox non-displayable */
/* --------------------------------- */
input[type="checkbox"].yesno {
    display:none;
}
/* --------------------------------- */
/* Set the associated label <span>   */
/* the way you want it to look.      */
/* --------------------------------- */
input[type="checkbox"].yesno+label span {
    display:inline-block;
    width:80px;
    height:30px;
    text-align:center;
    vertical-align:middle;
    color:#800000;
    background-color:white;
    border-style:solid;
    border-width:1px;
    border-color:black;
    cursor:pointer;
}
/* --------------------------------- */
/* By default the content after the  */
/* the label <span> is "No"          */
/* --------------------------------- */
input[type="checkbox"].yesno+label span:after {
    content:"No";
}
/* --------------------------------- */
/* When the box is checked the       */
/* content after the label <span>    */
/* is "Yes" (which replaces any      */
/* existing content).                */
/* When the box becomes unchecked the*/
/* content reverts to the way it was.*/
/* --------------------------------- */
input[type="checkbox"].yesno:checked+label span:after {
    content:"Yes";
}
/* --------------------------------- */
/* When the box is checked the       */
/* label <span> looks like this      */
/* (which replaces any existing)     */
/* When the box becomes unchecked the*/
/* layout reverts to the way it was. */
/* --------------------------------- */
input[type="checkbox"].yesno:checked+label span {
    color:green;
    background-color:#C8C8C8;
}

Я только пробовал это в Firefox, но это стандартный CSS, поэтому он должен работать в другом месте.

2
ответ дан Steve Douglas 20 August 2018 в 23:01
поделиться

Используя псевдоэлемент, этот метод не требует знания исходного элемента и не требует дополнительной разметки.

#someElement{
    color: transparent; /*you may need to change this color*/
    position: relative;
}
#someElement:after { /*or use :before if that tickles your fancy*/
    content:"New text";
    color:initial;
    position:absolute;
    top:0;
    left:0;
}
2
ответ дан Vin 20 August 2018 в 23:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: