Chỉ định tên lớp CSS trên đường dẫn SVG bằng Illustrator


21

Có cách nào để chỉnh sửa các tệp SVG trong Illustrator nơi bạn có thể chỉ định một lớp CSS cho mỗi đường dẫn không?

Tôi đã biết trong Illustrator rằng nếu bạn đặt tên lớp là tên thật, Illustrator sẽ sử dụng tên đó làm ID của đường dẫn, sẽ ổn nếu bạn không có kế hoạch sử dụng lại biểu tượng nhiều lần trên cùng một trang.

Cách giải quyết hiện tại của tôi là chỉ sử dụng phương thức ID, nhưng sau đó chuyển đổi ID thành các lớp trong trình chỉnh sửa mã của tôi, nhưng thật khó chịu khi phải tạo sprite SVG của tôi.

Nếu điều đó hiện không thể có trong Illustrator, có ứng dụng nào khác cho phép bạn chỉ định điều đó không? Hoặc có thể là một gói Grunt hoặc Gulp?

Có vẻ như bạn có thể làm điều đó với Inkscape bằng một bản hack , vì vậy tôi có thể xem xét điều đó nếu không có giải pháp tốt nào khác ngoài đó.


Tôi không thể có họa sĩ minh họa để xuất với ID hoặc lớp. Mặc dù vậy, tôi thích viết mã SVG của mình, kỳ lạ như âm thanh đó và không hiệu quả lắm tôi biết, bạn có thể bao gồm phiên bản của họa sĩ minh họa nào bạn đang sử dụng không?
Daniel

Tôi đang sử dụng Adobe Illustrator CC phiên bản 17.1.0
NerdCowboy

Câu trả lời:


5

Tôi làm điều này với một nhiệm vụ Grunt. Bằng cách sử dụng "grunt-text-thay thế", tôi có thể vượt qua các SVG đã rút gọn của mình (svgmin) thông qua một biểu thức chính quy tùy chỉnh thay thế tất cả các tham chiếu lớp bị cắt xén bằng các lớp thích hợp.

