Otro método para esto que también puede tener soporte limitado es "SVG incrustado en CSS". No lo he intentado yo mismo, pero la idea es que proporcione un recurso de imagen como una url dentro de la declaración css para el objeto y le pase una url con escape adecuado que contenga los datos.
SVG es un formato de texto plano / xml. Un ejemplo de polígono (de w3schools ):
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<polygon points="200,10 250,190 160,210"
style="fill:lime;stroke:purple;stroke-width:1"/>
</svg>
Un ejemplo SVG en línea (incrustado) (simplificado) (de stackoverflow ):
url("data:image/svg+xml;utf8, <svg></svg>");
Tenga en cuenta que los datos SVG deben "escaparse" correctamente para su uso en línea, lo que lo hace un poco menos atractivo que simplemente vincular un archivo SVG.
Existe cierta discusión sobre la viabilidad del método en el hilo vinculado anterior. Creo que incrustar algo tan simple como un triángulo relleno de blanco es una decisión fácil siempre que haya soporte. Los datos complejos en formato SVG deben almacenarse como un archivo SVG en lugar de en línea.
Los archivos SVG son vectoriales y se pueden escalar por porcentaje, a diferencia del método de "bordes". También (actualmente) tienen un mejor soporte (al menos no en línea) que el método de trazado de recorte enumerado. SVG, al ser texto sin formato, incluso se puede emitir sobre la marcha utilizando, por ejemplo, PHP u otras secuencias de comandos del lado del servidor.