【问题标题】:Can this be acomplished using only CSS? (no JS)这可以仅使用 CSS 来完成吗? (没有 JS)
【发布时间】:2016-12-12 22:28:04
【问题描述】:

一个带有文本背景的容器,该容器可以增长以适应内容或文本背景中最大的一个的大小。

我得到的最接近的是使用带有两个内部 DIV 的 flexbox 容器,一个用于内容,一个用于文本背景。两者都具有 100% 的 flex-basis 和一侧具有 -100% 边距的背景,因此内容可以重叠。

这种布局的问题在于,背景文本中的填充来自哪里并不那么明显。我希望蓝色和红色虚线相互接触,但有填充。

.test1 {
  position: absolute;
  left: 50px;
  top: 50px;
}

.test2 {
  position: absolute;
  left: 500px;
  top: 50px;
}

.test3 {
  position: absolute;
  left: 50px;
  top: 250px;
}

.test4 {
  position: absolute;
  left: 500px;
  top: 250px;
}

.test5 {
  position: absolute;
  left: 50px;
  top: 450px;
}

.test6 {
  position: absolute;
  left: 500px;
  top: 450px;
}

.outer {
  display: flex;
  min-width: 150px;
  min-height: 150px;
  outline: dashed 3px green;
  padding: 3px;
}

.title {
  background: red;
  text-align: center;
}

.foreground {
  flex: 1 0 50%;
  
  display: flex;
  justify-content: space-between;
  align-items: center;
  outline: dashed 3px blue;
}

.left {
  background: rgba(255,255,0,.5);
}

.right {
  background: rgba(0,255,255,.5);
  text-align: right;
}

.background {
  flex: 1 0 50%;
  margin-right: -100%;

  font-size: 30px;
  outline: dashed 3px red;
  
  display: flex;
  justify-content: center;
  align-items: center;
}

.background>div {
  outline: dashed 3px red;
}
<div class="outer test1">
  <div class="background">
     <div>1 some very long text!!!</div>
  </div>

  <div class="foreground">
    <div class="left">
	  <div>A</div>
	  <div>AB</div>
	  <div>ABC</div>
	  <div>ABCD</div>
	</div>
		
    <div class="right">
	  <div>A</div>
	  <div>AB</div>
    </div>
  </div>
</div>

<div class="outer test2">  
  <div class="background">
	<div>2 text!!!</div>
  </div>

  <div class="foreground">
	<div class="left">
	  <div>A</div>
	  <div>AB</div>
	  <div>ABC</div>
	  <div>ABCD</div>
	</div>
		
    <div class="right">
	  <div>A</div>
	  <div>AB</div>
	</div>
  </div>
</div>

<div class="outer test3">  
  <div class="background">
	<div>3 some very long text!!!</div>
  </div>

  <div class="foreground">
	<div class="left">
	  <div>A</div>
	  <div>AB</div>
	  <div>ABC</div>
	  <div>ABCD</div>
	  <div>ABCD</div>
	  <div>ABCD</div>
	  <div>ABCD</div>
	  <div>ABCD</div>
	</div>
		
    <div class="right">
	  <div>A</div>
	  <div>AB</div>
	</div>
  </div>
</div>

<div class="outer test4">  
  <div class="background">
	<div>4 text!!!</div>
  </div>

  <div class="foreground">
	<div class="left">
	  <div>A</div>
	  <div>AB</div>
	  <div>ABC</div>
	  <div>ABCD</div>
	  <div>ABCD</div>
	  <div>ABCD</div>
	  <div>ABCD</div>
	  <div>ABCD</div>
	</div>
		
	<div class="right">
	  <div>A</div>
	  <div>AB</div>
	</div>
  </div>
</div>

<div class="outer test5">  
  <div class="background">
	<div>5 some very long text!!!</div>
  </div>

  <div class="foreground">
	<div class="left">
	  <div>A</div>
	  <div>AB</div>
	  <div>ABC</div>
	  <div>ABCD</div>
	  <div>ABCD</div>
	  <div>ABCD</div>
	  <div>ABCD</div>
	  <div>ABCDxxxxx</div>
	</div>
		
    <div class="right">
	  <div>A</div>
	  <div>AB</div>
	</div>
  </div>
</div>

<div class="outer test6">  
  <div class="background">
	<div>6 text!!!</div>
  </div>

  <div class="foreground">
	<div class="left">
	  <div>A</div>
	  <div>AB</div>
	  <div>ABC</div>
	  <div>ABCD</div>
	  <div>ABCD</div>
	  <div>ABCD</div>
	  <div>ABCD</div>
	  <div>ABCDxxxxx</div>
	</div>
		
	<div class="right">
	  <div>A</div>
	  <div>AB</div>
	</div>
  </div>
</div>

编辑

