【问题标题】:CSS - ::after pseudo element positioning and dimension issueCSS - ::after 伪元素定位和尺寸问题
【发布时间】:2017-08-18 20:21:21
【问题描述】:

我有 2 张背景透明的图片,需要将一张以相同的位置叠放:

  • 1 次旋转(下方)
  • 1 个固定(上)

我需要使整个图像组合居中,并根据窗口大小调整其大小。

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

我认为应该涉及background-size 属性,但没有设法正确使用它。

不胜感激任何建议,即使它涉及采用与 ::after 伪类完全不同的方法。

非常感谢。

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>

【问题讨论】:

    标签: css pseudo-class


    【解决方案1】:

    这样的?

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

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

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

    固定图像的 z-index 比动画图像高,因此它始终出现在其上方。相对于窗口大小,图像也会相应地改变大小。

    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>

    【讨论】:

    • 感谢一百万@Jcode,这解决了我的问题,确实是一个很好的解决方案!仍然想知道使用 ::after 伪类是否可以实现,你认为是吗?
    • @Surreal 我在上面添加了一个替代解决方案!
    • 谢谢,但替代解决方案看起来它错过了根据窗口大小调整的图像大小。我在尝试使用::after 伪类时遇到了同样的问题
    【解决方案2】:

    position.engine-complete::after 设置为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>

    【讨论】:

    • 谢谢,但这并不能解决问题,因为它完全隐藏了固定图像。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2011-08-14
    • 2012-01-27
    相关资源
    最近更新 更多