2011-07-18 3 views
4

웹 사이트의 응답 성을 높이기 위해 요소를 유동적으로 정의하는 방법을 배우려고합니다. 오늘 나는 마침내 해결 된 상황을 보았지만, 왜 그 수정이 효과가 있었는지 이해할 수 없었습니다.동일한 요소에 반응하는 웹 디자인의 상대 너비 및 패딩

I 사이트 (NDA)에 링크 할 수 없습니다,하지만 난 문제의 요소와 일부 샘플 페이지에 올려했습니다

잘못된 : http://cruxwire.com/wrong.html 가 RIGHT : http://cruxwire.com/right.html

내가 가진 무엇입니까 세 divs 떠났다 왼쪽. 나는 백분율로 패딩을 추가하려고하는데 타겟/컨텍스트 = 결과를 사용하고 * 100 (백분율이기 때문에)입니다.

Ethan Marcotte의 Responsive Web Design 사본에는 " 요소에 유연한 패딩을 설정할 때 컨텍스트는 요소 자체의 너비입니다. " 나는 div에 20 %의 폭을 주었다. 상위 요소는 945 픽셀이므로 각 div의 픽셀 너비는 189 픽셀입니다. 20px의 패딩을 추가하려고 했으므로 20/189 = 0.1058201058201058입니다. 10.58201058201058 %의 각 div에 패딩을 추가했습니다.

이렇게하면 각 div에 20px가 아닌 100px의 패딩이 제공됩니다. 결국 padding은 div 엘리먼트가 아닌 부모 엘리먼트의 너비를 기반으로 계산된다는 것을 깨달았다.

내 솔루션은 내가 하나의 폭과 다른 패딩을 적용 할 수 있도록, 기존의 각 사업부의 주위에 여분의 사업부를 넣어, 그리고 그게 내가이 개 질문이 문제 ..

해결 :

왜 패딩은 자체 요소가 아닌 상위 요소를 기준으로 계산됩니까?

어떻게 추가 div를 추가하지 않고도이 작업을 수행 할 수 있습니까?

이 게시물에 링크 된 페이지에서 코드를 볼 수 있으며 아래에 코드도 추가되었습니다.

는 김 감사

잘못된 :

<!DOCTYPE html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>WRONG</title> 
<style> 
#main { width:945px; margin:0 auto; padding:40px 0; background-color:blue; } 
#slideshow { background-color:green; } 
.threecolumn { float:left; width:20%; padding:10.58201058201058%; background-color:yellow; } /* 20px/189px */ 
.slide { position:relative; margin:0 1%; background-color:red; } 
p { background-color:white; margin:0; padding:0; } 
</style> 
</head> 
<body> 

<div id="main"> 
    <div id="slideshow"> 
     <h1>WRONG</h1> 
     <div class="threecolumn slide"> 
      <p>According to Firebug, this element has 100px padding.</p> 
     </div> 
     <div class="threecolumn slide"> 
      <p>According to Firebug, this element has 100px padding.</p> 
     </div> 
     <div class="threecolumn slide"> 
      <p>According to Firebug, this element has 100px padding.</p> 
     </div> 
     <div style="clear:both;"></div> 
    </div> 
</div> 
</body> 
</html> 

RIGHT :

<!DOCTYPE html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>RIGHT</title> 
<style> 
#main { width:945px; margin:0 auto; padding:40px 0; background-color:blue; } 
#slideshow { background-color:green; } 
.threecolumn { float:left; width:20%; margin:0 1%; background-color:yellow; } 
.slide { position:relative; padding:10.58201058201058%; background-color:red; } /* 20px/189px */ 
p { background-color:white; margin:0; padding:0; } 
</style> 
</head> 
<body> 

<div id="main"> 
    <div id="slideshow"> 
     <h1>RIGHT</h1> 
     <div class="threecolumn"> 
      <div class="slide"> 
       <p>According to Firebug, this element has 20px padding.</p> 
      </div> 
     </div> 
     <div class="threecolumn"> 
      <div class="slide"> 
       <p>According to Firebug, this element has 20px padding.</p> 
      </div> 
     </div> 
     <div class="threecolumn"> 
      <div class="slide"> 
       <p>According to Firebug, this element has 20px padding.</p> 
      </div> 
     </div> 
     <div style="clear:both;"></div> 
    </div> 
