Возможны ли округлые формы? Формы, такие как шестиугольник, восьмиугольник?

Какое-то время я пытался скруглить углы шестиугольников, однако обнаружил, что ни один из моих методов не работает. Есть ли у вас, ребята, какие-либо предложения о том, как это можно сделать?


person Xceptic    schedule 02.02.2013    source источник
comment
Что вы пробовали?   -  person    schedule 02.02.2013
comment
CSS не подходит для этого. Попробуйте SVG.   -  person John Dvorak    schedule 02.02.2013
comment
пытался использовать svg, но безрезультатно   -  person Xceptic    schedule 02.02.2013
comment
@JackManey, ха-ха, whathaveyoutried.com... молодец, блестящая находка!   -  person dev    schedule 02.02.2013
comment
Вероятно, это возможно с кучей работы (и несколькими элементами): css-tricks.com/examples/ShapesOfCSS< /а>   -  person Tim Medora    schedule 02.02.2013
comment
@TimMedora Вы должны опубликовать это как ответ.   -  person Pavlo    schedule 03.02.2013


Ответы (1)


http://jsfiddle.net/9BTTQ/4/

HTML

<div class="hexagon">
    <div>1</div>
    <div>2</div>
    <div>3</div>
</div>

CSS

.hexagon {
    position: relative;    
}

.hexagon > DIV {
    position: absolute;
    top: 0;
    left: 48px;
    -moz-border-radius: 16px;
    border-radius: 16px;
    width: 64px;
    height: 96px;
    background-color: blue;
}

.hexagon > DIV:nth-child(2) {
    -moz-transform: rotate(60deg);
    -ms-transfrom: rotate(60deg);
    -webkit-transform: rotate(60deg);
    transform: rotate(60deg);
}

.hexagon > DIV:nth-child(3) {
    -moz-transform: rotate(120deg);
    -ms-transfrom: rotate(120deg);
    -webkit-transform: rotate(120deg);
    transform: rotate(120deg);
}

Заметки:

  • Это, вероятно, было бы лучше сделать с помощью SVG или холста, если это не является изолированной необходимостью. Создание набора элементов для формирования формы не имеет смысла и утомительно.

  • IE 7/8 вообще не будет работать из-за transform, border-radius и nth-child.

  • Вы заметите простые математические отношения между размером радиуса границы, шириной и высотой.

  • На этом сайте показано много других интересных форм, которые можно создать.

person Tim Medora    schedule 02.02.2013
comment
Привет Тим ​​Медора. У меня есть вопрос о простых математических отношениях между размером радиуса границы, шириной и высотой, не могли бы вы помочь мне найти отношения? Заранее спасибо. - person Donovan Charpin; 17.04.2014
comment
@DonovanCharpin — вот модифицированная скрипта, демонстрирующая отношения: jsfiddle.net/9BTTQ/91. Высота = ширина * 1,5, а радиус границы = ширина * 0,25. Честно говоря, я не уверен в геометрии, лежащей в основе почему это работает для закругленного шестиугольника, состоящего из трех равных прямоугольников. - person Tim Medora; 17.04.2014
comment
Спасибо за быстрый ответ. На этом веб-сайте, если длина ребра равна 100, короткая диагональ составляет около 173, поэтому соотношение равно height = width * 1.73. Для радиуса границы я не могу найти значение, соответствующее высоте и ширине... В jsFiddle я могу написать border-radius: 1em / 0.5em;, который отлично работает следующим образом пример. Но у меня проблема с моей последней версией lessCSS, которая вычисляет 2em, а это не то же самое, что 1em / 0.5... ЧЕРТОВСКИ. jsFiddle обновлен - person Donovan Charpin; 18.04.2014
comment
Вы пытаетесь разделить радиус границы или установить неравные значения на разных сторонах? В простом CSS 1em / .5em задает разные радиусы границ по сторонам прямоугольника. LESS CSS разделил бы это выражение, что привело бы к другому результату. Чтобы разделить в простом CSS, вам понадобится calc(1em / .5). - person Tim Medora; 18.04.2014
comment
Я хотел бы сохранить border-radius: 1em / 0.5em;, но без calc() меньше вычисляет 2em. Так что я не могу получить это выражение border-radius: 1em / 0.5em; с меньшим количеством... - person Donovan Charpin; 18.04.2014
comment
Правильный формат просто border-radius : "1em / 0.5em"; для меньшего... Я думаю, что это работает для каждого шестиугольника. Спасибо за вашу помощь. +1 :) - person Donovan Charpin; 18.04.2014