2015-06-16 14 views
5

Là một xương trần ví dụ tôi có những 2 divs thực sự đơn giản:trừ 20 pixel ở phía trên và dưới của div

enter image description here

(một màu xanh lá cây nằm bên trong một màu đỏ)

Bây giờ như thế nào tôi có thể trừ 20 pixel từ dưới cùng và phần đầu của div màu xanh lá cây không?

html:

<div id="container"> 
    <div id="rows"> 
    </div>  
</div> 

css:

#container { 
    width: 200px; 
    height: 300px; 
    background: red; 
} 

#rows { 
    width: 50%; 
    height: 100%; 
    /* margin-top: 20px; 
     margin-bottom: 20px; */ 

    /* padding-top: 20px; 
    padding-bottom: 20px; */  

/*  top: 20px; 
    bottom: 20px; 
    height: auto; */ 

    background: green; 

} 

http://jsfiddle.net/clankill3r/2L6c2bLf/1/

Trả lời

3

Dưới đây là một cách để làm điều đó mà không cần thêm padding để div cha mẹ hoặc sử dụng một calc trong div đứa trẻ.

JSFIDDLE

#container { 
    width: 200px; 
    height: 300px; 
    background: red; 
    position: relative; 
} 
#rows { 
    position: absolute; 
    width:50%; 
    top: 20px; 
    bottom: 20px; 
    background: green; 
} 
+0

Tại sao điều này không hoạt động khi vị trí của '# rows' là tương đối? – clankill3r

+1

Xem: https://developer.mozilla.org/en-US/docs/Web/CSS/top. Khi sử dụng vị trí tương đối, ghi đè hàng đầu ở dưới cùng, do đó div sẽ hiển thị 20px bên dưới phần đầu của vùng chứa và thuộc tính dưới cùng bị bỏ qua. Vì chiều cao cũng không được xác định, div có chiều cao bằng không. Với vị trí tuyệt đối, đỉnh và đáy được chỉ định ở 20px và không có chiều cao được xác định, div con bắt đầu ở mức 20px bên dưới đầu gốc và kết thúc ở mức 20px phía trên cùng bên dưới. Trên và dưới có hiệu quả thiết lập giới hạn trên và dưới cho div. – Brino

4

Thêm padding để #container

padding: 20px 0px; 

Sửa:

theo đề nghị của @ Adam bạn nên chứa cũng

box-sizing: border-box; 

để stylesheet nếu bạn muốn giữ hộp chiều cao

+3

#container bây giờ trở thành 340px cao – Brino

+1

@Brino chính xác suy nghĩ của tôi – freewheeler

+0

Bạn đã thử nó? – Jayababu

2

Đây có thể là giải pháp:

height: calc(100% - 40px); 

JSFiddle

Một giải pháp khác là

padding:20px 0px; 
box-sizing:border-box; 

cho vùng chứa của bạn. box-sizing:border-box; duy trì sự thay đổi chiều cao của vùng chứa.

+0

Điều này có vẻ tốt nhưng tôi chỉ tự hỏi là calc một thực hành tốt? Bởi vì tôi đã cố gắng sử dụng calc trong một số trường hợp của tôi nhưng nó không hoạt động mọi lúc. –

+0

@ Eason.Luo Calc hoạt động trong bất kỳ trình duyệt nào hỗ trợ đặc tả CSS3. Đó là tất cả chúng, lưu cho các phiên bản cũ của IE. 8 và dưới đây, tôi tin. –

+0

Nếu tôi muốn 20 pixel ở trên cùng và 15 ở dưới cùng thì sao? – clankill3r

2

Dưới đây là một giải pháp:

#rows { 
    width: 50%; 
    height: 260px; 
    margin-top: 20px; 
    margin-bottom: 20px; 
    float: left; 
    background: green; 
} 

http://jsfiddle.net/2L6c2bLf/5/

Các vấn đề liên quan