CSS3干货20:CSS3中的形状(shape)及其应用

164 阅读4分钟

形状的应用:shape-outside

shape-outside 使用形状值来定义浮动元素的浮动区域。这个浮动区域决定了行内内容(浮动元素)所包裹的形状。这将使得内联内容会环绕着形状,而不是围绕矩形环绕。

非浮动元素不能用。

可能的值:

/* 关键字值 */
shape-outside: none;   /* 默认 */
shape-outside: margin-box;
shape-outside: content-box;
shape-outside: border-box;
shape-outside: padding-box;
 
/* 形状值 */
shape-outside: circle();
shape-outside: ellipse();
shape-outside: inset(10px 10px 10px 10px);
shape-outside: polygon(10px 10px, 20px 20px, 30px 30px);
 
/* <url> 值 */
shape-outside: url(image.png);
 
/* 渐变值 */
shape-outside: linear-gradient(45deg, rgba(255, 255, 255, 0) 150px, red 150px);
 
/* 全局值 */
shape-outside: initial;
shape-outside: inherit;
shape-outside: unset;

二、经典应用1:文字圆形环绕

有时候,需要让文字环绕图片排版。

这是常见的一种图文排版手法。CSS 中常用浮动来实现该效果。

<div class="box">
    <div class="img">
        <img src="images/4.jpg" width="300" height="300" alt="">
    </div>
    <div class="txt">
        <p>
            小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。
        </p>
        <p>
            “小说”出自《庄子·外物》。
        </p>
        <p>
            人物、情节、环境是小说的三要素。情节一般包括开端、发展、....
        </p>
        <p>
            “小说”一词最早出现于《庄子·外物》:「饰小说以干县令,其于大达亦远矣。」....
        </p>
    </div>
    <div class="clears"></div>
</div>
*{
    margin: 0; padding: 0;
}
 
.clears{
    clear: both; height: 0;  overflow: hidden;  line-height: 0; font-size: 0;
}
.box{
    width: 800px;
    margin-left: auto;
    margin-right: auto;
    margin-top: 30px;
    background: #f2f2f2;
}
.img{
    width: 300px;
    height: 300px;
    overflow: hidden;
}
.txt{
    font-size: 16px;
    line-height: 2;
}

让图片部分浮动起来,即可实现文字环绕。  

.img{
    float: left;
    margin:30px;
}

但是如果把图片部分变成圆形,文字还是围绕“矩形”环绕的。

.img{
    float: left;
    margin:30px;
    border-radius: 100%;
}

要实现“圆形”环绕,需要使用 CSS3 的新属性 shape-outside,规定了文字环绕的形状。

.img{
    float: left;
    margin:30px;
    border-radius: 100%;
    shape-outside:circle();  /* 圆形环绕 */
}

三、经典应用2:任意形状环绕

同样道理,我们可以做出任意形状的文字环绕效果。

<div class="txtBox">
    <div class="img">
        <img src="images/fashion.jpg" alt="">
    </div>
    <div class="txt">
        <p>
            耀眼的金属光泽,独具匠心的外观设计,令宝诗龙的每一处都散发着不拘一格的时尚气息。
        </p>
        <p>
            个性十足的林彦俊也对宝诗龙的饰品青眼有加,在七夕时分亲自演绎了宝诗龙的不凡魅力。
 
        </p>
        <p>
            毫无疑问的,当它的光芒闪耀于脖颈和指间,你便是人群中当仁不让的视觉焦点。
        </p>
        <p>浪漫而性感 Giambattista Valli让繁花盛开</p>
        <p>简单优雅 Stella McCartney打造都市独立女性</p>
        <p>2019秋冬巴黎周回顾 潮流Key Word尽在我手</p>
        <p>都市摩登女郎style LV用各种元素混搭</p>
        <p>那些老佛爷给我们做的包包你有几个?</p>
        <p>浪漫而性感 Giambattista Valli让繁花盛开</p>
        <p>简单优雅 Stella McCartney打造都市独立女性</p>
        <p>2019秋冬巴黎周回顾 潮流Key Word尽在我手</p>
        <p>都市摩登女郎style LV用各种元素混搭</p>
        <p>那些老佛爷给我们做的包包你有几个?</p>
    </div>
   <div class="clears"></div>
</div>
*{
    margin: 0; padding: 0;
}
 
.clears{
    clear: both; height: 0;  overflow: hidden;  line-height: 0; font-size: 0;
}
 
.txtBox{
    margin-top: 50px;
}
 
 
.txtBox{
    width: 1000px;
    height: 687px;
    background: #bda895;
    margin-right: auto;
    margin-left: auto;
}
.img{
    float: left;
    shape-outside: polygon(0 0,368px 0, 425px 226px, 463px 227px ,475px 355px,
    558px  503px ,391px  596px,  440px 687px, 0  687px);
}
.txt{
    color: #fff;
    font-size: 20px;
    line-height: 2;
    padding-top: 30px;
    padding-right: 30px;
}

形状的坐标可以用 PS 等工具,利用参考线,依次查找。

四、兼容性

shape 相关的样式兼容性还不错,除了 IE。现在也没人管 IE 了。