Страницы

Поиск по вопросам

Показаны сообщения с ярлыком clip-path. Показать все сообщения
Показаны сообщения с ярлыком clip-path. Показать все сообщения

суббота, 7 марта 2020 г.

Угол под 45 градусов у div

#html #css #css3 #internet_explorer #clip_path


Друзья, может кто-то сталкивался с подобной задачей...
Необходимо у div срезать углы (верхний-левый и нижний правый), под углом 45 градусов.

реализовал через clip-path

    .corner45top {
    -webkit-clip-path: polygon(5% -200%, 100% 0%, 100% 100%, 0% 100%, 0% 100%, 0% 100%);
    clip-path: polygon(5% -200%, 100% 0%, 100% 100%, 0% 100%, 0% 100%, 0% 100%);
    clip-path: url("#swipe__clip-path");
    background-color: #FFFFFF;
    box-shadow: 0 1px 6px 0 rgba(86,86,86,0.25);
}

.corner45bottom {
    -webkit-clip-path: polygon(0 -100%, 100% 0%, 98% 100%, 0% 100%, 0% 100%, 0% 100%);
    clip-path: polygon(0 -100%, 100% 0%, 98% 100%, 0% 100%, 0% 100%, 0% 100%);
    clip-path: url("#swipe__clip-path-bottom");
    background-color: #FFFFFF;
    box-shadow: 0 1px 0 0 rgba(86,86,86,0.25);
}


    
        
            
        
     

   
    
        
            
        
     



