有没有办法将对象位置应用于 div(不使用 <img>)?

Is there any way to apply object-position to a div (without using <img>)?

提问人:MiguelP 提问时间:7/21/2023 最后编辑:MiguelP 更新时间:7/24/2023 访问量:24

问:

我正在尝试在 jenkyll 模板上调整图像,以尽量减少错误。 因为默认的html同时用于图像和视频(我认为?),所以它没有使用适当的标签来实现。我正在编辑的部分是标题图像叠加,因为我希望图像的特定部分在移动设备上可见。<div>divobject-position

原始代码:

{% capture overlay_img_path %}{{ page.header.overlay_image | relative_url }}{% endcapture %}

{% if page.header.overlay_filter contains "gradient" %}
  {% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %}
{% elsif page.header.overlay_filter contains "rgba" %}
  {% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %}
  {% capture overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}){% endcapture %}
{% elsif page.header.overlay_filter %}
  {% capture overlay_filter %}rgba(0, 0, 0, {{ page.header.overlay_filter }}){% endcapture %}
  {% capture overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}){% endcapture %}
{% endif %}

{% if page.header.image_description %}
  {% assign image_description = page.header.image_description %}
{% else %}
  {% assign image_description = page.title %}
{% endif %}

{% assign image_description = image_description | markdownify | strip_html | strip_newlines | escape_once %}

<div class="page__hero{% if page.header.overlay_color or page.header.overlay_image %}--overlay{% endif %}"
  style="{% if page.header.overlay_color %}background-color: {{ page.header.overlay_color | default: 'transparent' }};{% endif %} {% if overlay_img_path %}background-image: {% if overlay_filter %}{{ overlay_filter }}, {% endif %}url('{{ overlay_img_path }}');{% endif %}"
>
  {% if page.header.overlay_color or page.header.overlay_image %}
    <div class="wrapper">
      <h1 id="page-title" class="page__title" itemprop="headline">
        {% if paginator and site.paginate_show_page_num %}
          {{ site.title }}{% unless paginator.page == 1 %} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}
        {% else %}
          {{ page.title | default: site.title | markdownify | remove: "<p>" | remove: "</p>" }}
        {% endif %}
      </h1>
      {% if page.tagline %}
        <p class="page__lead">{{ page.tagline | markdownify | remove: "<p>" | remove: "</p>" }}</p>
      {% elsif page.header.show_overlay_excerpt != false and page.excerpt %}
        <p class="page__lead">{{ page.excerpt | markdownify | remove: "<p>" | remove: "</p>" }}</p>
      {% endif %}
      {% include page__meta.html %}
      {% if page.header.cta_url %}
        <p><a href="{{ page.header.cta_url | relative_url }}" class="btn btn--light-outline btn--large">{{ page.header.cta_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a></p>
      {% endif %}
      {% if page.header.actions %}
        <p>
        {% for action in page.header.actions %}
          <a href="{{ action.url | relative_url }}" class="btn btn--light-outline btn--large">{{ action.label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a>
        {% endfor %}
      {% endif %}
    </div>
  {% else %}
    <img src="{{ page.header.image | relative_url }}" alt="{{ image_description }}" class="page__hero-image">
  {% endif %}
  {% if page.header.caption %}
    <span class="page__hero-caption">{{ page.header.caption | markdownify | remove: "<p>" | remove: "</p>" }}</span>
  {% endif %}
</div>

我的编辑:

<div class="page__hero{% if page.header.overlay_color or page.header.overlay_image %}--overlay{% endif %}" {% if page.header.overlay_position %}data-object-position="{{ page.header.overlay_position }}"{% endif %}
  style="{% if page.header.overlay_color %}background-color: {{ page.header.overlay_color | default: 'transparent' }};{% endif %} {% if overlay_img_path %}background-image: {% if overlay_filter %}{{ overlay_filter }}, {% endif %}url('{{ overlay_img_path }}');{% endif %}{% if page.header.overlay_position %}object-position: {{ page.header.overlay_position }};{% endif %}"
>

有没有办法做到这一点,或者我必须重写html模板?

HTML SASS jekyll yaml-front-matter

评论

0赞 Chris Barr 7/22/2023
请直接在您的问题中包含代码。让人们轻松帮助您。没有人愿意访问 3 个不同的链接只是为了查看和使用您的代码。编辑你的问题,使用看起来像的按钮制作一个片段,然后把你的代码放在那里。[<>]
0赞 MiguelP 7/22/2023
@ChrisBarr 已编辑

答:

1赞 Amaury Hanser 7/24/2023 #1

你不能使用 .object-position

object-position

object-position CSS 属性指定所选替换元素的内容在元素框中的对齐方式。

源 MDN - 对象位置

替换的元素通常为 、 、 、 。<iframe><video><embed>

但你不需要.正如您在代码中看到的那样,该图像来自 :object-positionbackground-imagediv

<div class="page__hero{% if page.header.overlay_color or page.header.overlay_image %}--overlay{% endif %}"
  style="{% if page.header.overlay_color %}background-color: {{ page.header.overlay_color | default: 'transparent' }};{% endif %} {% if overlay_img_path %}background-image: {% if overlay_filter %}{{ overlay_filter }}, {% endif %}url('{{ overlay_img_path }}');{% endif %}"
>

css 中的 A 有很多属性:background

  • background-attachment
  • background-clip
  • background-color
  • background-image
  • background-origin
  • background-position
  • background-repeat
  • background-size

您可能需要两个属性:

  • background-position
  • background-size

background-position

background-position CSS 属性设置每个背景图像的初始位置。该位置相对于 background-origin 设置的位置图层。

源 MDN - background-position

这意味着您可以使用媒体查询来调整图像的位置。