Як застосувати колір до елемента тексту SVG


79

Гаразд ... Я з'їжджаю сюди. Я почав експериментувати з SVG. Робота з SVG та застосування до нього класів CSS працює як шарм. Я просто не можу зрозуміти, що я роблю неправильно, але я просто не можу змусити клас працювати над текстовим елементом svg. Я розібрав його до кінця, і ось що я отримав:

<!DOCTYPE html>
<html>
<head>
    <meta charset='UTF-8'>
    <title>Playground</title>
</head>
<body>
    <style type="text/css">
        .mainsvg {
            height: 320px;
            border: 1px solid red;
            width: 400px;
        }
        .caption {
            color: yellow;
        }
    </style>
    <h2>SVG - Sandbox</h2>
    <div>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" class="mainsvg">
            <text x="65" y="40" class="caption">Fact</text>
        </svg>
    </div>
</body>
</html>

Відповідно до http://www.w3.org/TR/SVG/styling.html#ClassAttribute це має працювати ...

Будь-які підказки / поради щодо того, що змінити, або альтернатива?


Якщо я прочитаю посилання w3, ви не зможете встановити межу. це називається інсульт.
— Kees Sonnema

Ну, кордон працює просто чудово. Обведення використовується для всього, що ви насправді «малюєте». Але моє запитання стосується класу на текстовому елементі, де я задав колір тексту так само, як у посиланні w3.
— Бастіан Ліндерс

Відповіді:


97

Правильно встановити клас, але властивість кольору CSS не впливає на SVG. SVG використовує властивості заповнення та обведення . У вашому випадку вам, мабуть, просто потрібно змінити колір на заливку. Це відображає жовтий текст для мене у Firefox.

<!DOCTYPE html>
<html>
<head>
    <meta charset='UTF-8'>
    <title>Playground</title>
</head>
<body>
    <style type="text/css">
        .mainsvg {
            height: 320px;
            border: 1px solid red;
            width: 400px;
        }
        .caption {
            fill: yellow;
        }
    </style>
    <h2>SVG - Sandbox</h2>
    <div>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" class="mainsvg">
            <text x="65" y="40" class="caption">Fact</text>
        </svg>
    </div>
</body>
</html>

1
Спробував і ні ... І пам’ятай. Колір - це те, що вони наводять як приклад у Рекомендації W3. Я видалив його до кольору, щоб отримати найпростішу реалізацію для тестування.
— Бастіан Ліндерс

4
Молодці, ви знайшли помилку в специфікації SVG. Я повідомив про це w3c: lists.w3.org/Archives/Public/www-svg/2013Jul/0001.html
— Роберт Лонгсон

Ну ні. Я згоден, що є помилка. Але цього немає в документації. Вони в основному заявляють, що це повинно бути. Просто здається, що всі браузери не змогли це реалізувати. Що здається мені дуже малоймовірним. І пам’ятайте, це також не працює з заливкою або обведенням. Здається, селектор класу css повністю ігнорується (chrome, FF та IE10).
— Бастіан Ліндерс

Зачекайте .... text.caption справді працює. text .caption (з пробілом) не .... (це перевірено із заповненням усіх 3 браузерів) .caption працює також. Цікаво , що я випробував в перший раз , ви запропонували заливку і він не працює .....
— Bastiaan Linders

9
Встановлення лише colorвластивості не має безпосередньо видимого ефекту у svg, але ви можете використовувати цей колір для fill, strokeабо навіть для обох, наприклад text { fill: currentColor }.
— Ерік Далстрем
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.