Каким образом сделать подобное?

379
02 мая 2017, 04:25

Подскажите как лучше(профессиональней) сделать подобное?

https://jsfiddle.net/77LmLmwt/

Чтобы ячейки "не заползали" друг на друга, равномерно заполняли пространство и между ними был отступ хотя бы 1-2рх.

Код
Answer 1

Вариант с использованием SVG и JS (JSFiddle):

var width = window.innerWidth 
  , height = window.innerHeight 
  , cx = width / 2 
  , cy = height / 2 
  , radius = Math.min(cx, cy) - 1 
  , segmentsPerRow = 48 
  , angle = 360 / segmentsPerRow 
  , rows = 13 
  , rowHeight = radius / 23 
  , borderWidth = 1 
  , borderColor = '#000' 
  , segmentColor = '#fff' 
  , segments = []; 
   
function polarToCartesian(cx, cy, radius, deg) { 
  var rad = (deg - 90) * Math.PI / 180; 
  return { 
    x: cx + (radius * Math.cos(rad)), 
    y: cy + (radius * Math.sin(rad)) 
  }; 
} 
 
function segmentPath(x, y, radius1, radius2, angleStart, angleEnd) { 
  var start1 = polarToCartesian(x, y, radius1, angleEnd) 
    , end1 = polarToCartesian(x, y, radius1, angleStart) 
    , start2 = polarToCartesian(x, y, radius2, angleEnd) 
    , end2 = polarToCartesian(x, y, radius2, angleStart); 
  return [ 
    'M', start1.x, start1.y,  
    'A', radius1, radius1, 0, 0, 0, end1.x, end1.y, 
    'L', end2.x, end2.y, 
    'A', radius2, radius2, 0, 0, 1, start2.x, start2.y, 
    'L', start1.x, start1.y 
  ].join(' ');        
} 
 
window.onload = function() { 
  var scene = document.getElementById('scene'); 
  scene.setAttribute('viewBox',  [0, 0, width, height].join(' '));   
   
  for (var row = 0; row < rows; row++) { 
    segments.push([]); 
    for (var segment = 0; segment < segmentsPerRow; segment++) { 
      var path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); 
      path.setAttribute('fill', segmentColor); 
      path.setAttribute('stroke', borderColor); 
      path.setAttribute('stroke-width', borderWidth); 
      path.setAttribute('d', segmentPath(cx, cy, radius - row * rowHeight 
        , radius - (row + 1) * rowHeight, angle * segment, angle * (segment + 1))); 
      scene.appendChild(path); 
      segments[row].push(path); 
    } 
  } 
 
  segments[0][0].setAttribute('fill', '#f33'); 
  segments[6][16].setAttribute('fill', '#f33'); 
  segments[12][32].setAttribute('fill', '#f33');   
};
<svg id="scene"></svg>

Answer 2

проста к классу flac в CSS под конец увеличьте margin 15px

READ ALSO
Как выровнять по центру?

Как выровнять по центру?

Есть div блок и 4х4 div блока в нём

416
Не работает font-awesome из npm

Не работает font-awesome из npm

Поставил font-awesome так: npm install --save font-awesomeПосле этго пытаюсь получить картинку:

403
JQuery поменять элементы местами

JQuery поменять элементы местами

Как можно менять местами блоки? Чтобы каждые 10 секунд последний блок вставал на место первого, второй на место третьего, третий на место последнегоИ...

1201
Ввод в поле с помощью Js

Ввод в поле с помощью Js

Привет, тут такое дело, как с помощью js в поле вбивать допустим слово "Hello"?

336