Установка закругленных углов для svg: image
Я пытался сделать закругленные углы для S svg: image (изображение, встроенное в SVG) с d3.js. Я не могу узнать, как правильно стилизовать изображение, потому что в соответствии со спецификацией W3C я должен иметь возможность использовать CSS, но для меня работают более тонкие границы и закругленные края.
спасибо заранее.
vis.append("svg:image")
.attr("width", width/3)
.attr("height", height-10)
.attr("y", 5)
.attr("x", 5)
.attr("style", "border:1px solid black;border-radius: 15px;")
.attr("xlink:href",
"http://www.acuteaday.com/blog/wp-content/uploads/2011/03/koala-australia-big.jpg");
изменить:
браузеры протестированы: Firefox, Chrome
2 ответов
'border-radius' не применяется к элементам svg:image (пока в любом случае). Обходным путем было бы создать прямую кишку со скругленными углами и использовать путь клипа.
соответствующая часть источника:
<defs>
<rect id="rect" x="25%" y="25%" width="50%" height="50%" rx="15"/>
<clipPath id="clip">
<use xlink:href="#rect"/>
</clipPath>
</defs>
<use xlink:href="#rect" stroke-width="2" stroke="black"/>
<image xlink:href="boston.jpg" width="100%" height="100%" clip-path="url(#clip)"/>
также можно создать несколько элементов rect вместо использования <use>
.
для тех, кто просто заинтересован в создании округленных аватаров, вот пример использования d3 v4. Обратите внимание, что вам нужно применить обрезку, пока изображение находится на (0,0), поэтому вам нужно перевести() изображение туда, где вы хотите.
import { select } from 'd3-selection';
const AVATAR_WIDTH = 80;
const avatarRadius = AVATAR_WIDTH / 2;
const svg = select('.my-container');
const defs = this.svg.append("defs");
defs.append("clipPath")
.attr("id", "avatar-clip")
.append("circle")
.attr("cx", avatarRadius)
.attr("cy", avatarRadius)
.attr("r", avatarRadius)
svg.append("image")
.attr("x", 0)
.attr("y", 0)
.attr("width", AVATAR_WIDTH)
.attr("height", AVATAR_WIDTH)
.attr("xlink:href", myAvatarUrl)
.attr("clip-path", "url(#avatar-clip)")
.attr("transform", "translate(posx, posy)")
.append('My username')