Как я могу создать форму заявки с пунктирной линией с чистым CSS? - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу создать форму заявки (с 4 углами, обрезанными кругами) с чистым CSS, но я столкнулся с некоторыми трудностями, когда пытался добавить для нее границу. Я пытался разобраться с box-shadow, но потерпел неудачу. Я пытаюсь сделать это с двумя стилями 1. У меня может быть 3px граница для всей фигуры, включая закругленные углы 2. У меня может быть граница в 3 пикселя для всей фигуры, но в стиле пунктирной линии

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

.ticket {
    font-family: Arial;
    font-size: 12px;
    font-weight: bold;
    position: relative !important;
    background: #4a4a4a;
    float: left;
    padding: 35px 30px;
    margin: 0 50px 50px 0;

}
.ticket:after {
    content: "";
    position: absolute !important;
    z-index: 100;
    top:0;
    left: 0;
    border-right: #fff 7px solid;
    border-bottom: #fff 7px solid;
    -moz-border-radius: 0 0 20px 0;
    -webkit-border-radius: 0 0 20px 0;
    border-radius: 0 0 20px 0;
  background-color: white;
  
}
 
.ticket:before {
    content: "";
    position: absolute !important;
    z-index: 100;
    top: 0;
    right: 0;
    border-left: #fff 7px solid;
    border-bottom: #fff 7px solid;
    -moz-border-radius: 0 0 0 20px;
    -webkit-border-radius: 0 0 0 20px;
    border-radius: 0 0 0 20px;

}
.ticket a {
    padding: 35px 35px 35px 20px;
    text-decoration: none;
    color: #fff;
    white-space: nowrap;
}
 
.ticket a:hover {color: rgba(0,0,0,0.5);}
.ticket a:after {
    content: "";
    position: absolute !important;
    z-index: 100;
    bottom: 0;
    left: 0;
    border-right: #fff 7px solid;
    border-top: #fff 7px solid;
    -moz-border-radius: 0 20px 0 0;
    -webkit-border-radius: 0 20px 0 0;
    border-radius: 0 20px 0 0;
}
 
.ticket a:before {
    content: "";
    position: absolute !important;
    z-index: 1000;
    bottom: 0;
    right: 0;
    border-left: #fff 7px solid;
    border-top: #fff 7px solid;
    -moz-border-radius: 20px 0 0 0;
    -webkit-border-radius: 20px 0 0 0;
    border-radius: 20px 0 0 0;
}
<div class="ticket"><a href="#">Box A</a></div>
<div class="ticket"><a href="#">Box B</a></div>
<div class="ticket"><a href="#">Box C</a></div>
<div class="ticket"><a href="#">Box D</a></div>

1 Ответ

0 голосов
/ 02 ноября 2018

Вот идея, где вы также можете использовать пунктирную границу на псевдоэлементе, скрывая часть границы от основного элемента:

.ticket {
  font-size: 20px;
  position: relative;
  background: #4a4a4a;
  float: left;
  padding: 35px 30px;
  margin:20px;
  border:4px dotted #fff;
}

.ticket:after,
.ticket:before,
.ticket a:after,
.ticket a:before {
    content: "";
    position: absolute;
    z-index: 1;
    width: 15px;
    height: 15px;
    background: 
      linear-gradient(#fff,#fff) padding-box,
      #4a4a4a;
}
.ticket:after {
  top: -5px;
  left: -5px;
  border-right: #fff 5px dotted;
  border-bottom: #fff 5px dotted;
  border-radius: 0 0 20px 0;
}

.ticket:before {
  top: -5px;
  right: -5px;
  border-left: #fff 5px dotted;
  border-bottom: #fff 5px dotted;
  border-radius: 0 0 0 20px;
}

.ticket a {
  padding: 35px;
  text-decoration: none;
  color: #fff;
}

.ticket a:after {
  bottom: -5px;
  left: -5px;
  border-right: #fff 5px dotted;
  border-top: #fff 5px dotted;
  border-radius: 0 20px 0 0;
}

.ticket a:before {
  bottom: -5px;
  right: -5px;
  border-left: #fff 5px dotted;
  border-top: #fff 5px dotted;
  border-radius: 20px 0 0 0;
}
<div class="ticket"><a href="#">Box A</a></div>
...