</div> 

</body> 
</html> 

답변

0

W3 상자 모델은 계산 폭에 패딩이 포함되어 있습니다.

예 HTML :

<div id="nav"> 
    <div class="block" id="left"> 
     <div> 
      <h1>blah blah</h1> 
     </div> 
    </div> 
    <div class="block" id="middle"> 
     <div> 
      <h1>blah blah</h1> 
     </div> 
    </div> 
    <div class="block" id="right"> 
     <div> 
      <h1>blah blah</h1> 
     </div> 
    </div> 
</div> 
당신이 실제로하고 싶은 다른 사업부의 패딩을 원하는 내용을 포장하고 사용할 수없는 패딩에 해당하는 사업부에 마진을 적용하다

예 CSS :

.block { 
    width:33%; 
    height:50%; 
    position:relative; 
    float:left; 
    background-color:#CCC; 
    /** Instead of applying a 20px padding here... */ 
} 

.block>div { 
    margin:20px; /* we apply a 20px margin here */ 
} 

http://jsfiddle.net/AlienWebguy/Yf34X/1/

+0

이유? – AlienWebguy

0

가 해당 대상/컨텍스트 = 결과 가정에서 정확하지만,이 폭을, 패딩을 포함하며 요소의 여백.http://codepen.io/justincavery/pen/dtusa

당신은, 별도의 사업부를 추가 단지 대상과 상황의 규칙을 따라야하지만, 상황을 기억 할 필요가 없습니다

는 부모 - 당신이 어떻게 작동하는지 볼 수 있도록

은 내가 codepen를했습니다 패딩과 마진에 관해서는 현재 요소가 아닌 컨테이너입니다.

당신은 패딩이 약 20 픽셀 할 것을 권장합니다

.wrapper { 
    margin: 0 auto; 
    width: 1000px; 
} 
#main { 
    width:100%; 
    padding:40px 0; 
    background-color:blue; 
    float:left 
    } 
.pixeled { 
    float:left; 
    background-color:green; 
    width: 400px; 
    margin: 25px; 
    padding: 25px; 
} 
.percentaged { 
    float:left; 
    width:40%; 
    padding:2.5%; 
    background-color:yellow; 
    margin:2.5%; 
} 


<div class="wrapper"> 
<div id="main"> 
    <div class="pixeled"> 
     <div class="inner"> 
    This is content 
    </div>  
    </div> 
    <div class="percentaged"> 
    <div class="inner"> 
    This is conent 
    </div> 
    </div> 
</div> 

</div> 
0

여기에 추가 된 div를 추가 할 필요없이 그것을 할 한 가지 방법입니다. 따라서 945 픽셀의 전체 너비 중 20 픽셀 = 20/945 x 100 = 2.116402116 %

따라서이 비율을 10.58 % 대신 원래의 "잘못된"코드로 사용하면 원하는 효과. 다음은 변경된 CSS 만 사용하여 "잘못된"예를 위해 제공 한 코드입니다.

CSS :

#main { 
width:945px; 
margin:0 auto; 
padding:40px 0; 
background-color:blue; 
} 
#slideshow { 
background-color:green; 
} 
.threecolumn { 
float:left; 
width:20%; 
padding:2.116402116%; /*<<<<<<<<padding is 20px/945px*/ 
background-color:yellow; 
} 
.slide { 
position:relative; 
margin:0 1%; 
background-color:red; 
} 
p { 
background-color:white; 
margin:0; 
padding:0; 
} 

HTML 다음 downvote에 대한

<div id="main"> 
    <div id="slideshow"> 
     <h1>WRONG</h1> 
     <div class="threecolumn slide"> 
      <p>According to Firebug, this element has 100px padding.</p> 
     </div> 
     <div class="threecolumn slide"> 
      <p>According to Firebug, this element has 100px padding.</p> 
     </div> 
     <div class="threecolumn slide"> 
      <p>According to Firebug, this element has 100px padding.</p> 
     </div> 
     <div style="clear:both;"></div> 
    </div> 
</div> 
+0

패딩에 대한 변경 내용은 http://jsfiddle.net/Yf34X/54/에서 확인하십시오. – starky