Как сделать размер шрифта относительно родительского div?

Я хочу, чтобы текст внутри моего div оставался таким же размером в процентном отношении % к родительскому div. И.Е. Я хочу, чтобы мой текст имел font-size 50% от ширины родительских родителей. Поэтому, когда размер страницы меняется, текст всегда остается того же размера в %.

Вот что я говорю:

.counter-holder{
	display: block;
	position: absolute;
	width:90%;
	height:20%;
	top: 70%;
	left: 50%;
	/* bring your own prefixes */
	transform: translate(-50%, -50%);
}


.counter-element-box{
	position:relative;
	vertical-align: text-top;
	border-style: solid;
    border-width: 1px;
    width: 20%;
    height: 100%;
    float:left;
    margin: 6%;
}

.counter-element-text{
	position:absolute; 
	top:50%; 
	width: 50%;
	max-width:50%;
	display: inline-block;
	height:100%;
	margin-left:50%;
	font-size : 80%;overflow: hidden;
}

.counter-element-value{
	position:absolute; 
	top:50%; 
	width: 50%;
	max-width:50%;
	display: inline-block;
	height:100%;
	padding-left:30%;
	font-size : 80%;overflow: hidden;
}
<div class="counter-holder">
	<div class="counter-element-box">
		<div id="years" class="counter-element-value">
			0
		</div>
		<div class="counter-text counter-element-text" >
		    Years
		</div> 
	</div>
	<div class="counter-element-box">
		<div id="missions" class="counter-element-value">
			0  
		</div>
		<div class="counter-text counter-element-text" >
		    Missions
		</div>
	</div> 
	<div class="counter-element-box">	
		  <div id="team" class="counter-element-value">
			   0 
		  </div>
		  <div class="counter-text counter-element-text" >
		    	Team
		  </div>
	</div>		    	
</div>

Ответ 1

Использование font-size: x% не относится к ширине родительского элемента, но размер шрифта обычно имеет элемент.

Итак, если ваш родительский элемент устанавливает font-size: 12px, то font-size: 50% в элементе означает, что у элемента есть font-size of 6px

То, что вы хотите использовать, процент видового экрана: vw

например: font-size: 2vw

.counter-holder{
	display: block;
	position: absolute;
	width:90%;
	height:20%;
	top: 70%;
	left: 50%;
	/* bring your own prefixes */
	transform: translate(-50%, -50%);
}


.counter-element-box{
	position:relative;
	vertical-align: text-top;
	border-style: solid;
    border-width: 1px;
    width: 20%;
    height: 100%;
    float:left;
    margin: 6%;
}

.counter-element-text{
	position:absolute; 
	top:50%; 
	display: inline-block;
	margin-left:40%;
	font-size : 2vw;overflow: hidden;
}

.counter-element-value{
	position:absolute; 
	top:50%; 
	width: 50%;
	max-width:50%;
	display: inline-block;
	height:100%;
	padding-left:30%;
	font-size : 2vw;overflow: hidden;
}
<div class="counter-holder">
			
			<div class="counter-element-box">
				<div id="years" class="counter-element-value">
					0
		    	</div>
		    	<div class="counter-text counter-element-text" >
		    		Years
		    	</div> 
	    	</div>
	    	<div class="counter-element-box">
		    	<div id="missions" class="counter-element-value">
					0  
		    	</div>
		    	<div class="counter-text counter-element-text" >
		    		Missions
		    	</div>
	    	</div> 
		    <div class="counter-element-box">	
		    	<div id="team" class="counter-element-value">
					0 
		    	</div>
		    	<div class="counter-text counter-element-text" >
		    		Team
		    	</div>
	    	</div>		    	
</div>

Ответ 2

Как я решил эту проблему, было использовать javascript для измерения контейнера, а затем установить размер шрифта в px на этом контейнере. Как только эта базовая линия будет установлена ​​для контейнера, относительный размер шрифта для всего содержимого будет правильно масштабироваться с использованием em или%.

Я использую React:

<div style={{ fontSize: width / 12 }} >
  ...
</div>

CSS

div {
  font-size: 2em;
}

Ответ 3

Вы можете использовать элементы видового экрана для изменения размера окна. 100vw - полная ширина окна, а 100vh - высота.

.resizable-text {
  font-size: 50vw;
}
<div class="resizable-text">
  Text
</div>