2016-05-30 60 views
0

有没有什么办法用css绘制一个形状(下图)?灰色边框样式应该是虚线最重要的是它应该是响应应适应不同大小的屏幕不同的半径)。用css绘制不规则的形状(应该是响应式的)

不好的例子(不响应):

#box { 
 
    position: relative; 
 
    margin: 30px; 
 
    width: 200px; 
 
    height: 100px; 
 
    background: #fff; 
 
    border: 1px dashed #333; 
 
} 
 

 
.corner { 
 
    position: absolute; 
 
    height: 10px; 
 
    width: 10px; 
 
    border: 1px dashed #333; 
 
    background-color: #fff; 
 
} 
 

 
.top-left { 
 
    top: -1px; 
 
    left: -1px; 
 
    border-radius: 0 0 100% 0; 
 
    border-width: 0 1px 1px 0; 
 
}
<div id="box"> 
 
    <div class="corner top-left"></div> 
 
</div>

enter image description here

+0

的背景是什么?它在形状内部和外部都是同一种颜色,是否是纯色? – Harry

+0

@gonewithsin atleast尝试一些代码,并告诉我们你已经尝试过。 –

+0

背景是白色的,边框是灰色的。事实上,这只是一个关于如何绘制像这样的边框的问题。 – GoneWithSin

回答

1

我的建议是去与SVG。这是它的目的。下面是一个例子...

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100%" viewBox="0 0 256 128" enable-background="new 0 0 256 128" xml:space="preserve"> 
    <path fill="#FFFFFF" stroke="#828282" stroke-dasharray="10" stroke-width="5" d="M249.75,121h-242V64c0,0,56.5,4.75,56.5-56.5h185.5V121z" /> 
</svg> 

小提琴:https://jsfiddle.net/6r0hhfsh/

0

我去一个答案,因为它似乎我的评论给你带来了一些想法。

的想法是基于(codepen

p { 
 
    margin: 0; 
 
    text-shadow: 0 0 1px; 
 
    text-align:justify; 
 
} 
 

 
div { 
 
    font-size:2em; 
 
    width: 80%; 
 
    background: white; 
 
    margin: 10% 2em 2em 10%; 
 
    padding: 15px; 
 
    border: 15px dashed gray; 
 
    position: relative; 
 
    mix-blend-mode: multiply; 
 
} 
 

 
div:before { 
 
    padding: calc(3% + 10px); 
 
    float: left; 
 
    content: ''; 
 
} 
 

 
div:after { 
 
    position: absolute; 
 
    content: ''; 
 
    padding: 7%; 
 
    border: inherit; 
 
    border-radius: 50%; 
 
    top: 0; 
 
    left: 0; 
 
    margin: calc(-10% - 7px); 
 
    box-shadow: 0 0 0 15px white, inset 0 0 0 150px white; 
 
} 
 

 
div + div:after { 
 
    background: url(http://lorempixel.com/250/250/people/6) center ; 
 
    box-shadow: 0 0 0 15px white; 
 
} 
 

 
p:before { 
 
    content: ''; 
 
    border-radius: 50%; 
 
    padding: calc(7% + 35px); 
 
    position: absolute; 
 
    background: repeating-linear-gradient(45deg, transparent 0, transparent 20px, gray 20px, gray 45px) bottom right no-repeat ; 
 
    background-size: 35% 39.5%; 
 
    top: -20px;; 
 
    left: -20px; 
 
    margin: -10% 
 
} 
 

 
body { 
 
    background: url(http://lorempixel.com/640/480/nature/6) yellow; 
 
    background-size: cover 
 
}
<div> 
 
    <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. 
 
    Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus 
 
    lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, 
 
    facilisis luctus, metus</p> 
 
</div> 
 

 
<div> 
 
    <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. 
 
    Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus 
 
    lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, 
 
    facilisis luctus, metus</p> 
 
</div>