CSS та кілька фонових градієнтів
Замість того, щоб намагатися намалювати зелену частину, ви можете замість цього намалювати білі частини:
pie {
border-radius: 50%;
background-color: green;
}
.ten {
background-image:
linear-gradient(126deg, transparent 50%, white 50%),
linear-gradient(90deg, white 50%, transparent 50%);
}
pie {
width: 5em;
height: 5em;
display: block;
border-radius: 50%;
background-color: green;
border: 2px solid green;
float: left;
margin: 1em;
}
.ten {
background-image: linear-gradient(126deg, transparent 50%, white 50%), linear-gradient(90deg, white 50%, transparent 50%);
}
.twentyfive {
background-image: linear-gradient(180deg, transparent 50%, white 50%), linear-gradient(90deg, white 50%, transparent 50%);
}
.fifty {
background-image: linear-gradient(90deg, white 50%, transparent 50%);
}
.seventyfive {
background-image: linear-gradient(180deg, transparent 50%, green 50%), linear-gradient(90deg, white 50%, transparent 50%);
}
.onehundred {
background-image: none;
}
<pie class="ten"></pie>
<pie class="twentyfive"></pie>
<pie class="fifty"></pie>
<pie class="seventyfive"></pie>
<pie class="onehundred"></pie>
Демо: http://jsfiddle.net/jonathansampson/7PtEm/
Масштабована векторна графіка
Якщо це варіант, ви можете досягти подібного ефекту, використовуючи SVG <circle>
та <path>
елементи. Розглянемо наступне:
<svg>
<circle cx="115" cy="115" r="110"></circle>
<path d="M115,115 L115,5 A110,110 1 0,1 190,35 z"></path>
</svg>
Вищесказане досить прямо. У нас є елемент, що містить коло та шлях. Центр кола знаходиться на рівні 115x115 (що робить елемент SVG 230x230). Коло має радіус 110, що в цілому робить його шириною 220 (залишаючи межу 10).
Потім ми додаємо <path>
елемент, який є найскладнішою частиною цього прикладу. Цей елемент має один атрибут, який визначає, де і як намальований шлях. Починається з наступного значення:
M115,115
Це вказує шлях починатись у центрі згаданого кола. Далі ми проводимо лінію від цього місця до наступного:
L115,5
Це проводить вертикальну лінію від центру кола до верху елемента (ну, п'ять пікселів зверху). На цьому етапі все стає дещо складнішим, але все ще дуже зрозумілим.
Тепер ми малюємо дугу з нашого поточного місця (115,5):
A110,110 1 0,1 190,35 z
Це створює нашу дугу і надає їй радіус, що відповідає радіусу нашого кола (110). Два значення представляють радіус x та радіус y, і обидва рівні, оскільки ми маємо справу з колом. Наступний набір важливих номерів є останнім, 190,35
. Це вказує дузі, де завершити.
Що стосується решти інформації ( 1 0,1
і z
), то вони керують кривизною, напрямком і кінцем самої дуги. Ви можете дізнатись більше про них, проконсультувавшись з будь-яким онлайн-посиланням на шлях SVG.
Щоб виконати "зріз" іншого розміру, просто змініть значення, 190,35
щоб відображати більший або менший набір координат. Можливо, вам доведеться створити другу дугу, якщо ви хочете охопити більше 180 градусів.
Якщо ви хочете визначити координати x та y під кутом, ви можете використовувати такі рівняння:
x = cx + r * cos(a)
y = cy + r * sin(a)
У наведеному вище прикладі ступінь 76 буде:
x = 115 + 110 * cos(76)
y = 115 + 110 * sin(76)
Що дає нам 205.676,177.272
.
З деякою легкістю ви можете створити наступне:
circle {
fill: #f1f1f1;
stroke: green;
stroke-width: 5;
}
path {
fill: green;
}
svg.pie {
width: 230px;
height: 230px;
}
<svg class="pie">
<circle cx="115" cy="115" r="110"></circle>
<path d="M115,115 L115,5 A110,110 1 0,1 190,35 z"></path>
</svg>
<svg class="pie">
<circle cx="115" cy="115" r="110"></circle>
<path d="M115,115 L115,5 A110,110 1 0,1 225,115 z"></path>
</svg>
<svg class="pie">
<circle cx="115" cy="115" r="110"></circle>
<path d="M115,115 L115,5 A110,110 1 0,1 115,225 A110,110 1 0,1 35,190 z"></path>
</svg>
Демонстрація: http://jsfiddle.net/jonathansampson/tYaVW/