Trong Illustrator, ví dụ khai báo tên lớp / đối tượng là class = "cây" . Điều này sẽ được Illustrator xuất ra dưới dạng id = "class =" cây "" . Nhiệm vụ lẩm cẩm dưới đây sẽ đảm nhiệm việc đó và biến nó thành class = "cây" . Tôi cũng đang dán bên dưới một số nhiệm vụ khác sẽ làm sạch ID (được khuyến nghị).

    replace: {
        // ID cleanup: performs a manual ID cleanup as Illustrator exports a mess
        illustrator: {
            src: ['assets/svg/optimised/*.svg'],
            overwrite: true,
            replacements: [{
                // Remove escaped underscore character
                from: '_x5F_',
                to: '_'
            }, {
                // Replace class names with proper classes
                //class_x3D__x22_tank-option_x22__2_
                from: /id\=\"class_x3D__x22_(.+?)_x22_(.*?)\"/gi,
                to: function(matchedWord, index, fullText, regexMatches) {
                    return 'class="'+ regexMatches[0].toLowerCase()+'"';
                }
            }, {
                // Lowercase all ids
                from: /id\=\"(.+?)\"/gi,
                to: function(matchedWord, index, fullText, regexMatches) {
                    return 'id="'+ regexMatches[0].toLowerCase()+'"';
                }
            }, {
                // Lowercase all id references to match the previous replace rule
                from: /url\(\#(.+?)\)/gi,
                to: function(matchedWord, index, fullText, regexMatches) {
                    return 'url(#'+ regexMatches[0].toLowerCase() +')';
                }
            }, {
                // Lowercase all id href to match the previous replace rule
                from: /href\=\"\#(.+?)\"/gi,
                to: function(matchedWord, index, fullText, regexMatches) {
                    return 'href="#'+ regexMatches[0].toLowerCase() +'"';
                }
            }, {
                // Remove all font references as we will use CSS for this
                from: /font\-family\=\"(.+?)\"/gi,
                to: function(matchedWord, index, fullText, regexMatches) {
                    return '';
                }
            }]
        }
    }

Sau đó, bạn có thể gọi tác vụ này trong Gruntfile của mình là:

grunt.registerTask('svgclean', [
    'replace:illustrator'
]);

7

Có vẻ như liên kết Ian Dunn đăng có thể là vé của bạn. Đây là một đoạn trích từ trang đó :

Trong các tùy chọn xuất SVG, tôi chọn Kiểu phần tử và tôi chọn tùy chọn Bao gồm các kiểu đồ họa không sử dụng. Nó sẽ khai báo sandStyle và blueSky là các kiểu CSS trong tài liệu SVG.

Đây là đầu ra SVG được tạo bởi Illustrator CC:
<style type="text/css"> .sandStyle{fill:#BFAF8F;stroke:#A6806A;stroke-width:3;stroke-miterlimit:10;} .blueSky{fill:#338AC4;stroke:#3469B7;stroke-width:3;stroke-miterlimit:10;} </style> <g id="mySquare"> <rect x="90.5" y="15.5" class="sandStyle" width="64" height="63"/> </g> <g id="myCircle"> <circle class="sandStyle" cx="42" cy="46" r="34.2"/> </g>

Illustrator có thể xuất các kiểu đồ họa dưới dạng CSS trong một thành phần kiểu và áp dụng chúng thông qua các lớp trong mã SVG. Đây là cách bạn có thể tạo các lớp trong SVG đã xuất. Tùy thuộc vào những gì bạn muốn các lớp đó làm, bạn chỉ có thể định nghĩa chúng trong tệp CSS khác và xóa định nghĩa kiểu khỏi SVG đã xuất.

Trang được liên kết nêu rõ điều này, nhưng để hoàn thiện, Illustrator sẽ chỉ tạo phần tử kiểu và các lớp nếu bạn đặt CSS Properties: Style Elementtrong khu vực Nâng cao (bạn có thể cần phải bấm More Options) của Hộp thoại Tùy chọn SVG:Lưu> Định dạng: SVG> Tùy chọn SVG> Tùy chọn khác> Thuộc tính CSS: Kiểu phần tử

Tôi cũng lưu ý rằng mã được tạo sẽ không bao giờ hoàn hảo cho mọi tình huống. Mã viết tay có xu hướng nhẹ hơn và dễ đọc hơn cho con người (nếu đó là những gì bạn sẽ làm). Tôi khuyên bạn nên đọc qua tài liệu của người dùng Wikimedia Quibik về việc dọn dẹp các tệp SVG bằng tay và xem qua grunt-svgmin .


2

Tôi vừa gặp vấn đề này và tìm ra giải pháp sau (cho Illustrator CC):

Áp dụng có tên "Kiểu đồ họa" cho các đường dẫn bạn muốn đặt tên và xuất SVG bằng CSS nội bộ. Ví dụ: Kiểu đồ họa có tên my-icon sẽ xác định một my-iconlớp bên trong và áp dụng lớp đó cho các đường dẫn thích hợp.

Ví dụ với ảnh chụp màn hình:

Tạo một phong cách đồ họa mới: Tùy chọn phong cách đồ họa

Xuất dưới dạng ... SVG:

Xuất dưới dạng ... SVG

Đầu ra:

<defs><style>.my-icon{ fill:#000; }</style></defs> <path class="my-icon">...</path>

Nguồn: https://www.viget.com/articles/5-tips-for-saving-svg-for-the-web-with-illustrator

  1. Sử dụng Cài đặt thuộc tính CSS phù hợp (dev happy)

CC: Illustrator sử dụng các Kiểu đồ họa đã xác định để tạo các lớp được đặt tên (thông minh, hữu ích)


1

Trong Illustrator 21.0.0 (2017) và có thể trong các phiên bản trước:

  1. Tạo kiểu mới trong bảng Kiểu dáng đồ họa
  2. Nhấp đúp vào kiểu mới và đặt tên tùy chỉnh, như "my-style"
  3. Áp dụng phong cách đó cho một hoặc nhiều yếu tố
  4. Xuất khẩu SVG

Các phần tử trong SVG sẽ được cung cấp một thuộc tính lớp với giá trị "my-style". Sau đó, bạn có thể sử dụng CSS bên ngoài để ghi đè các kiểu.

Lưu ý rằng nếu tên kiểu của bạn chứa một khoảng trắng, nó sẽ chuyển thành dấu gạch nối.


0

Cách đơn giản để thực hiện, nó tương tự như nhiệm vụ Grunt, nhưng thậm chí còn dễ dàng hơn:

Đối với tất cả các đối tượng bạn muốn tạo lớp, hãy đặt tên ví dụ: "myClassmainCircle" và "myClassmainStar". Sau khi xuất thay thế tất cả: 'id = "myClass' bằng 'class ="'

Kết quả sẽ là: class = "mainCirle" class = "mainstar"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.