Но все эти "красивости" никак не работают в браузере EDGE, есть ли какой-то простой
вариант вылечить это?
Мог бы сделать углы например картинкой, но за блоками есть background-image цветной(
    


Ответы

Ответ 1



Для этого нам на помощь приходит SVG , подходит такой вариант ?

Ответ 2



Делаем маску с помощью overflow:hidden. Угол получаем поворотом элемента на 45 градусов transform:rotate(-45deg) (внутренний элемент вертим обратно, чтобы был ровно). С помощью отступов margin регулируем глубину среза. .container{ transform:rotate(-45deg); overflow:hidden; height: 160px; margin-top: -30px; } .inside{ transform:rotate(45deg); background:#090; height:100px; width:200px; margin:30px auto; }
Тестовый блок


пятница, 28 февраля 2020 г.

Как сделать скошенный угол у прямоугольника?

#html #css #css3 #svg #clip_path


Необходимо карточке, с border'ом и фоном (всё на css), сделать срез у верхнего левого
угла и, чтобы у него был такой же border. Пробовал clip-path. Возможно нужно использовать
псевдоэлемент или SVG?



.Card {
    margin: 23px 0 0 80px;
    width: 320px;
    height: 480px;
    border: 4px solid #2ea8e6;
    border-radius: 10px;
    background-color: #f2f2f2; 
    overflow: hidden;
    float: left;
    position: relative;
    clip-path: polygon(15% 0, 100% 0, 100% 0, 100% 100%, 100% 100%, 0 100%, 0 100%,
0 10%);
}

    


Ответы

Ответ 1



Решение через CSS3: Это можно сделать при помощи CSS3 clip-path, но согласно документации в Safari (WebKit), в Edge и в Internet Explorer это в данное время работать не будет. Для того чтобы это сделать нам понадобится 2 прямоугольника (div), которые лежат один в другом. Внутренний прямоугольник расположен с помощью position: absolute сверху, а внешний выступает в качестве обводки (border), т.к. на 4px (x2) больше внутреннего. Оба они обрезаются с помощью CSS3 clip-path. Подробнее о свойстве clip-path читайте тут. .card-border { margin:14px; position: relative; width: 328px; height: 488px; background-color: #2ea8e6; border-radius: 14px; clip-path: polygon(15% 0, 100% 0, 100% 100%, 0 100%, 0 10%); } .card { position: absolute; top: 4px; /* соответствует ширине border */ left: 4px; /* соответствует ширине border */ width: 320px; /* container width - (ширина border * 2) */ height: 480px; /* container height - (ширина border * 2) */ background-color: #f2f2f2; border-radius: 11px; clip-path: polygon(14.7% 0, 100% 0, 100% 100%, 0 100%, 0 9.7%); }
Обратите внимание на то, что значения у внутреннего clip-path: polygon должны быть немного меньше. Решение через SVG: Другое решение с помощью SVG clip-path более предпочтительнее, т. к. работает в большинстве современных обозревателях сети. Вы можете SVG файл применить в качестве background для div, в котором будут ваши данные.

четверг, 27 февраля 2020 г.

CSS - Как размыть маску SVG?

#css #html5 #svg #анимация #clip_path


Я пытался размыть SVG clip-path.
 Пробовал разные решения, но ни одно не помогло.  

Я не уверен, есть ли другое решение, кроме фильтра.

Pseudocode  


SVG clip-path должен раскрывать текст ниже  
Края, если SVG clip-path применен должны быть размытыми  


HTML



    .wrapper {
      display: flex;
      justify-content: center;
      align-items: center;
      position: relative;
    }
    
    .h1, blur {
      width: 100vw;
      height: 100vh;
    }
    
    .h1 {
      position: absolute;
      top: 0;
      left: 0;
      margin: 0;
      padding: 0;
      font-size: 4em;
      clip-path: url(#svgPath);
      background-color: blue;
    }
    
    .blur {
      position: absolute;
      top: 0;
      left: 0;
      margin: 0;
      padding: 0;
      font-size: 4em;
      color: blue;
      background-color: white;
      filter: blur(8px)
    }

Our principles inform everything we do. Whether you're preparing content, designing an interface or developing an entire service, start by reading these.

Our principles inform everything we do. Whether you're preparing content, designing an interface or developing an entire service, start by reading these.


Ответы

Ответ 1



Хорошо, вот способ сделать это, используя radial-gradient() в качестве mask-image. var h1 = document.getElementById('masked'); document.addEventListener('mousemove', mouseListen, false); function mouseListen(e){ setMaskPos(e.clientX,e.clientY); } function setMaskPos(x,y) { h1.setAttribute("style", "-webkit-mask-image: radial-gradient(circle at " + x + "px " + y + "px, black 0px, black 200px, transparent 250px)"); } // Initialise the mask off screen setMaskPos(-999,0); .wrapper { display: flex; justify-content: center; align-items: center; position: relative; } .h1, blur { width: 100vw; height: 100vh; } .h1 { position: absolute; top: 0; left: 0; margin: 0; padding: 0; font-size: 4em; background-color: white; } .blur { position: absolute; top: 0; left: 0; margin: 0; padding: 0; font-size: 4em; background-color: white; filter: blur(8px) }

Our principles inform everything we do. Whether you're preparing content, designing an interface or developing an entire service, start by reading these.

Our principles inform everything we do. Whether you're preparing content, designing an interface or developing an entire service, start by reading these.



понедельник, 24 февраля 2020 г.

Маскирование фонов CSS

#css #svg #background #clip_path


Добрый день уважаемые. Подскажите как реализовать маскирование фонов в CSS ? 


Необходимо добиться что б на выходе получить красный круг (5штук) с чёрным обводом.
Эффект как-будто в диве с классом el дырка и через него просвечивает нижний фон. Я
пробовал через clip-path но оно обрезает наружное, а мне надо то что внутри что б вырезало



.block{
  width: 100px;
  height: 500px;
  background-color: red;
}
.el{
   width: 100px;
  height: 100px;
  background-color: black;
/*    -webkit-clip-path: circle(50% at 50% 50%);
   clip-path: circle(50% at 50% 50%); */
}


Ответы

Ответ 1



А может попробовать маски для этой цели. Сделаем из круга маску и сквозь нее будем смотреть на подложку. В первом варианте у меня красный квадрат подложка, а во втором растровое изображение. Теперь цветы. Фотка Yoksel и идеи её по использованию масок Вот в качестве маски шестиугольник Отличная статья о масках от Yoksel

Ответ 2



Такое ощущение, что недавно отвечал на такой же вопрос на SO. Чёрная часть маски убирается из элемента, а белая остаётся: html, body { height: 100%; margin: 0; background: linear-gradient(to top, red, blue); } svg { display: block; width: 150px; }

воскресенье, 16 февраля 2020 г.

Маскирование фонов CSS

#css #svg #background #clip_path


Добрый день уважаемые. Подскажите как реализовать маскирование фонов в CSS ? 


Необходимо добиться что б на выходе получить красный круг (5штук) с чёрным обводом.
Эффект как-будто в диве с классом el дырка и через него просвечивает нижний фон. Я
пробовал через clip-path но оно обрезает наружное, а мне надо то что внутри что б вырезало



.block{
  width: 100px;
  height: 500px;
  background-color: red;
}
.el{
   width: 100px;
  height: 100px;
  background-color: black;
/*    -webkit-clip-path: circle(50% at 50% 50%);
   clip-path: circle(50% at 50% 50%); */
}


Ответы

Ответ 1



А может попробовать маски для этой цели. Сделаем из круга маску и сквозь нее будем смотреть на подложку. В первом варианте у меня красный квадрат подложка, а во втором растровое изображение. Теперь цветы. Фотка Yoksel и идеи её по использованию масок Вот в качестве маски шестиугольник Отличная статья о масках от Yoksel

Ответ 2



Такое ощущение, что недавно отвечал на такой же вопрос на SO. Чёрная часть маски убирается из элемента, а белая остаётся: html, body { height: 100%; margin: 0; background: linear-gradient(to top, red, blue); } svg { display: block; width: 150px; }

пятница, 14 февраля 2020 г.

Как сделать такой эффект как на скриншоте с эффектом смещения?

#css #clip_path #svg_animation


Хотелось бы реализовать такой эффект как на скрине :



Разумеется хотя бы с 90% поддержкой но как можно проще. 

Как это можно реализовать ?
    


Ответы

Ответ 1



Удалось реализовать только средствами clip-path на css. @import "https://fonts.googleapis.com/css?family=Orbitron"; html, body { background-color: #000; text-align: center; padding: 10%; } .content { color: #62C85B; font-family: 'Orbitron', sans-serif; font-size: 100px; font-weight: bold; color: #61F5A1; position: relative; } @keyframes glitch-anim-1 { 0% { clip: rect(60px, 1084px, 10px, 0); } 5.8823529412% { clip: rect(104px, 1084px, 63px, 0); } 11.7647058824% { clip: rect(67px, 1084px, 72px, 0); } 17.6470588235% { clip: rect(61px, 1084px, 101px, 0); } 23.5294117647% { clip: rect(5px, 1084px, 5px, 0); } 29.4117647059% { clip: rect(105px, 1084px, 85px, 0); } 35.2941176471% { clip: rect(40px, 1084px, 45px, 0); } 41.1764705882% { clip: rect(9px, 1084px, 81px, 0); } 47.0588235294% { clip: rect(62px, 1084px, 76px, 0); } 52.9411764706% { clip: rect(72px, 1084px, 104px, 0); } 58.8235294118% { clip: rect(99px, 1084px, 4px, 0); } 64.7058823529% { clip: rect(43px, 1084px, 88px, 0); } 70.5882352941% { clip: rect(78px, 1084px, 7px, 0); } 76.4705882353% { clip: rect(12px, 1084px, 20px, 0); } 82.3529411765% { clip: rect(112px, 1084px, 40px, 0); } 88.2352941176% { clip: rect(106px, 1084px, 113px, 0); } 94.1176470588% { clip: rect(69px, 1084px, 69px, 0); } 100% { clip: rect(23px, 1084px, 68px, 0); } } @keyframes glitch-anim-2 { 0% { clip: rect(114px, 1084px, 104px, 0); } 5.8823529412% { clip: rect(91px, 1084px, 83px, 0); } 11.7647058824% { clip: rect(64px, 1084px, 106px, 0); } 17.6470588235% { clip: rect(115px, 1084px, 109px, 0); } 23.5294117647% { clip: rect(66px, 1084px, 25px, 0); } 29.4117647059% { clip: rect(59px, 1084px, 57px, 0); } 35.2941176471% { clip: rect(115px, 1084px, 102px, 0); } 41.1764705882% { clip: rect(94px, 1084px, 51px, 0); } 47.0588235294% { clip: rect(17px, 1084px, 30px, 0); } 52.9411764706% { clip: rect(111px, 1084px, 66px, 0); } 58.8235294118% { clip: rect(58px, 1084px, 113px, 0); } 64.7058823529% { clip: rect(69px, 1084px, 1px, 0); } 70.5882352941% { clip: rect(108px, 1084px, 13px, 0); } 76.4705882353% { clip: rect(32px, 1084px, 18px, 0); } 82.3529411765% { clip: rect(33px, 1084px, 36px, 0); } 88.2352941176% { clip: rect(92px, 1084px, 49px, 0); } 94.1176470588% { clip: rect(3px, 1084px, 49px, 0); } 100% { clip: rect(35px, 1084px, 86px, 0); } } .content:before, .content:after { content: attr(data-text); position: absolute; top: 0; left: 0; width: 100%; background: black; clip: rect(0, 0, 0, 0); } .content:after { left: 2px; text-shadow: -1px 0 red; animation: glitch-anim-1 2s infinite linear alternate-reverse; } .content:before { left: -2px; text-shadow: 2px 0 blue; animation: glitch-anim-2 3s infinite linear alternate-reverse; }
lensky
пример смотреть на весь экран

Ответ 2



Не хотел я jQuery применять но не нашёл другого выхода ... реализация второго скрина $("header").append("
"); //fill div with clone of real header $("h1.glitched").clone().appendTo(".glitch-window"); * { -webkit-box-sizing: border-box; box-sizing: border-box; } body { font-family: 'Raleway', sans-serif; background: #F9F8F8; } header.header { position: absolute; top: 50%; left: 0; width: 100%; -webkit-transform: translateY(-50%); transform: translateY(-50%); } header.header h1 { font-size: 8rem; color: #222222; text-align: center; margin-top: 0; text-transform: uppercase; font-weight: 900; } .glitch-window { position: absolute; top: 0; left: -2px; width: 100%; color: #222222; text-shadow: 2px 0 #F9F8F8, -1px 0 yellow, -2px 0 green; overflow: hidden; animation: crt-me 2500ms infinite linear alternate-reverse; } @-webkit-keyframes crt-me { 0% { clip: rect(31px, 9999px, 94px, 0); } 10% { clip: rect(112px, 9999px, 76px, 0); } 20% { clip: rect(85px, 9999px, 77px, 0); } 30% { clip: rect(27px, 9999px, 97px, 0); } 40% { clip: rect(64px, 9999px, 98px, 0); } 50% { clip: rect(61px, 9999px, 85px, 0); } 60% { clip: rect(99px, 9999px, 114px, 0); } 70% { clip: rect(34px, 9999px, 115px, 0); } 80% { clip: rect(98px, 9999px, 129px, 0); } 90% { clip: rect(43px, 9999px, 96px, 0); } 100% { clip: rect(82px, 9999px, 64px, 0); } } @keyframes crt-me { 0% { clip: rect(31px, 9999px, 94px, 0); } 10% { clip: rect(112px, 9999px, 76px, 0); } 20% { clip: rect(85px, 9999px, 77px, 0); } 30% { clip: rect(27px, 9999px, 97px, 0); } 40% { clip: rect(64px, 9999px, 98px, 0); } 50% { clip: rect(61px, 9999px, 85px, 0); } 60% { clip: rect(99px, 9999px, 114px, 0); } 70% { clip: rect(34px, 9999px, 115px, 0); } 80% { clip: rect(98px, 9999px, 129px, 0); } 90% { clip: rect(43px, 9999px, 96px, 0); } 100% { clip: rect(82px, 9999px, 64px, 0); } }

lensky



Превратить CSS clip-path со смешанными (фиксированными и процентными) значениями в SVG clip-path

#css #svg #clip_path


Есть картинка карточки с градиентом и обрезанным уголком, полученным с помощью clip-path:



.card {
  width: 200px;
  height: 200px;
  background: linear-gradient(to bottom, blue, green);
  clip-path: polygon(20px 0, 100% 0, 100% 100%, 0 100%, 0 20px);
}
Обрезанный угол должен иметь фиксированный размер вне зависимости от размера карточки, поэтому я использую фиксированные размеры (в пискелях) для обрезания угла. Но clip-path имеет не самую лучшую поддержку браузеров, поэтому я попытался превратить этот HTML/CSS в SVG. .container { width: 200px; height: 200px; }
Но проблема в том, что я не могу сделать так, чтобы обрезанный угол иметь фиксированный размер, независящий от размера всей картинки.


Ответы

Ответ 1



Этот вариант уже озвучивал в комментариях @UbuntuUser , но прошли почти сутки поэтому: var widthInput = document.querySelector('[name=width]'), image = document.querySelector('image'); widthInput.addEventListener('input', function() { image.width.baseVal.value = this.value; }); body { background-color: #ddd; } svg { width: 470px; height: 300px; outline: 1px solid; } input{ vertical-align:top; }

Ответ 2



Для моего случая озвученного в вопросе решение будет таким .container { width: 200px; height: 200px; } svg { width: 100%; height: 100%; }


Ответ 3



Для сохранения фиксированного размера уголка, вы не можете использовать viewBox SVG Просто обрежьте угол, который вам нужен, и сделайте так, чтобы другие углы были вытянуты так, чтобы clippath покрывал любой размер, который вам может понадобиться. В приведенном ниже примере я увеличил значение Clippath до (10000,10000). Здесь мы применяем градиент к 100% x 100% . Это нужно, чтобы градиент всегда масштабировался по размеру экрана. Затем мы применяем clippath к прямоугольнику, чтобы получить вырез. html, body { height: 100%; } .container { width: 50%; height: 50%; }
Источник ответа: @Paul LeBeau

среда, 5 февраля 2020 г.

Картинка и clip-path

#css #svg #clip_path


Помогите обрезать изображение в форме "волны" с помощью clip-path. Внизу пример как
хотелось бы. 


    


Ответы

Ответ 1



Писал ответ два дня, никак не мог заставить работать градиент в сниппете под морской волной. Приложение прекрасно работает во всех современных браузерах, но не хочет работать градиент только здесь в сниппете. Решение полностью адаптивно. Скачайте файл и у вас будет всё работать! clip-path с помощью правил CSS рисует (вырезает) только прямыми отрезками. Поддержки кривых в css пока нет. Поэтому для реализации вашей "волны" без clipPath SVG не обойтись. Зато решение будет полностью адаптивно! * { margin:0; padding:0; } .comm { width:100%; height:100%; position: relative; background: linear-gradient(to top, #f0f9ff 0%,#cbebff 47%,#a1dbff 100%); } .container { width:100%; height:189; position: absolute; top:0; }


Ответ 2



Пишешь путь для волны в SVG, обозначаешь его как и используешь его потом в CSS. Позаимствовал код волны из соседнего примера. body { margin: 0; } .bg { width: 1020px; background: linear-gradient(0deg, #ff0777, #7c00ff); } .clip { height: 300px; background-color: #fff; clip-path: url(#wave); }


Ответ 3



Это можно (в данном случае path) реализовать с помощью любого векторного редактора(Inkscape, Illustrator etc.) * { margin: 0; padding: 0; } body { display: flex; justify-content: center; align-items: center; }

суббота, 11 января 2020 г.

CSS блоки нестандартной формы

#html #css #вёрстка #layout #clip_path




Верстаю уже давно, но такой блок первый раз вижу. Гуглил, не нашел там ничего особо.
Как можно такое сверстать ?
    


Ответы

Ответ 1



Да собственно наука не сложная Открываем векторный редактор и обводим декоративные фигуры и группируем их это будет типа основы для нашего паттерна Дальше ищем нужное изображение, я взял размер из головы 300х300 и получаем итоговый вариант А дальше обычный html: https://codepen.io/topicstarter/pen/KjqMPg Если что то не ясно спрашивайте И собственно всё

четверг, 9 января 2020 г.

Как нарисовать через css clip-path (или другим способом) ровную дугу внутрь блока?

#clip_path




Сейчас у меня стоит clip-path: polygon(50% 0%, 100% 0, 100% 100%, 70% 90%, 44% 87%,
23% 91%, 0 99%, 0 0);
Есть ли программы или сервисы в которых можно нарисовать такое ?
Нашел два сервиса , но оба неподходят под такую задачу.
Первый http://www.cssplant.com/clip-path-generator .
Второй https://bennettfeely.com/clippy/.
    


Ответы

Ответ 1



.block { position: relative; width: 300px; height: 200px; background: red; } .block::after { display: block; width: 100%; height: 80px; content: ""; position: absolute; bottom: -40px; left: 0; background: white; border-radius: 50%; }


воскресенье, 29 декабря 2019 г.

Как создать криволинейную форму clipPath

#html #css #svg #clip_path


Для обрезки изображения используется clipPath 

//HTML

   


//CSS
.clip-svg-inline2 {
  -webkit-clip-path: url("#clip-polygon2");
  clip-path: url("#clip-polygon2");
}
//SVG

        
            
                
            
        
    


https://jsfiddle.net/oxjatd5q/

Все работает. Но вопрос - возможно ли вместо polygon использовать свою форму, подключить
код из собственного SVG или каким либо еще образом обрезать изображение именно по нарисованной
фигуре. 

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


Ответы

Ответ 1



Чтобы получить точный контур, по которому будет вырезаться изображение необходимо сделать следующие шаги: Загрузить картинку в векторный редактор с помощью файла svg и тегов В векторном редакторе С помощью инструмента рисовать кривые Безье (цифра 1 на рисунке) нанести на контур узловые точки Выделить узловые точки (цифра 2) для появления рычагов управления, с помощью которых будем корректировать форму кривой Преобразовать узловые точки в автоматически сглаженные. Сохраняем файл в векторном редакторе и забираем из него формулу патча, которая будет использоваться как clip-path, который точно повторяет экран TV SVG clipPath .container{ width:100%; height:100%; } svg image { clip-path:url(#clip1); }
Вырезаем другую картинку .container{ width:100%; height:100%; } svg image { clip-path:url(#clip1); }
SVG Mask С масками можно получить более интересные варианты Для справки можно почитать статью - Практические примеры применения масок svg Вырезаем как clipPath, но оставляем полупрозрачным окружающий фон .container{ width:100%; height:100%; }
Другой вариант В этом варианте вырезается экран и показывается фон, который лежит ниже и одновременно показывается сам TV. .container{ width:100%; height:100%; }
Пример с анимацией изображения TV Добавляются две строчки анимации,- горизонтального и вертикального перемещения фоновой картинки .container{ width:100%; height:100%; }


Ответ 2



В clip-path можно поместить любой path. В path достаточно методов для рисования, в том числе кривые безье и дуги. html, body, main { margin: 0; height: 100%; } svg { width: 10em; float: right; position: relative; z-index: 1; } main { background: linear-gradient(to bottom, green, blue); clip-path: url(#heart-clip); }
PS: Данный пример не будет работать в EDGE и IE.

Ответ 3



Пример автора вопроса Чтобы заработало, нужно было убрать clipPathUnits="objectBoundingBox" так как при этом параметре путь вычисляется в процентах или в долях от единицы Подставил патч, полученный в первом ответе .clip-svg-inline2 { display: block; -webkit-clip-path: url("#clip-polygon2"); clip-path: url("#clip-polygon2"); } PS: Данный пример не будет работать в EDGE && IE

пятница, 20 декабря 2019 г.

Как создать блок дугой? (с картинкой - примером) [дубликат]

#javascript #css #wordpress #div #clip_path


        
             
                
                    
                        
                            This question already has an answer here:
                            
                        
                    
                
                        
                            Как нарисовать через css clip-path (или другим способом)
ровную дугу внутрь блока?
                                
                                    (1 ответ)
                                
                        
                                Закрыт 1 год назад.
            
                    
Как создать блок дугой (внутрь блока) (потратил 5 часов на решение задачи и не нашел
ответа).

Пользуюсь WordPress/css.

Пример 


    


Ответы

Ответ 1



Как один из вариантов: div { margin: 50px; width: 100px; height: 50px; border: 2px solid red; border-radius: 50% 50% 0 0 / 100% 100% 0 0; border-bottom: 0; transform: rotate(30deg); }


Ответ 2



Это можно сделать на SVG:

Ответ 3



Самое первое что нужно это некий блок который перекроет изображение, для этого воспользуемся приблудой из css3 border-radius:16em/1em; смотрим сниппет img { display: block; max-width: 100%; max-height: 100%; } .img { width: 640px; margin: 50px auto; position: relative; } .img:after { content: ""; display: block; width: 100%; height: 50px; background: #fff; border-radius: 16em/1em; position: absolute; bottom: -25px; } .img:before { content: ""; display: block; width: 100%; height: 50px; background: #fff; border-radius: 16em/1em; position: absolute; top: -25px; } .bullet { margin: 50px; width: 100px; height: 50px; border: 2px solid red; border-radius: 50% 50% 0 0 / 100% 100% 0 0; border-bottom: 0; transform: rotate(30deg); position: absolute; top: 30px; left: 50%; } .bullet:before { content: ""; border-left: 10px solid transparent; border-right: 10px solid red; border-top: 10px solid transparent; border-bottom: 10px solid transparent; position: absolute; left: -12px; top: 50px; transform: rotate(-80deg); }
и как видно я вставил изображение в блок который родитель для псевдо элементов, вот псевдо элмементами я задал скругление

воскресенье, 15 декабря 2019 г.

Как сделать clip-path (-webkit-) кроссбраузерным?

#html5 #сss3 #clip_path


На Toster задали вопрос как создать такую вёрстку (скрин):


Разумеется я это сделал (топорно):



* {
  margin: 0;
  padding: 0;
}
section {
  display: table;
  width: 950px;
  min-width: 950px;
  max-width: 950px;
  margin: auto;
}
span {
  display: inline-block;
  padding: 90px;
  background: red;
  -webkit-clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
  clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
}
.wrapper2 {
  margin: -46px 91px;
}
.wrapper3 {
  margin-left: 180px;
  margin-top: 1px;
}
Но больше всего раздражает что это не кроссбраузерно , каким образом можно добиться что бы пример работал везде ? http://codepen.io/Geyan/pen/OXKQVo?editors=110


Ответы

Ответ 1



Сделал, без clip-path, за счет наклоненных субэлементов. * { font-family: sans-serif; font-size: 16px; } .btn { background-color: #fb1; border-radius: 4px; border: 1px solid #707020; color: #000; font-size: 12px; padding: 6px 15px; text-decoration: none; transition: background-color 0.1s; } a.btn:hover { background-color: #bada55; } a.btn:active { background-color: #707020; } .hexagon { background-color: #888; background-position: center; display: inline-block; height: 110px; position: relative; width: 190px; z-index: 0; } .hexagon.bg-1 { background-image: url('http://lorempixel.com/g/220/220/nightlife/1'); } .hexagon.bg-2 { background-image: url('http://lorempixel.com/g/220/220/nightlife/2'); } .hexagon.bg-3 { background-image: url('http://lorempixel.com/g/220/220/nightlife/3'); } .hexagon.bg-4 { background-image: url('http://lorempixel.com/g/220/220/nightlife/4'); } .hexagon.bg-5 { background-image: url('http://lorempixel.com/g/220/220/nightlife/5'); } .hexagon.bg-6 { background-image: url('http://lorempixel.com/g/220/220/nightlife/6'); } .hexagon.bg-7 { background-image: url('http://lorempixel.com/g/220/220/nightlife/7'); } .hexagon.bg-8 { background-image: url('http://lorempixel.com/g/220/220/nightlife/8'); } .hexagon.bg-9 { background-image: url('http://lorempixel.com/g/220/220/nightlife/9'); } .hexagon > .face1, .hexagon > .face2 { backface-visibility: hidden; background: inherit; height: 100%; left: 0; overflow: hidden; position: absolute; top: 0; width: 100%; z-index: -1; } .hexagon > .face1:before, .hexagon > .face2:before { background: inherit; content: ''; height: 220px; left: -15px; position: absolute; top: -50%; transform-origin: center; width: 220px; z-index: -2; } .hexagon > .face1 { transform: rotate( 60deg); } .hexagon > .face1:before { transform: rotate(-60deg); } .hexagon > .face2 { transform: rotate(-60deg); } .hexagon > .face2:before { transform: rotate( 60deg); } .hexagon:after, .hexagon > .face1:after, .hexagon > .face2:after { background-color: rgba(0, 50, 100, 0.5); content: ''; height: 100%; left: 0; position: absolute; top: 0; width: 100%; z-index: -2; } .hexagon > .body { display: table; height: 100%; width: 100%; } .hexagon-body { display: table-cell; padding: 0 20px 20px; text-align: center; vertical-align: bottom; white-space: normal; } .hexagon-body > p { color: #fff; font-weight: bold; margin: 0 0 12px; text-shadow: 0 0 4px #000; } .hexagon-row { margin-top: 54px; white-space: nowrap; } .hexagon-row.four { margin-left: 0; } .hexagon-row.three { margin-left: 97px; } .hexagon-row.two { margin-left: 194px; } .hexagon-row.one { margin-left: 291px; } .hexagon-container { padding: 6px 0 54px; }

Ремонт квартир

Заказать

Ремонт коттеджей и домов

Заказать

Ремонт небоскребов и дворцов

Заказать

Ремонт коммерческих и производственных помещений

Заказать

Ремонт

Заказать

Ремонт

Заказать

Ремонт

Заказать

Ремонт

Заказать

Ремонт

Заказать

Ремонт

Заказать

Ремонт квартир

Заказать

Ремонт коттеджей и домов

Заказать

Ремонт небоскребов и дворцов

Заказать

Ремонт коммерческих и производственных помещений

Заказать

Текст следующей секции

Или посмотреть код на jsfiddle
.hexagon здесь - прямоугольник размерами 190px*110px. Где: 190px - ширина шестигранника от одной грани до другой 110px - длина грани шестигранника ("толщина" прямоугольника) .face1 и .face2 - прямоугольники таких же размеров, но наклоненные - .face1 вправо на 60 градусов, .face2 - влево. .hexagon.bg-1 { background-image: url('http://lorempixel.com/g/220/220/nightlife/1'); } .hexagon > .face1, .hexagon > .face2 { background: inherit; } .hexagon > .face1:before, .hexagon > .face2:before { background: inherit; } .face1 и .face2 наследуют свойство background-image от .hexagon за счет background: inherit. .hexagon > .face1, .hexagon > .face2 { overflow: hidden; } .hexagon > .face1:before, .hexagon > .face2:before { height: 220px; left: -15px; position: absolute; top: -50%; transform-origin: center; width: 220px; } .hexagon > .face1 { transform: rotate( 60deg); } .hexagon > .face1:before { transform: rotate(-60deg); } .hexagon > .face2 { transform: rotate(-60deg); } .hexagon > .face2:before { transform: rotate( 60deg); } :before-блоки - квадратные c размером в 220px, выровненные по центру относительно блоков размером 190px*110px. 220px - это расстояние от одного угла шестигранника до противоположного. Таких размеров оптимально брать и изображение на фон. :before-блоки заполняются тем же фоном, что и .hexagon, но фон специально смещается так, чтобы устранить эффект поворота блока. Например, .face1 поворачивается на 60 градусов вправо, а фон для него - на 60 градусов влево. Таким образом при наложении фона .hexagon на фон .face1 и .face2 не видно искажений и швов (швы смягчаются за счет свойства backface-visibility: hidden;). .hexagon { z-index: 0; } .hexagon > .face1, .hexagon > .face2 { z-index: -1; } .hexagon > .face1:before, .hexagon > .face2:before { z-index: -2; } .hexagon:after, .hexagon > .face1:after, .hexagon > .face2:after { background-color: rgba(0, 50, 100, 0.5); content: ''; height: 100%; left: 0; position: absolute; top: 0; width: 100%; z-index: -2; } :after-блоки затемняют и придают определенный оттенок изображению на фоне. .hexagon > .body { display: table; height: 100%; width: 100%; } .hexagon-body { display: table-cell; vertical-align: bottom; } Контент в шестиграннике размещается в .body > .hexagon-body. display: table и table-cell выравнивают контент по нижнему краю .hexagon. Если посмотреть ваш пример, можно заметить - кнопки расположены в одну линию, а многострочный текст идет от кнопки вверх. Этого же эффекта можно добиться, задав для .hexagon-body абсолютное позиционирование и разместив его по нижнему краю. В этом случае уже не понадобится контейнер .body, но в этом случае рендер контента будет происходить вне основного потока, плюс изменится принцип выравнивания контента в экстремальном случае. Если при table-cell текст занимает столько строк, что не помещается в отведенное ему пространство до верха .hexagon - весь контент начинает выравниваться от верхнего края вниз. Это видно в моем примере - у крайнего правого шестигранника кнопка расположена ниже. При position: absolute текст продолжит уходить вверх, кнопка будет оставаться на месте. .hexagon-row { margin-top: 54px; white-space: nowrap; } .hexagon-row.four { margin-left: 0; } .hexagon-row.three { margin-left: 97px; } .hexagon-row.two { margin-left: 194px; } .hexagon-row.one { margin-left: 291px; } margin-top корректирует вертикальное выравнивание каждой новой строки с шестигранниками. white-space: nowrap; гарантирует, что шестигранники не будут переноситься на следующую строку при нехватке ширины у контейнера. Номерные классы означают количество шестигранников в строке. Используются для выравнивания по-горизонтали. С такими классами можно строить сетки не только неизбежно сужающиеся, но любых форм (видно в примере). .hexagon-container { padding: 6px 0 54px; } Корректируем отступ до верхней строки и после нижней.

суббота, 14 декабря 2019 г.

Responsive clip-path

#css #css3 #svg #адаптивная_верстка #clip_path


В следующем примере блок main (синезелёный градиент) обрезается при помощи clip-path
и принимает форму сердечка. Однако видно, что он обрезается в масштабе 1:1, а хотелось
бы, чтобы форма обрезки растягивалась по размеру блока (по аналогии с тем, как у background-size
работает cover, contain или 100% 100%).

https://jsfiddle.net/a5goLyds/



html, body, main {
  margin: 0;
  height: 100%;
}

svg {
  width: 10em;
  float: right;
  position: relative;
  z-index: 1;
}

main {
  background: linear-gradient(to bottom, green, blue);
  clip-path: url(#heart-clip);
}

  

  
    
  



Ответы

Ответ 1



К сожалению я не нашёл clip-path генераторов, которые позволяли бы рисовать кривыми линиями. Есть генераторы, которые рисуют прямыми линиями по узловым точкам: https://codepen.io/jh3y/pen/XqVQqa http://bennettfeely.com/clippy/ Для многоугольника получаю вот такие значения clip-path: polygon(50% 0%, 80% 10%, 100% 35%, 100% 70%, 80% 90%, 50% 100%, 20% 90%, 0% 70%, 0% 35%, 20% 10%); Преобразую для svg clip-path в доли от единицы: Чтобы получить масштабируемый clip-path, например при наведении курсора, нужно менять размер изображения в сторону увеличения, соответственно увеличится и clip-path, обрезая это изображение. svg {} main { width: 15%; height: 15%; background: linear-gradient(to bottom, green, blue); clip-path: url(#heart-clip); transition: 1s; } main:hover { width: 100%; height: 100%; }


Ответ 2



Ничего не меняя в авторском примере - ввожу туда: Итог: html, body, main { margin: 0; height: 100%; } svg { width: 10em; float: right; position: relative; z-index: 1; } main { background: linear-gradient(to bottom, green, blue); clip-path: url(#heart-clip); }
В результате можно добиться любой пропорции и положения патча, регулируя лишь transform="scale(what), translate(x y)" Однако это ещё не всё. Там, где было , добавим clipPathUnits="objectBoundingBox", но при этом не забудем подкорректировать scale(), чтобы результат от "d" всегда был меньше единицы, как у Александра в полигоне. - И вот оно, долгожданное счастье! Responsive clip-path!!! В песочнице будет легче менять размеры рабочей области, чтобы убедиться в искомой "респонсивности" элемента. Но пробуем описать его и здесь: html, body { margin: 0; background: repeating-linear-gradient(45deg, #666, #222, #666, #ea8, #666, #222, #666, #8ce, #666 4%) fixed; } svg { width: 10rem; float: right; position: relative; z-index: 1; } main { height: 100vw; clip-path: url(#heart-clip); background: linear-gradient(to bottom, blue, red, green, transparent 70%); }


Ответ 3



Я бы реализовал так, а градиент уже реализовал бы в самом SVG html, body { width: 100%; height: 100%; background: #242424; } main { width: 100%; height: 100%; background-image: url('data:image/svg+xml, );'); background-repeat: no-repeat; background-size: 100% 100%; }


суббота, 7 декабря 2019 г.

Есть ли способ на css это реализовать более красиво?

#css #clip_path


Увидел на просторах интернета вот такой эффект для текста на  svg, и судя по названию
понял что этот эффект называется слешед.

Решил его реализовать на чистом css без вкусного svg



и вот что получилось :



html,
body {
  height: 100%;
}

body {
  -webkit-transform: rotate(-5deg);
  -moz-transform: rotate(-5deg);
  -o-transform: rotate(-5deg);
  -ms-transform: rotate(-5deg);
  transform: rotate(-5deg);
}

.lensky {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  text-shadow: 3px 3px 3px rgba(0, 0, 0, 0.5);
}

.lensky .top,
.lensky .bottom {
  text-align: center;
  font: 62px/100px arial;
  text-transform: uppercase;
  text-align: center;
  overflow: hidden;
  color: #000;
}

.lensky .top:before,
.lensky .bottom:before {
  content: attr(title);
  -webkit-transform: rotate(5deg);
  -moz-transform: rotate(5deg);
  -o-transform: rotate(5deg);
  -ms-transform: rotate(5deg);
  transform: rotate(5deg);
}

.lensky .top {
  position: absolute;
  top: 0;
  left: 5px;
  right: 0;
  bottom: 50%;
}

.lensky .top:before {
  position: absolute;
  bottom: -50px;
  left: 0;
  right: 0;
}

.lensky .bottom {
  position: absolute;
  top: 50%;
  left: 0;
  right: 5px;
  bottom: 0;
}

.lensky .bottom:before {
  position: absolute;
  top: -50px;
  left: 0;
  right: 0;
}
Моё мнение такое,- что выглядит это как-то криворуко, можно ли как то это улучшить или сделать более красиво ?


Ответы

Ответ 1



С помощью clip-path так: .gorlachev { text-shadow: 3px 3px 3px rgba(0, 0, 0, 0.25); font: 62px arial; position: relative; display:inline-block; } .gorlachev:before, .gorlachev:after { content: attr(title); clip-path: polygon(0 100%, 0 65%, 110% 45%, 110% 100%); } .gorlachev:before { clip-path: polygon(0 65%, 0 0, 100% 0, 110% 45%); /* 110 чтобы тень не перекывала */ position: absolute; padding-left: 2%; }


Ответ 2



* { margin: 0; padding: 0; } html, body { height: 100%; width: 100%; background: #0c0c0c; display: flex; justify-content: center; align-items: center; } .lensky { height: 150px; width: 400px; background: transparent; overflow: hidden; position: relative; color: #331; text-align: center; font-size: 100px; font-family: monospace; font-weight: 900; letter-spacing: 10px; text-shadow: 1px 1px 30px #9ff; } .lensky:before, .lensky::after { background: transparent; position: absolute; content: attr(title); height: 100%; width: 100%; top: -1px; left: 0; line-height: 1.3; clip-path: polygon(0 0, 100% 0, 100% 45%, 0 55%); } .lensky::after { top: 1px; clip-path: polygon(0 55%, 100% 45%, 100% 100%, 0 100%); transform: translateX(-3px); }


четверг, 5 декабря 2019 г.

Сложный polygon на препроцессорах

#svg #sass #scss #less #clip_path


Необходим специфический clip-path: polygon() по точкам.
Какой-никакой пример в коде ниже.



.wrapper {
  width: 960px;
  height: 720px;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0 auto;
  background-image: url(http://beerhold.it/960/722);
  background-repeat: no-repeat;
  backgorund-position: center center;
  position: relative;
}

.key {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 10em;
  height: 10em;
  border: 2em solid rgba(255, 255, 255, .3);
  border-radius: 10em;
}

.block1,
.block2 {
  position: absolute;
  top: 0;
  width: 480px;
  height: 720px;
}

.block1 {
  left: 0;
  background-color: rgba(255, 0, 0, .2);
}

.block2 {
  right: 0;
}
.block3 {
  top: 0;
  width: 100%;
  height: calc(50% - 7em);
  background: rgba(0, 0, 0, 0.7);
  
}
.block4 {
  top: calc(50% - 7em);
  background: rgba(0, 0, 0, 0.7);
  width: 100%;
  height: 14em;
  clip-path: polygon(1% 0%, 100% 0%, 100% 100%, 0% 100%, 8% 94%, 15% 88%, 22% 78%,
29% 69%, 34% 60%, 34% 48%, 33% 36%, 30% 22%, 23% 14%, 12% 7%);
}
.block5 {
  bottom: 0;
  height: calc(50% - 7em);
  width: 100%;
  background: rgba(0, 0, 0, 0.7);
}
Как заметно, на данный момент это просто кривая, вогнутая в фигуру. Задача нарисовать полуокружность(или максимально приблизить к ней), вогнутую в фигуру. В моём понимании для этого нужны less, sass и прочее. А также sin, cos. Плохо понимаю с чего и как начать, не сталкивался с этим. Спасибо @AndreyFedorov за кусок его кода использованный здесь (!) согласен и на любые другие варианты, дающие такой же результат.


Ответы

Ответ 1



Необходимые координаты в path: 120 — радиус круга; если надо уменьшить, то уменьшать обе координаты 240 — высота блока 1000 — длина блока При необходимости повернуть вырез, воспользуйтесь атрибутом transform="rotate()" * { margin: 0; padding: 0; } .btn { position: absolute; width: 240px; height: 240px; border-radius: 50%; border: 10px solid rgba(255,255,255,0.4); top: 130px; left: -120px; background: transparent; box-sizing: border-box; } .btn:hover { border-color: rgba(255,255,255,0.7); } .image { background-image: url(https://s3.amazonaws.com/finely/resources/test.jpg); background-size: cover; background-position: center; width:100%; height:500px; } .image__right { position: absolute; width:50%; right: 0; top: 0; } .placeholder { height:130px; background: rgba(0,0,0,0.5); } .border-mask { height: 240px; background: rgba(0,0,0,0.5); -webkit-clip-path: url(#circleClip); clip-path: url(#circleClip); }


воскресенье, 1 декабря 2019 г.

Сделать вырез на css

#css #clip_path


Пытаюсь вырезать буквы в div на чистом CSS, использую — clip-path, но  полностью
вырезать не получается. 



body {
  background: #262626;
}

.education-feedback {
  padding: 100px 0;
  background-image: url('../img/back-bot.jpeg');
  background-size: cover;
  background-position: 10%;
  position: relative;
}

.line-trans {
  position: absolute;
  height: 20px;
  left: 5%;
  top: 3px;
  transform: rotate(-47deg);
}

.line-trans img {
  width: 316px;
  height: 17px;
}

.form_feedback {
  width: 500px;
  background-color: #fff;
  margin: 100px auto;
  text-align: center;
  padding: 50px 0;
  clip-path: polygon(21% 31%, 10% 5%, 0 40%, 0 100%, 20% 100%, 48% 100%, 100% 100%,
100% 80%, 100% 42%, 100% 0, 80% 0%, 31% 0);
}

.form_feedback input {
  display: block;
  margin: 50px auto;
  height: 50px;
  width: 300px;
  border: 1px solid #059805;
  padding: 0 20px;
}

.form_feedback .btn-order {
  background: linear-gradient(45deg, #059805 33%, #4dbd4d 66%, #1db11d);
  color: #fff;
  border: navajowhite;
  padding: 15px 80px;
  text-transform: uppercase;
  font-weight: 600;
}

.name_feddback {
  position: relative;
}

.name_feddback img {
  position: absolute;
  right: 22%;
  bottom: 6px;
}

.phone_feedback {
  position: relative;
}

.phone_feedback img {
  position: absolute;
  right: 22%;
  bottom: 6px;
}

.email_feedback {
  position: relative;
}

.email_feedback img {
  position: absolute;
  right: 22%;
  bottom: 12px;
}

Вырез буквы N и M -


Ответы

Ответ 1



Псевдоэлементы спешат на помощь! body { background: url("https://images.unsplash.com/photo-1529926279675-c72f1da4eb2a?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=86eceef4b033a911a312516dc81ccc58&auto=format&fit=crop&w=1041&q=80"); background-size: cover; } .line-trans { position: absolute; height: 20px; left: 5%; top: 3px; transform: rotate(-47deg); } .line-trans img { width: 316px; height: 17px; } .education-feedback { padding: 10px 0; position: relative; } .form_feedback { position: relative; width: 500px; height: 300px; background-color: #fff; margin: 100px auto; text-align: center; padding: 0 0 30px 0; } .form_feedback::before { content: ""; position: absolute; top: -50px; left: 0; border-left: 26px solid transparent; border-right: 20px solid transparent; border-bottom: 50px solid white; } .form_feedback::after { content: ""; position: absolute; top: -80px; left: 0; border-left: 26px solid white; border-bottom: 50px solid transparent; } .angle:first-child { position: absolute; top: -80px; right: 0; background-color: white; width: calc(100% - 85px); height: 80px; } .angle:first-child::before { content: ""; position: absolute; top: 0; left: -15px; background-color: white; width: 30px; height: inherit; transform: skew(-20deg); } .angle:first-child::after { content: ""; position: absolute; left: -60px; border-left: 26px solid transparent; border-right: 20px solid transparent; border-top: 50px solid white; height: inherit; } .angle:last-child { position: absolute; bottom: -80px; left: 0; background-color: white; width: calc(100% - 85px); height: 80px; } .angle:last-child::before { content: ""; position: absolute; top: 0; right: -15px; background-color: white; width: 30px; height: inherit; transform: skew(-20deg); } .angle:last-child::after { content: ""; position: absolute; top: 0; right: -70px; border-left: 20px solid transparent; border-right: 20px solid transparent; border-top: 45px solid white; } .triangle { position: absolute; top: 0; right: -85px; border-right: 13px solid white; border-bottom: 40px solid transparent; } .triangle::before, .triangle::after { content: ""; position: absolute; } .triangle::before { top: 30px; left: -14px; border-left: 13px solid transparent; border-right: 13px solid transparent; border-bottom: 30px solid white; } .triangle::after { border-left: 17px solid transparent; border-right: 17px solid transparent; border-bottom: 50px solid white; top: 30px; left: -59px; } .add { position: absolute; top: 60px; right: -84px; width: 20px; height: 20px; background-color: white; } .add::before { content: ""; position: absolute; left: -10px; background-color: inherit; width: inherit; height: inherit; transform: skew(-23deg); } .add::after { content: ""; position: absolute; left: -28px; bottom: 0; background-color: inherit; width: inherit; height: 6px; } .form_feedback input { display: block; margin: 50px auto; height: 50px; width: 300px; border: 1px solid #059805; padding: 0 20px; } .form_feedback .btn-order { background: linear-gradient(45deg, #059805 33%, #4dbd4d 66%, #1db11d); color: #fff; border: navajowhite; padding: 15px 80px; text-transform: uppercase; font-weight: 600; } .form_feedback input { display: block; margin: 50px auto; height: 50px; width: 300px; border: 1px solid #059805; padding: 0 20px; } .form_feedback .btn-order { position: relative; background: linear-gradient(45deg, #059805 33%, #4dbd4d 66%, #1db11d); color: #fff; border: navajowhite; padding: 15px 80px; text-transform: uppercase; font-weight: 600; z-index: 1; } .name_feddback { position: relative; } .name_feddback img { position: absolute; right: 22%; bottom: 6px; } .phone_feedback { position: relative; } .phone_feedback img { position: absolute; right: 22%; bottom: 6px; } .email_feedback { position: relative; } .email_feedback img { position: absolute; right: 22%; bottom: 12px; }



Ответ 2



clip-path можно совмещать с calc. Надо просто задать все величины фиксированными (т. е. не в процентах), а для нижнего края при помощи calc вычесть их из 100%. Буква W вверху слева: clip-path: polygon(1em 1em, 2.5em 1em, 3.5em 4em, 4.5em 1em, 5.5em 1em, 6.5em 4em, 7.5em 1em, 9em 1em, 7em 7em, 6em 7em, 5em 4em, 4em 7em, 3em 7em, 1em 1em); Буква M внизу справа получается из неё лёгким преобразованием console.log( "1em 1em, 2.5em 1em, 3.5em 4em, 4.5em 1em, 5.5em 1em, 6.5em 4em, 7.5em 1em, 9em 1em, 7em 7em, 6em 7em, 5em 4em, 4em 7em, 3em 7em, 1em 1em" .replace(/([^ ,]+)(,?)/g, "calc(100% - $1)$2") ) Это всё вставляется в clip-path и дополняется прямоугольником и парой точек: body { background: linear-gradient(to bottom, blue, red); } div { padding: 1em 10em; background: black; color: white; text-align: justify; text-align-last: justify; clip-path: polygon( 0 0, 1em 1em, 2.5em 1em, 3.5em 4em, 4.5em 1em, 5.5em 1em, 6.5em 4em, 7.5em 1em, 9em 1em, 7em 7em, 6em 7em, 5em 4em, 4em 7em, 3em 7em, 1em 1em, 0 0, calc(100% - 1em) calc(100% - 1em), calc(100% - 2.5em) calc(100% - 1em), calc(100% - 3.5em) calc(100% - 4em), calc(100% - 4.5em) calc(100% - 1em), calc(100% - 5.5em) calc(100% - 1em), calc(100% - 6.5em) calc(100% - 4em), calc(100% - 7.5em) calc(100% - 1em), calc(100% - 9em) calc(100% - 1em), calc(100% - 7em) calc(100% - 7em), calc(100% - 6em) calc(100% - 7em), calc(100% - 5em) calc(100% - 4em), calc(100% - 4em) calc(100% - 7em), calc(100% - 3em) calc(100% - 7em), calc(100% - 1em) calc(100% - 1em), 0 0, 0 100%, 100% 100%, 100% 0, 0 0 ); }
Пытаюсь вырезать буквы в div на чистом CSS, использую — clip-path, но полностью вырезать не получается Пытаюсь вырезать буквы в div на чистом CSS, использую — clip-path, но полностью вырезать не получается Пытаюсь вырезать буквы в div на чистом CSS, использую — clip-path, но полностью вырезать не получается


понедельник, 8 июля 2019 г.

Свойство clip-path через свой path

Добрый день уважаемые. Подскажите, пожалуйста как запускать данное свойство по лично нарисованному пути? (Почему то не выходит, хотя на простых фигурах хорошо отрабатывает) Приведу простой пример
.mainBlock{ width: 180px; height: 245px; } svg{ width: 180px; } .block{ width: 180px; height: 245px; border: 1px solid #000; background: url("https://cdn.rawgit.com/BlackStar1991/Pictures-for-sharing-/ad0580ed/code.jpg?raw=true") no-repeat 50% 50%; -webkit-clip-path: url("#part1"); clip-path: url("#part1"); /// не срабатывает? }


Как "порезать" эти два изображения по тем путям которые нарисованы в svg? Буду очень благодарен, если объясните на этом примере


Ответ

Путь надо вставить в . Ну и предварительно изучить как это свойство вообще работает (например, тут или тут), как надо пути составлять и т. д. С вашим текущим путем обрезает как-то странновато.
.mainBlock { width: 180px; height: 245px; } svg { width: 180px; } .block { width: 180px; height: 245px; border: 1px solid #000; background: url("https://cdn.rawgit.com/BlackStar1991/Pictures-for-sharing-/ad0580ed/code.jpg?raw=true") no-repeat 50% 50%; -webkit-clip-path: url("#clip"); clip-path: url("#clip"); }


четверг, 23 мая 2019 г.

Угол под 45 градусов у div

Друзья, может кто-то сталкивался с подобной задачей... Необходимо у div срезать углы (верхний-левый и нижний правый), под углом 45 градусов.
реализовал через clip-path
.corner45top { -webkit-clip-path: polygon(5% -200%, 100% 0%, 100% 100%, 0% 100%, 0% 100%, 0% 100%); clip-path: polygon(5% -200%, 100% 0%, 100% 100%, 0% 100%, 0% 100%, 0% 100%); clip-path: url("#swipe__clip-path"); background-color: #FFFFFF; box-shadow: 0 1px 6px 0 rgba(86,86,86,0.25); }
.corner45bottom { -webkit-clip-path: polygon(0 -100%, 100% 0%, 98% 100%, 0% 100%, 0% 100%, 0% 100%); clip-path: polygon(0 -100%, 100% 0%, 98% 100%, 0% 100%, 0% 100%, 0% 100%); clip-path: url("#swipe__clip-path-bottom"); background-color: #FFFFFF; box-shadow: 0 1px 0 0 rgba(86,86,86,0.25); }

Но все эти "красивости" никак не работают в браузере EDGE, есть ли какой-то простой вариант вылечить это? Мог бы сделать углы например картинкой, но за блоками есть background-image цветной(


Ответ

Для этого нам на помощь приходит SVG , подходит такой вариант ?

четверг, 16 мая 2019 г.

Как сделать скошенный угол у прямоугольника?

Необходимо карточке, с border'ом и фоном (всё на css), сделать срез у верхнего левого угла и, чтобы у него был такой же border. Пробовал clip-path. Возможно нужно использовать псевдоэлемент или SVG?

.Card { margin: 23px 0 0 80px; width: 320px; height: 480px; border: 4px solid #2ea8e6; border-radius: 10px; background-color: #f2f2f2; overflow: hidden; float: left; position: relative; clip-path: polygon(15% 0, 100% 0, 100% 0, 100% 100%, 100% 100%, 0 100%, 0 100%, 0 10%); }


Ответ

Решение через CSS3
Это можно сделать при помощи CSS3 clip-path, но согласно документации в Safari (WebKit), в Edge и в Internet Explorer это в данное время работать не будет.
Для того чтобы это сделать нам понадобится 2 прямоугольника (div), которые лежат один в другом. Внутренний прямоугольник расположен с помощью position: absolute сверху, а внешний выступает в качестве обводки (border), т.к. на 4px (x2) больше внутреннего. Оба они обрезаются с помощью CSS3 clip-path
Подробнее о свойстве clip-path читайте тут
.card-border { margin:14px; position: relative; width: 328px; height: 488px; background-color: #2ea8e6; border-radius: 14px; clip-path: polygon(15% 0, 100% 0, 100% 100%, 0 100%, 0 10%); } .card { position: absolute; top: 4px; /* соответствует ширине border */ left: 4px; /* соответствует ширине border */ width: 320px; /* container width - (ширина border * 2) */ height: 480px; /* container height - (ширина border * 2) */ background-color: #f2f2f2; border-radius: 11px; clip-path: polygon(14.7% 0, 100% 0, 100% 100%, 0 100%, 0 9.7%); }


Обратите внимание на то, что значения у внутреннего clip-path: polygon должны быть немного меньше.
Решение через SVG
Другое решение с помощью SVG clip-path более предпочтительнее, т. к. работает в большинстве современных обозревателях сети. Вы можете SVG файл применить в качестве background для div, в котором будут ваши данные.