指定文字浮动区域,动起来的效果棒极了

简介: 指定文字浮动区域,动起来的效果棒极了

常规情况下我们做文字环绕效果,文字通常只能围绕在图片的周围,而且文字的位置是固定的,这样的效果明显很僵硬,而且不够灵活,今天我们就来自定义一个文字浮动区域,让文字动起来,效果更加棒。


先看效果:

image.png

image.png

image.png

image.png

文字环绕


我们先来看一下文字环绕的效果,先上代码:

<div class="wrap">
    <img src="#" alt="">
    <p>
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
        这里有一大堆文字
    </p>
</div>
<style>
    .wrap {
        width: 300px;
    }
    .wrap img {
        width: 100px;
        height: 100px;
        float: left;
    }
</style>

这样就得到了下面的效果:

image.png

可以看到的是,文字环绕在图片的周围,这个就是文字环绕的效果,但是这个效果不是很好,能不能让文字环绕到图片的任意位置呢?答案是可以的,下面我们就来实现这个效果。


shape-outside


在实现这个效果之前我们先来认识一个属性shape-outside,这个属性可以让元素的外形围绕在指定的形状之外;


我们先来看一下shape-outside的属性介绍:


shape-outside用来指定一个元素的外形围绕在指定的形状之外,这个形状可以是一个基本形状,也可以是一个图片,也可以是一个盒子,也可以是一个渐变。

shape-outside = 
  none                              |
  [ <basic-shape> || <shape-box> ]  |
  <image>                           
<shape-box> = 
  <box>       |
  margin-box  
<image> = 
  <url>       |
  <gradient>  
<box> = 
  border-box   |
  padding-box  |
  content-box  
<url> = 
  url( <string> <url-modifier>* )  |
  src( <string> <url-modifier>* )  

这些都是啥呀,看不懂,不想看,我就想用,那就直接上代码:

.wrap img {
  width: 100px;
  height: 100px;
  shape-outside: circle(25px at 50px 50px);
  float: left;
}

image.png

可以看到文字环绕到图片里面了,这个效果没啥可以说的,我们来看看代码做了什么;


就是加了一行shape-outside: circle(25px at 50px 50px);,这个就是应用到circle这个基本形状,25px是半径,50px 50px是圆心的位置,这样就实现了文字环绕到图片里面的效果。


上面使用的circle函数就是一个<basic-shape>


<basic-shape>是基本形状,包括circleellipseinsetpolygon


对于这些不是很熟悉没关系,了解即可:


  • circle:圆形
  • ellipse:椭圆形
  • inset:内嵌
  • polygon:多边形


也就是说文字环绕可以使用这些基本形状,我们直接来看一下多边形的效果:

.wrap img {
    width: 100px;
    height: 100px;
    shape-outside: polygon(50% 0, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%);
    clip-path: polygon(50% 0, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%);
    background-color: #ccc;
    float: left;
}

image.png

可以看到文字环绕成一个五角星的效果,为了显示效果我加上了clip-path属性,这个属性可以裁剪元素的形状,这样就可以更加清晰的看到效果。


<shape-box>是指定一个盒子,这个盒子可以是border-boxpadding-boxcontent-box


这个属性值可以通过box-sizing属性来理解,box-sizing属性可以设置元素的盒模型,有两个值:


  • content-box:默认值,元素的宽高只包含内容的宽高
  • border-box:元素的宽高包含内容的宽高和内边距和边框的宽高


而它多了一个属性值为padding-box,意思就是围绕着这个盒子的内边距来围绕;


我们来看一下padding-box的效果:

.wrap img {
    width: 100px;
    height: 100px;
    shape-outside: padding-box;
    border: 10px solid #ccc;
    padding: 10px;
    background-color: #ccc;
    float: left;
}

image.png

可以看到文字环绕在图片的内边距里面,这个效果应该很少有人会用到,但是这个属性值还是可以了解一下的。

<image>是指定一个图片,这个图片可以是一个url,也可以是一个gradient


这个就非常有趣了,如果我们用图片来做文字环绕的效果,这里我没有准备图片,所以直接用渐变来做演示,如果你有图片可以直接用图片来做演示;


