Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
SVG-документы поддерживают CSS-стили через элемент <style>, позволяя разработчикам применять переиспользуемые визуальные правила к SVG-графике. С помощью Aspose.SVG Builder API можно программно настраивать SVG-стили в C# без ручного написания CSS-строк.
В этой статье объясняется, как создавать правила стиля SVG в C#, применять CSS-селекторы к SVG-элементам, настраивать пользовательские шрифты и программно управлять переиспользуемыми SVG-стилями с помощью Aspose.SVG for .NET.
RuleBuilder является частью Aspose.SVG Builder API и используется для программной настройки CSS-деклараций в правилах стиля SVG. Вместе с SVGStyleElementBuilder он позволяет разработчикам:
<style>;Централизованные CSS-правила упрощают сопровождение SVG и уменьшают дублирование кода стилизации.
Aspose.SVG Builder API предоставляет класс
SVGStyleElementBuilder, который является конструктором элемента для создания SVG-элемента <style>. Этот класс упрощает создание и настройку SVG-элемента <style> с CSS-правилами.
В этом примере показано, как создать SVG-элемент <style>, добавить в него CSS-правило @font-face и использовать метод
AddRule() для определения стилей шрифта для текстовых элементов в SVG-документе:
1using Aspose.Svg.Builder;
2using System.Drawing;
3using System.IO; 1// Configure an SVG document's style with external font-face rules in C# using Rule Builder
2
3// Initialize an SVG document
4using (SVGDocument document = new SVGDocument())
5{
6 // Create an <svg> element and use Builder API to add other rules and elements to it
7 SVGSVGElement svg = new SVGSVGElementBuilder()
8
9 .AddDefs(def => def
10 .AddStyle(st => st
11 .Type("text/css")
12 .AddRule("@font-face", r => r
13 .FontFamily("VeinlineRegular")
14 .Attribute("src", "url(https://assets.ithillel.ua/wiki/VeinlineRegular.ttf)")
15 )
16 .AddRule("text", t => t
17 .FontFamily("VeinlineRegular")
18 .FontSize(30, LengthType.Pt)
19 )
20 )
21 )
22 .AddText(t => t
23 .X(20).Y(60).Fill(Color.DarkRed).FontWeight(FontWeight.Bold)
24 .AddContent("Configure SVG Style")
25 )
26 .AddText(t => t
27 .X(20).Y(150)
28 .AddContent("Set your SVG style with Rule Builder!")
29 )
30 .Build(document.FirstChild as SVGSVGElement);
31
32 // Save the SVG document
33 document.Save(Path.Combine(OutputDir, "font-face.svg"));
34}
CSS-правило @font-face позволяет указать шрифты для отображения текста, которые могут быть загружены с удаленного сервера или с компьютера пользователя. Правило определяет имя пользовательского семейства шрифтов и указывает исходный URL файла шрифта.
font-family в сгенерированном правиле стиля. Он указывает имя шрифта, которое будет использоваться для подходящих текстовых элементов.RuleBuilder задает CSS-дескриптор src внутри правила @font-face с исходным URL файла шрифта.В приведенном выше примере правило @font-face определяет пользовательское семейство шрифтов с именем "VeinlineRegular". Это правило гарантирует, что шрифт загружен и доступен для использования в SVG-документе.
Метод
AddRule() принадлежит SVGStyleElementBuilder и позволяет создавать CSS-правила в SVG-документах. Он принимает два параметра: имя CSS-селектора и лямбда-выражение, определяющее свойства стиля с помощью RuleBuilder.
В приведенном выше C# примере добавляются два правила:
SVG Builder API использует синтаксический сахар для дальнейшего упрощения процесса создания и манипулирования SVG. Это включает в себя вложенные builders для различных элементов SVG, обеспечивая более интуитивный и эффективный способ определения сложных структур. Шаблон «builder внутри builder» предполагает использование нескольких классов-конструкторов, где один конструктор вложен в другой для облегчения создания сложных объектов или структур.
Следующий фрагмент показывает, как использовать RuleBuilder, пример builder внутри builder, для программного создания и стилизации SVG-графики:
SVGStyleElementBuilder определяет CSS-правила по селектору, например “circle” или “text”. Внутри каждого лямбда-выражения
RuleBuilder настраивает декларации, такие как цвет заливки, цвет обводки и семейство шрифтов для совпадающих SVG-элементов.1using Aspose.Svg.Builder;
2using System.Drawing;
3using System.IO; 1// Create SVG with styled circle and text elements using C# Rule Builder API and fluent syntax
2
3// Initialize an SVG document
4using (SVGDocument document = new SVGDocument())
5{
6 // Create an <svg> element and use Builder API to add other rules and elements to it
7 SVGSVGElement svg = new SVGSVGElementBuilder()
8
9 .AddStyle(st => st
10 .AddRule("circle", r => r
11 .Fill(paint: Paint.None)
12 .Stroke(color: Color.DarkRed)
13 .StrokeWidth(60)
14 )
15 .AddRule("text", t => t
16 .Fill(color: Color.Red)
17 .Stroke(color: Color.Teal)
18 .StrokeWidth(1)
19 .FontFamily("Arial")
20 .FontSize(30, LengthType.Pt)
21 )
22 )
23 .AddG(g => g
24 .AddCircle(circle => circle.Cx(100).Cy(130).R(60).StrokeDashArray(2, 14))
25 .AddText("Rule Builder", x: 230, y: 140)
26 )
27 .Build(document.FirstChild as SVGSVGElement);
28
29 // Save the SVG document
30 document.Save(Path.Combine(OutputDir, "rule-builder.svg"));
31}Метод AddRule() создает переиспользуемые CSS-правила внутри SVG-элемента <style>. В этом примере:
"circle" стилизует все SVG-элементы circle;"text" настраивает типографику SVG-текста;Такой подход отделяет логику стилизации от SVG-структуры и улучшает читаемость SVG.
| Проблема | Возможная причина | Рекомендуемое исправление |
|---|---|---|
| SVG-стили не применяются | Неверный CSS-селектор | Убедитесь, что AddRule() нацелен на правильный SVG-элемент |
| Пользовательский шрифт не отображается | Неверный URL шрифта | Проверьте путь и доступность файла шрифта |
| Отображение текста отличается на разных системах | Требуемый шрифт недоступен | Используйте встроенные или загружаемые из web шрифты |
| SVG-элементы игнорируют правила стиля | Inline-атрибуты переопределяют CSS | Удалите конфликтующие inline-стили |
| Отсутствуют стили обводки или заливки | Неверная настройка свойства стиля | Проверьте правила Fill() и Stroke() |
1. RuleBuilder лучше inline-стилей SVG?
Для сложной SVG-графики переиспользуемые CSS-правила обычно проще сопровождать, чем повторяющиеся inline-атрибуты. Rule Builder помогает централизовать логику стилизации SVG и сократить дублирование кода.
2. Можно ли стилизовать SVG-классы и ID с помощью RuleBuilder?
Да. AddRule() поддерживает стандартные CSS-селекторы, включая селекторы элементов, классов и ID.
3. Зачем использовать CSS-правила внутри SVG вместо внешних CSS-файлов?
Встроенные SVG-стили делают SVG-графику самодостаточной и более удобной для повторного использования в приложениях, экспортах и самостоятельных SVG-файлах.
4. Можно ли повторно использовать один и тот же SVG-блок стилей для нескольких элементов?
Да. Один SVG-блок <style> может применять переиспользуемые правила к нескольким SVG-элементам через общие селекторы.
stroke или fill для различных фигур и элементов SVG при их заполнении цветом, узором или градиентом.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.