html - 如何在具有边框半径的形状周围环绕文本?

标签 html css

是否可以使用 自动换行CSS 避免切割由 border-radius 溢出的文本的内容?

此时,我的文字被隐藏在框外:

p {
  border-bottom-right-radius: 100%;
  border: 1px solid;
  padding: 1rem;
  overflow: hidden;
}
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
</p>


我想像这张图片一样包裹文字:

enter image description here

最佳答案

更新
这是一个使用 flexbox 的更好版本,它可以避免设置任何固定高度,但需要一个额外的容器。缺点是部分文本可能仍然溢出。我们需要相应地调整高度以避免这种情况:

p {
  overflow: hidden;
  text-align: justify;
  margin: 0;
  height:135%; /* we need to adjust this */
  border-bottom-right-radius: 100%;
  border: 1px solid;
}
p:after {
  content:"last";
  color:red;
}

p::before {
  content: "";
  float: right;
  width: 100%;
  height: 100%;
  shape-outside: radial-gradient(farthest-side at top left, transparent 99%, #fff 100%);
}

.box {
  display: flex;
}
<div class="box">
  <div>
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
      in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. At vero eos et accusamus et iusto odio dignissimos ducimus
      qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum
      quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem
      quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur
      aut perferendis doloribus asperiores repellat.
    </p>
  </div>
</div>


Shape-outside 可以做到这一点。唯一的缺点是它需要固定的高度才能工作:

p {
  border-bottom-right-radius: 100%;
  border: 1px solid;
  padding: 1rem;
  overflow: hidden;
  height:350px;
  text-align:justify;
}
p::before {
  content:"";
  float:right;
  width:100%;
  height:100%;
  shape-outside:radial-gradient(farthest-side at top left,transparent 98%,#fff 100%);
}
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
</p>

您可以使用 vw 来近似完美的高度。单位,但由于新形状的性质,仍然不容易。

p {
  border-bottom-right-radius: 100%;
  border: 1px solid;
  padding: 1rem;
  overflow: hidden;
  height:calc(500px - 20vw);
  text-align:justify;
}
p::before {
  content:"";
  float:right;
  width:100%;
  height:100%;
  shape-outside:radial-gradient(farthest-side at top left,transparent 98%,#fff 100%);
}
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
</p>

基于内容的固定宽度/高度将给出完美的结果:

p {
  border-bottom-right-radius: 100%;
  border: 1px solid;
  padding: 1rem;
  overflow: hidden;
  height:310px;
  width:700px;
  text-align:justify;
}
p::before {
  content:"";
  float:right;
  width:100%;
  height:100%;
  shape-outside:radial-gradient(farthest-side at top left,transparent 98%,#fff 100%);
}
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
</p>

CSS shape-outside with border radius
这里和两边都有曲线的想法:

p {
  border-radius:0 0 1000px 1000px;
  border: 1px solid;
  padding: 1rem;
  overflow: hidden;
  height:310px;
  width:700px;
  text-align:justify;
}
p::before {
  content:"";
  float:left;
  width:50%;
  height:100%;
  shape-outside:radial-gradient(farthest-side at top right,transparent 98%,#fff 100%);
}
p span::before {
  content:"";
  float:right;
  width:50%;
  height:100%;
  shape-outside:radial-gradient(farthest-side at top left,transparent 98%,#fff 100%);
}
<p><span></span>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
</p>

CSS text around rounded shape

相关文章(我写的)在那里你可以找到更多花哨的形状:https://css-challenges.com/custom-text-shape/

关于html - 如何在具有边框半径的形状周围环绕文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62437000/

相关文章:

javascript - 存储 JS 计数以继续使用 HTML5 网络存储

jquery - 如果使用 jquery 的 div 长度大于一个,则删除 div 元素?

html - 无法解释的空格?

css - CKEditor 和 CakePHP 改变高度

html - 如何用CSS选择dl元素的奇数子元素?

html - 如何覆盖 sass 中的 Bootstrap 变量?

javascript - 上一个脚本完成后运行 jQuery 代码

html - 绝对定位的 div float 在主要内容上

html - 添加 float : left breaks list

html - 在 Sinatra 表单中格式化日期字段