图片的效果就是计算图片的透明的地方,然后文字环绕在图片的透明的地方;


而渐变也是同理,透明的地方会被文字填充,如下:

.wrap img {
    width: 100px;
    height: 100px;
    shape-outside: repeating-linear-gradient(-45deg, transparent, transparent 2em, #ccc 2em, #ccc 4em);
    background-image: repeating-linear-gradient(-45deg, transparent, transparent 2em, #ccc 2em, #ccc 4em);
    float: left;
}

image.png

可以看到的是文字环绕在渐变的透明的地方,这个效果也是非常有趣的,但是遗憾的是并不能见缝插针,而是只会环绕在元素的四周,但是也是可以做很多有趣的效果的,例如:

.wrap img {
    width: 300px;
    height: 300px;
    shape-outside:  repeating-linear-gradient(#ccc, #ccc 1em, transparent 1em, transparent 2.5em);
    background-image:
            repeating-linear-gradient(aquamarine, aquamarine 1em, transparent 1em, transparent 2.5em),
            repeating-linear-gradient(90deg, rosybrown, rosybrown 1em, transparent 1em, transparent 2em);
    line-height: 2em;
    float: left;
}

image.png

一格一格的文字效果也是可以的,让人感觉到非常有趣。


总结


这篇文章主要介绍了shape-outside属性,这个属性可以让文字环绕在元素的周围,这个属性值可以是<basic-shape><shape-box><image>,这个属性值可以让我们做很多有趣的效果;


这篇文章只是简单的介绍了一下shape-outside属性,如果你想了解更多的话,可以参考MDN


目录
相关文章
|
1天前
浮动和定位
浮动和定位
|
1天前
【推荐】实现跟随鼠标移动的浮动提示框、气泡框、Tip效果
【推荐】实现跟随鼠标移动的浮动提示框、气泡框、Tip效果
|
6月前
|
前端开发
CSS实现鼠标悬停图片向上浮动,放大,翻转
CSS实现鼠标悬停图片向上浮动,放大,翻转
130 0
|
6月前
设置按钮背景为透明去掉button按钮左右两边的留白
设置按钮背景为透明去掉button按钮左右两边的留白
|
7月前
|
UED 容器
如何实现侧边两栏宽度固定,中间栏宽度自适应的布局?——双飞翼布局、圣杯(Holy Grails)布局
如何实现侧边两栏宽度固定,中间栏宽度自适应的布局?——双飞翼布局、圣杯(Holy Grails)布局
45 0
|
10月前
文本溢出显示省略号,鼠标浮动查看全部内容
文本溢出显示省略号,鼠标浮动查看全部内容
50 0
|
前端开发 JavaScript 计算机视觉
css动画:文字向上移动并逐渐消失 点击按钮显示+1上移淡出
css动画:文字向上移动并逐渐消失 点击按钮显示+1上移淡出
949 0
css动画:文字向上移动并逐渐消失 点击按钮显示+1上移淡出
盒子居中效果案例(使用位移方法)
盒子居中效果案例(使用位移方法)
71 0
盒子居中效果案例(使用位移方法)
|
Web App开发 前端开发 iOS开发
纵向排列文字以及禁止文字选中
内容包括demo代码,应用和定义,以及参考文献,本文主要内容是本人学习过程中遇到css的零碎知识点1(就是以前自己不知道的),我都记下来了,需要的朋友可以过来参考下,喜欢的可以点个赞,希望对大家有所帮助。 writing-mode: tb-rl; (纵向排列文字)应用: 说明:设置或检索对象的内容块固有的书写方向。西方语言一般都是 lr-tb 的书写方式,但是亚洲语言 lr-tb | tb-rl 的书写方式都有。作为IE的私有属性之一,IE5.5率先实现了 writing-mode ,后期被w3c采纳成标准属性;此属性效果不能被累加使用。例如,父对象的此属性值
123 0
纵向排列文字以及禁止文字选中
右侧是长方形和半圆结合 光标放上去在规定时间内完成动画
右侧是长方形和半圆结合 光标放上去在规定时间内完成动画