Các cách thay đổi style cho thẻ – SVG

Thẻ <use> có tác dụng gì? Thẻ <use> sẽ giúp chúng ta tái sử dụng nhiều lần một thẻ <svg>. Bên dưới là một ví dụ: hiển thị 3 hình tròn chỉ với một thẻ <svg>. <div class="hide"> <svg id="circle" width="100" height="100"> <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="lightgreen" /> </svg> </div> <svg width="100" height="100"><use

Thẻ <use> có tác dụng gì?

Thẻ <use> sẽ giúp chúng ta tái sử dụng nhiều lần một thẻ <svg>. Bên dưới là một ví dụ: hiển thị 3 hình tròn chỉ với một thẻ <svg>.

<div class="hide">
    <svg id="circle" width="100" height="100">
       <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="lightgreen" />
    </svg> 
</div>

<svg width="100" height="100"><use xlink:href="#circle"></svg>
<svg width="100" height="100"><use xlink:href="#circle"></svg>
<svg width="100" height="100"><use xlink:href="#circle"></svg>

Cách thay đổi style cho thẻ <use>

Khi chúng ta sử dụng thẻ <use>, trình duyệt sẽ duplicate content bên trong thẻ <svg> và lưu trữ bản sao đó bên trong Shadow DOM. Chính vì sử dụng Shadow DOM nên việc thay đổi style cho các element trong thẻ <use> trực tiếp bằng CSS sẽ không hoạt động. Ở bài viết này, chúng ta sẽ tìm hiểu những cách để thay đổi style cho từng thẻ <use> riêng biệt.

use svg circle {
    stroke: blue;
}
// Đoạn CSS selector trên không thể target các element nằm bên trong thẻ <use>

Sử dụng biến curentColor

Thay vì đặt màu cho <svg> gốc, mình đặt cho nó giá trị là curentColor và set các thuộc tính màu khi gọi thẻ <use>.

<div class="hide">
    <svg id="circle" width="100" height="100">
        <circle cx="50" cy="50" r="40" stroke="curentColor" stroke-width="4" fill="curentColor" />
    </svg> 
</div>

<svg width="100" height="100"><use xlink:href="#circle" stroke="blue" fill="lightblue"></svg>
<svg width="100" height="100"><use xlink:href="#circle" stroke="deeppink" fill="lightpink"></svg>
<svg width="100" height="100"><use xlink:href="#circle" stroke="green" fill="lightgreen"></svg>

Sử dụng CSS

Trong một số trường hợp chúng ta không có quyền thay đổi markup HTML. Ta có thể ghi đè các thuộc tính của svg gốc bằng cách set giá trị inherit ở CSS:

svg circle {
  fill: inherit;
  stroke: inherit;
}

Và thay đổi style cho các element:

.circle-1 {
  stroke: #2E4C6D;
  fill: #396EB0;
}

.circle-2 {
  stroke: #FFBC97;
  fill: #EED6C4;
}

.circle-3 {
  stroke: #FF5DA2;
  fill: #99DDCC;
}

Kết luận

Ở bài viết này, mình đã cùng tìm hiểu về cách tái sử dụng svg bằng cách sử dụng thẻ <use> và các cách để thay đổi style cho từng element đó.

Mình hy vọng các bạn thấy bài viết này hữu ích. Thanks you for reading.

Nguồn: viblo.asia

Bài viết liên quan

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,