这将是预期的结果:

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    您是否想让红色容器适合其父容器并相应增加大小,此 div 只需要 flex: 1; 并且可选 text-align: center; 用于使文本居中。

    .test1 {
      position: absolute;
      left: 50px;
      top: 50px;
    }
    
    .test2 {
      position: absolute;
      left: 500px;
      top: 50px;
    }
    
    .test3 {
      position: absolute;
      left: 50px;
      top: 250px;
    }
    
    .test4 {
      position: absolute;
      left: 500px;
      top: 250px;
    }
    
    .test5 {
      position: absolute;
      left: 50px;
      top: 450px;
    }
    
    .test6 {
      position: absolute;
      left: 500px;
      top: 450px;
    }
    
    .outer {
      display: flex;
      min-width: 150px;
      min-height: 150px;
    }
    
    .title {
      background: red;
      text-align: center;
    }
    
    .foreground {
      flex: 1 0 50%;
      
      display: flex;
      justify-content: space-between;
      align-items: center;
      outline: dashed 3px blue;
    }
    
    .left {
      background: rgba(255,255,0,.5);
    }
    
    .right {
      background: rgba(0,255,255,.5);
      text-align: right;
    }
    
    .background {
      flex: 1 0 50%;
      margin-right: -100%;
    
      font-size: 30px;
      outline: dashed 3px red;
      
      display: flex;
      justify-content: center;
      align-items: center;
    }
    
    .background>div {
      outline: dashed 3px red;
      flex: 1;
      text-align: center;
    }
    <div class="outer test1">
      <div class="background">
         <div>1 some very long text!!!</div>
      </div>
    
      <div class="foreground">
        <div class="left">
    	  <div>A</div>
    	  <div>AB</div>
    	  <div>ABC</div>
    	  <div>ABCD</div>
    	</div>
    		
        <div class="right">
    	  <div>A</div>
    	  <div>AB</div>
        </div>
      </div>
    </div>
    
    <div class="outer test2">  
      <div class="background">
    	<div>2 text!!!</div>
      </div>
    
      <div class="foreground">
    	<div class="left">
    	  <div>A</div>
    	  <div>AB</div>
    	  <div>ABC</div>
    	  <div>ABCD</div>
    	</div>
    		
        <div class="right">
    	  <div>A</div>
    	  <div>AB</div>
    	</div>
      </div>
    </div>
    
    <div class="outer test3">  
      <div class="background">
    	<div>3 some very long text!!!</div>
      </div>
    
      <div class="foreground">
    	<div class="left">
    	  <div>A</div>
    	  <div>AB</div>
    	  <div>ABC</div>
    	  <div>ABCD</div>
    	  <div>ABCD</div>
    	  <div>ABCD</div>
    	  <div>ABCD</div>
    	  <div>ABCD</div>
    	</div>
    		
        <div class="right">
    	  <div>A</div>
    	  <div>AB</div>
    	</div>
      </div>
    </div>
    
    <div class="outer test4">  
      <div class="background">
    	<div>4 text!!!</div>
      </div>
    
      <div class="foreground">
    	<div class="left">
    	  <div>A</div>
    	  <div>AB</div>
    	  <div>ABC</div>
    	  <div>ABCD</div>
    	  <div>ABCD</div>
    	  <div>ABCD</div>
    	  <div>ABCD</div>
    	  <div>ABCD</div>
    	</div>
    		
    	<div class="right">
    	  <div>A</div>
    	  <div>AB</div>
    	</div>
      </div>
    </div>
    
    <div class="outer test5">  
      <div class="background">
    	<div>5 some very long text!!!</div>
      </div>
    
      <div class="foreground">
    	<div class="left">
    	  <div>A</div>
    	  <div>AB</div>
    	  <div>ABC</div>
    	  <div>ABCD</div>
    	  <div>ABCD</div>
    	  <div>ABCD</div>
    	  <div>ABCD</div>
    	  <div>ABCDxxxxx</div>
    	</div>
    		
        <div class="right">
    	  <div>A</div>
    	  <div>AB</div>
    	</div>
      </div>
    </div>
    
    <div class="outer test6">  
      <div class="background">
    	<div>6 text!!!</div>
      </div>
    
      <div class="foreground">
    	<div class="left">
    	  <div>A</div>
    	  <div>AB</div>
    	  <div>ABC</div>
    	  <div>ABCD</div>
    	  <div>ABCD</div>
    	  <div>ABCD</div>
    	  <div>ABCD</div>
    	  <div>ABCDxxxxx</div>
    	</div>
    		
    	<div class="right">
    	  <div>A</div>
    	  <div>AB</div>
    	</div>
      </div>
    </div>

    【讨论】:

    • 我希望蓝色的容器会缩小,因为黄色和青色容器之间有很大的空间。我添加了一个带有预期结果的屏幕截图。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多