CSS - ::伪元素定位和维度问题之后

CSS - ::after pseudo element positioning and dimension issue

我有 2 张透明背景的图片,需要将一张放在彼此的顶部,位置相同:

我需要将整个图像构图居中并根据 window 大小调整其大小。

我为固定元素使用了一个 ::after 伪元素,但无法获得它的位置和大小来跟随旋转元素。

我想 background-size 属性 应该参与,但没能正确使用它。

将不胜感激任何建议,即使它涉及采用与 ::after 伪 class.

完全不同的方法

非常感谢。

body{
   width: 100%;
   height: 100%;
   background-color: #000;
   text-align: center;
   color: #fff;
  }
  .main-container{
   background-color: #00f;
   width: 50%;
   margin: 0 auto;
  }
  .engine-container{
  }
  .engine-complete{
   position: relative;
   width: 100%;
   height: auto;
   margin: 0 auto; 
  }
  .engine-complete::after{
   content: ""; 
   position: absolute;
   width: 191px;
   height: 192px;
   top: 1px;
   left: 0;
   background-image: url(https://image.ibb.co/jOqNma/engine1_crpd.png); 
  }
  .engine-rotating{
   width: 50%;
   height: auto;   
  }
  .spin {
    animation-duration: 15s;
    animation-name: spin;
    animation-iteration-count: infinite;
    animation-timing-function:linear;
    animation-play-state: running;
  }
  @keyframes spin {
    from {
      transform:rotate(360deg);
    }

    to {
       transform:rotate(0deg);
    }
  }
<div class="main-container">
  <h1>spinning engine</h1>
  <div class="engine-container">
   <div class="engine-complete">
    <img src="https://image.ibb.co/nwOKXF/engine1.png" width=191 height=192 class="engine-rotating spin"/>  
   </div>
  </div>
 </div>

.engine-complete::afterposition 设置为 relative

.engine-complete::after {position: relative}

body{
   width: 100%;
   height: 100%;
   background-color: #000;
   text-align: center;
   color: #fff;
  }
  .main-container{
   background-color: #00f;
   width: 50%;
   margin: 0 auto;
  }
  .engine-container{
  }
  .engine-complete{
   position: relative;
   width: 100%;
   height: auto;
   margin: 0 auto; 
  }
  .engine-complete::after{
   content: ""; 
   position: relative; /* this was changed */
   width: 191px;
   height: 192px;
   top: 1px;
   left: 0;
   background-image: url(https://image.ibb.co/jOqNma/engine1_crpd.png); 
  }
  .engine-rotating{
   width: 50%;
   height: auto;   
  }
  .spin {
    animation-duration: 15s;
    animation-name: spin;
    animation-iteration-count: infinite;
    animation-timing-function:linear;
    animation-play-state: running;
  }
  @keyframes spin {
    from {
      transform:rotate(360deg);
    }

    to {
       transform:rotate(0deg);
    }
  }
<div class="main-container">
  <h1>spinning engine</h1>
  <div class="engine-container">
   <div class="engine-complete">
    <img src="https://image.ibb.co/nwOKXF/engine1.png" width=191 height=192 class="engine-rotating spin"/>  
   </div>
  </div>
 </div>

是这样的吗?

编辑: 我没有使用 ::after 伪 class 将图像设置为背景,而是将固定图像添加到 html.我还删除了你的一个容器。

我使用 text-align:center 将动画图像居中,使用 position: absolute

将固定图像居中

我将两个图像都设置为相对于父图像的 30% 宽度 .engine-container

固定图像的 z-index 比动画图像高,因此它始终显示在动画图像之上。图像也会相应地改变大小,相对于 window 大小。

body {
  width: 100%;
  height: 100%;
  background-color: #000;
  text-align: center;
  color: #fff;
}

.main-container {
  background-color: #00f;
  width: 50%;
  margin: 0 auto;
}

.engine-container {
  text-align: center;
  position: relative;
}

.engine-rotating,
.engine-fixed {
  width: 30%;
}

.engine-fixed {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) rotate(0deg);
  z-index: 5000;
}

.spin {
  animation-duration: 15s;
  animation-name: spin;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  animation-play-state: running;
}

@keyframes spin {
  from {
    transform: rotate(360deg);
  }
  to {
    transform: rotate(0deg);
  }
}
<div class="main-container">
  <h1>spinning engine</h1>
  <div class="engine-container">
    <img src="https://image.ibb.co/nwOKXF/engine1.png" class="engine-rotating spin" />
    <img src="https://image.ibb.co/jOqNma/engine1_crpd.png" class="engine-fixed" alt="">
  </div>
</div>

更新 这是我想出的:

使用 ::after 的类似效果。我能够通过将图像 url 插入 content: 规则来实现此目的,而不是设置背景图像。

body {
  width: 100%;
  height: 100%;
  background-color: #000;
  text-align: center;
  color: #fff;
}

.main-container {
  background-color: #00f;
  width: 50%;
  margin: 0 auto;
}

.engine-container{
  text-align: center;
  position: relative;

}

.engine-rotating{
}

.engine-container::after{
  content: url('https://image.ibb.co/jOqNma/engine1_crpd.png');
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) rotate(0deg);
  z-index: 5000;
}

.spin{
  animation-duration: 15s;
  animation-name: spin;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  animation-play-state: running;
}

@keyframes spin{
  from {
    transform: rotate(360deg);
  }
  to {
    transform: rotate(0deg);
  }
}
<div class="main-container">
  <h1>spinning engine</h1>
  <div class="engine-container">
    <img src="https://image.ibb.co/nwOKXF/engine1.png" class="engine-rotating spin" />
  </div>
</div>