SVG desenleri, şekil ve metinlerin dolgularını ve konturlarını renklendirmek için sahip olduğumuz çeşitli boyama seçeneklerinden biridir. Genel olarak daha karmaşık seçeneklerden biri olarak görülse de, bir temel oluşturmak ve temel sözdizimini anlamak, daha karmaşık görünen kalıpları çok daha elde edilebilir hale getirebilir.
SVG desenleri çok benzersiz tasarım fırsatları sağlar. Esasen, bir hedef şekil veya metin içinde, daha sonra tekrarlanan (veya döşenerek) düz renk dolguları ve konturları dışında daha ayrıntılı tasarım sağlayan bir tuval tanımlıyoruz.
Bu makalede, SVG kalıpları için temel sözdizimi ve öznitelik seçeneklerini tartışacağız ve daha sonra daha iyi anlamak için bazı örnekleri gözden geçireceğiz.
Arkaplan bilgisi
Başlamadan önce, bu makalenin satır içi SVG’nin nasıl çalıştığına dair temel bir bilgi birikimi olduğunu varsaydığını belirtmek önemlidir.
Dolgu Desenleri
Temel bir SVG modelinin sözdizimine bir göz atalım ve ardından belirli öznitelik seçeneklerini gözden geçirelim.
Kartpostallar ile herhangi bir kodlama becerisi olmadan çevrimiçi e-posta şablonları oluşturabilir ve düzenleyebilirsiniz! Her zamankinden daha hızlı özel e-posta şablonları oluşturmanıza yardımcı olacak 100’den fazla bileşen içerir.
1
2
3
4
5
6
7
8
9
|
<svg> <defs> <pattern id= "basicPattern" x= "10" y= "10" width= "40" height= "40" patternUnits= "userSpaceOnUse" > < circle cx= "20" cy= "20" r= "20” fill= " #64bee3 " /> </pattern> </defs> <rect x= "10" y= "10" width= "200" height= "200" stroke= "#333333" stroke-width= "2" fill= "url(#basicPattern)" /> </svg> |
Bu kod, bir dikdörtgen içinde aşağıdaki kalıbı oluşturacaktır:
Daha sonra çağrılacak yeniden kullanılabilir tanımlar oluşturmamıza izin veren <svg>
bir <defs>
öğe içerir. Bu tanımların, stroke
ve/veya fill
öznitelikleri içinde benzersiz kimlikleri kullanılarak başvurulana kadar görsel çıktıları yoktur.
Dikdörtgen, kalıbımızı tanımladığımız öğenin içinde <svg>
, ancak dışında bulunur <defs>
. Desen daha sonra “dolgu” özniteliği aracılığıyla dikdörtgene uygulanır: `fill="url(#basicPattern)”`
.
Öznitellikler
Çok sayıda SVG’ye özgü nitelik olmasına rağmen, bu makale temel SVG kalıplarını oluşturmak ve işlemek için gerekli olanlara değinecektir.
Belki de SVG kalıplarıyla ilgili olarak anlaşılması en önemli ve daha zorlu kavramlar, her bir kalıp detayının eşlendiği koordinatlardır, bu nedenle bu nitelikler aşağıdaki açıklamalarda özel olarak ele alınacaktır.
ID
Her desen , SVG şekillerinin veya metninin stroke
ve/veya fill
nitelikleri aracılığıyla referans gösterilebilmesi için benzersiz bir kimlik gerektirir .
x,y, genişlik, yükseklik
<pattern>
Öğe içindeki x ve y nitelikleri , desenin şeklin ne kadar ilerisinde başlayacağını tanımlar. <pattern>
Öğe içinde kullanılan genişlik ve yükseklik, tahsis edilen desen alanının gerçek genişliğini ve yüksekliğini tanımlar.
Örneğin, <pattern>
yukarıda atıfta bulunulan öğe aşağıdaki değerleri içerir: x="10" y="10" width="40" height="40”
. Desen, x ekseninin başlangıcından 10 piksel, y ekseninin başlangıcından 10 piksel başlayacak ve esasen 40 piksel genişliğinde ve 40 piksel yüksekliğinde bir “tuval” oluşturacaktır.
Bu değerlerin hangi koordinat sistemi içinde uygulanacağının belirlenmesi patternUnits
ve patternContentUnits
nitelikleri içindeki değerler tarafından belirlenir.
Desen Birimler
patternUnits
Özelliği, x, y, en, yükseklik başvurulan olan koordinat tanımlar. Buradaki iki seçenek userSpaceOnUse
ve objectBoundingBox
.
Modeller bağlamında kullanıldığında userSpaceOnUse
, <pattern>
(yukarıdaki örnekteki dikdörtgen gibi) “kontur” ve/veya “dolgu”ya atıfta bulunan öğe için koordinat sistemi tarafından belirlenen bir model koordinat sistemindeki sonuçların değeri .
Değeri objectBoundingBox
, çoğaltmanın uygulandığı öğenin (desen hedefi) sınırlayıcı kutusu olarak x, y, genişlik ve yüksekliğin eşleme koordinat sistemini oluşturur.
Belirtilmezse varsayılan değer objectBoundingBox
.
Desen İçerik Birimler
patternContentUnits
Özellik değerleri değerleri ile aynıdır patternUnits
, objectBoundingBox
ve userSpaceOnUse
koordinat sistemi şimdi örnek içeriklerinin üzere tanımlanan haricinde.
Bunun aksine patternUnits
, bu değer belirtilmeden bırakılırsa varsayılan olarak “userSpaceOnUse” olur. Bu, bu niteliklerden biri veya her ikisi belirtilmedikçe, içinde çizilen şekillerin <pattern>
, <pattern>
elemanın kullandığından farklı bir koordinat sisteminde çizildiği anlamına gelir.
Bunu daha az zorlaştırmaya yönelik bir yaklaşım patternUnits=”userSpaceOnUse”
, <pattern>
öğe içinde tanımlamak olacaktır. Varsayılan patternContentUnits
olarak olarak ayarlanacak ve userSpaceOnUse
her ikisinin de bir sonraki bölümde daha ayrıntılı olarak tartışacağımız aynı koordinat alanı içinde çalıştığından emin olunacaktır.
Ayrıca, öğede viewBox öznitelik koordinatlarını zaten belirttiyseniz, bu değerin hiçbir etkisi olmayacağına da burada dikkat çekmek gerekir <pattern>
.
Kalıp Birimlerine Daha Yakından Bir Bakış
Kalıp birimleri , SVG kalıplarının hem en önemli hem de en karmaşık yönüdür. Belirtildiği gibi patternUnits
ve patternContentUnits
varsayılan olarak farklı değerlere sahip olduğundan, tutarlı bir şekilde konumlandırılmış bir desen alanı için birini diğeriyle koordine edecek şekilde ayarlamayı önemli hale getirir.
Ayar patternUnits=”userSpaceOnUse”
, aynı koordinat sistemi içinde çalışmasını sağlar patternContentUnits
ve çok daha basit bir seçenektir. Bu koordinat sistemi içinde ayarlanan hedef şekli/metni yeniden boyutlandıracak olursak, desen ek boşluğu doldurmak için tekrar edecektir.
Ayar patternContentUnits=”objectBoundingBox”
ayrıca tutarlı koordinat alanı sağlayacaktır. Bu koordinat sistemi içinde ayarlanan hedef şekli/metni yeniden boyutlandıracak olsaydık, desen tekrarlamadan ek boşluğu dolduracak şekilde ölçeklenir. Bu sistem içerisinde uygun ölçekleme değerlerinin sağlanabilmesi için yüzde veya ondalık tabanlı sayılar olarak ayarlanmalıdır.
objectBoundingBox
Ancak bir sistem içinde çalışmak zor olabilir. Bu alanda çalışırken bir takım hatalar var gibi görünüyor ve genel olarak ölçeklendirme fikri, tekrar eden, döşemeli bir desen kavramı için gerçekten doğru değil.
Referans için burada, objectBoundingBox
koordinat alanı içinde ayarlanan temel bir modelin ayrıntılarına bir göz atın:
1
2
3
4
5
6
7
8
|
<svg> <defs> <pattern id= "boundingPattern" width= ".50" height= ".50" patternContentUnits= "objectBoundingBox" > < circle cx= ".250" cy= ".250” r=" . 1 " fill=" #ec7677 " /> </pattern> </defs> <rect x= "2" y= "2" width= "200" height= "200" stroke= "#333333" stroke-width= "2" fill= "url(#boundingPattern)" /> </svg> |
Biz olsaydı genişletmek width
ve height
desen başvuran hedef şeklin, daireler ölçeğe uygun; dikdörtgen içinde her zaman sadece dört daire olacaktır.
Boyutlandırma Üzerine Bir Not
SVG, model ve çok hızlı bir şekilde bunaltıcı hale gelebilecek SVG modellerinin oluşturulmasına dahil olan şekiller içinde belirtilmiş çok sayıda width
ve height
değer var gibi görünebilir.
width
Ve height
içindeki <pattern>
elemanı kendini tekrarlayan başlamadan önce desen gitmeli ne kadar tanımlar. Bu değerler esasen desen alanının tuval boyutunu belirler.
width
Ve height
model şekilleri boyutlarını belirler, ancak boyutu geçemez içinde width
ve height
içinde bir dizi <pattern>
elemanı; tarafından belirlenen sınırlardan daha büyük herhangi bir şeklin fazlalığı <pattern>
oluşturulmaz.
Ek Örnek
Artık SVG model öznitelik seçeneklerini daha iyi anladığımıza göre, bu değer seçeneklerini daha fazla kullanan başka bir örneğe daha derinlemesine bakalım:
1
2
3
4
5
6
7
8
9
|
<svg> <defs> <pattern id= "secondPattern" x= "2" y= "2" width= "20" height= "20" patternUnits= "userSpaceOnUse" > <rect x= "5" y= "5" width= "10" height= "10" fill= "#876fc1" /> </pattern> </defs> <rect x= "2" y= "2" width= "200" height= "200" stroke= "#333333" stroke-width= "2" fill= "url(#secondPattern)" /> </svg> |
Boyutlar
SVG şeklimiz 200 piksele 200 pikseldir, “tuval” desenimiz 20 piksele 20 pikseldir ve desen şeklinin kendisi 10 piksele 10 pikseldir. Bu, 10 desen biriminin (20 piksele 20 piksel) şekle (200 piksele 200 piksel) sığmasını sağlar.
Her desen birimi içinde x ve y değeri 5 piksel olan bir dikdörtgen (10 piksele 10 piksel) vardır. Bu, her dikdörtgenin üst ve sol taraflarında <pattern>
sınırların kenarlarından 5 piksellik bir dolgu olduğu anlamına gelir.
Şeklin kenarlığının görünmez olmadığından emin olmak için hem SVG şeklinin kendisi hem de desen soldan 2 piksel ve üstten 2 piksel başlar.
x ve y Değerlerini Değiştirme
Bu desen dikdörtgenini “tuval” (20px x 20px) deseniyle aynı boyuta ayarlarsak ve x ve y değerlerini “0” olarak ayarlarsak, SVG şekli düz morla doldurulur. Desenin içindeki şekil için “0”dan büyük x ve y değerleri eklemek, şekli uygun eksen boyunca desene iter ve herhangi bir taşma görünür olmaz.
Boyunca kullanılan değerlere bağlı olarak, desen içindeki dikdörtgende daha büyük bir x ve y değeri, width
ve height
aynı olsa bile dikdörtgenin küçülüyormuş gibi görünmesine neden olabilir . Bunun nedeni, şeklin <pattern>
öğe içinde ayarlanan sınırların ötesine hareket etmesidir ve daha sonra içindeki genişliği ve yüksekliği genişletirseniz <pattern>
, şeklin görünüm dışında kesilen kısımlarını ortaya çıkaracaktır.
Aşağıdaki desen, mor desen şeklindeki farklı x ve y değerleri dışında, yukarıdaki dikdörtgendekiyle aynıdır: x="15" y="15”
.
Desen dikdörtgenleri küçülmüş gibi görünüyor, ancak onu biraz daha aşağıya ve fazladan 10 pikselin üzerine ittik ve bir kısmını desen tuvalinden çıkardık.
İç İçe Desenler
Bir kalıbı başka bir kalıpla doldurmak da mümkündür.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<svg> <defs> <pattern id= "yellowPattern" x= "5" y= "5" width= "75" height= "75" patternUnits= "userSpaceOnUse" > < circle cx= "22" cy= "22" r= "14" stroke= "#f19450" stroke-width= "2" fill= "#f6bf35" /> </pattern> <pattern id= "greenPattern" x= "10" y= "10" width= "50" height= "50" patternUnits= "userSpaceOnUse" > <rect x= "2" y= "2" width= "30" height= "30" stroke= "#5cbc8f" stroke-width= "2" fill= "url(#yellowPattern)" /> </pattern> </defs> <rect x= "2" y= "2" width= "200" height= "200" stroke= "#333333" stroke-width= "2" fill= "url(#greenPattern)" /> </svg> |
Desen Olarak Yollar
Yollar, desenler içinde de kullanılabilir.
1
2
3
4
5
6
7
8
9
|
<svg> <defs> <pattern id= "pathPattern" x= "4" y= "4" width= "25" height= "25" patternUnits= "userSpaceOnUse" > <path d= "M 0 0 Q 5 20 10 10 T 20 20" stroke= "#f0934e" fill= "none" /> </pattern> </defs> <rect x= "2" y= "2" width= "200" height= "200" stroke= "#333333" stroke-width= "2px" fill= "url(#pathPattern)" /> </svg> |
Metin Doldurma
Doldurma <text>
, bir desenli bir şekil doldurulmadan çok benzerdir.
1
2
3
4
5
6
7
8
|
<svg width= "600" height= "400" > <defs> <pattern id= "textPattern" x= "7" y= "7" width= "10" height= "10" patternUnits= "userSpaceOnUse" patternTransform= "rotate(45)" > <rect x= "5" y= "5" width= "5" height= "5" fill= "#876fc1" /> </pattern> </defs> <text x= "0" y= "50%" font-size= "200" fill= "url(#textPattern)" >Text</text> </svg> |
Tarayıcı Desteği
Satır içi SVG için tarayıcı desteği, Opera Mini’de destek olmamasına rağmen, modern masaüstü ve mobil tarayıcılarda güçlüdür.
Sonuç
Bu makalede, SVG kalıpları için temel sözdizimini inceledik, daha fazla özelleştirme için potansiyel özelliklerin anlamını inceledik ve daha sonra daha iyi anlamak için bazı örneklere daldık.
Umarım bu modellerin nasıl çalıştığına dair temel bir temel oluşturmak, daha karmaşık şekiller ve yollarla yeteneklerinin sınırlarını test etmeniz için size ilham verir.
Son güncelleme yapılmıştır.