【问题标题】:Overlay grid on responsive image在响应式图像上叠加网格
【发布时间】:2019-06-06 06:45:31
【问题描述】:

我有一个标准图像(由于引导程序而具有响应性),并希望在其上覆盖一个 5% x 5% 的标准网格。

我需要在图像上选取点,并且需要网格和图像一样可见。

我通过表单上传图像,它显示在 html 的表单位置。我想知道如何在它上面添加额外的 CSS - 让网格在它上面。

请参见下图的示例(我只放置了 8 个网格 - 但我想要 x 和 y 的间距为 5% 或 10%)。

【问题讨论】:

  • 我不知道从哪里开始 - 但这里有一个代码笔。网格需要出现在虚拟图像的顶部。 codepen.io/anon/pen/OyMVdq

标签: html css image


【解决方案1】:

在 div 的伪元素上使用两个 linear-gradients,一个在 ::before 上,一个在 ::after 上,我们可以创建两条简单的线,然后每隔 n% 重复一次 background-size。 ::after 伪元素旋转 90 度以创建水平线。它看起来像这样:

.grid::before,
.grid::after {
  background: linear-gradient(to right, #000 2px, transparent 2px);
  background-size: 10%;
}

.grid::after {
  transform: rotate(90deg);
}

这两个渐变创建了两条相交的线,长度为百分比大小,如下所示:

这些行与默认的background-repeat: repeat 重复,这会创建一个网格,如下所示:

当::before 和::after pseudo elements 放在图像上时,我们会得到:

你可以创建一个固定的网格大小,使用一个固定的像素background-size:

.fixed::before,
.fixed::after {
  background-size: 23px;
}

示例

注意如何在::before 上使用box-shadow: inset 0px 0px 0 2px #000; 为整个网格绘制轮廓。

*,
*::before,
::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.grid img {
  display: block;
}

.grid {
  display: inline-block;
  position: relative;
  margin: 10px;
  vertical-align: top;
}

.grid::before,
.grid::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: linear-gradient(to right, #000 2px, transparent 2px);
  background-size: 10%;
}

.grid::before {
  background-color: rgba(255, 0, 0, 0.56);
  box-shadow: inset 0px 0px 0 2px #000;
}

.grid::after {
  transform: rotate(90deg);
}

.fixed::before,
.fixed::after {
  background-size: 23px;
}
<div class="grid">
  <img src="https://dummyimage.com/300x300/ccc" width="300" height="300" />
</div>

<div class="grid">
  <img src="https://dummyimage.com/200x200/ccc" width="200" height="200" />
</div>

<div class="grid">
  <img src="https://dummyimage.com/100x100/ccc" width="100" height="100" />
</div>

<div class="grid fixed">
  <img src="https://dummyimage.com/500x500/ccc" width="500" height="500" />
</div>

【讨论】:

  • 这很有趣也很好。将其限制为仅 img 的任何更改?如果我使用这个类 - 它会在所有 div 上放置一个网格。我怎样才能仅限于图像。我认为 bootstarp 类是“img-responsive”——但这是一个很棒的方向——谢谢
  • @hypermails - 简单 :) 图像本身需要包装在一个 div 中,所以只需使用一个类来定位 div。示例:&lt;div class="grid"&gt;&lt;img /&gt;&lt;/div&gt; 并将 CSS 属性放在 .grid 而不是 div 上。
  • 在运行示例时,我是否只得到垂直线(在运行代码 sn-p 和转到“这是给你的示例”注释中提供的链接时?)在 Chrome 74.0.3729.169、Win10 x64 上运行。
  • @Suma 谢谢你问我:) 看起来事情自 2015 年以来发生了变化。我已经在我的答案中修复了 CSS。水平线现在由旋转 90 度的第二个伪元素提供。我还添加了一个固定大小的网格示例,可以在某些用例中派上用场。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 2017-08-28
  • 2017-01-12
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
相关资源
最近更新 更多