2012-06-19 29 views
219

Có thể thực hiện div 50px dưới 100% CSS thuần túy không? Tôi muốn <div> chỉ nhỏ hơn 50px. Tôi không muốn bất kỳ JavaScript nào.Có thể tạo một div 50px nhỏ hơn 100% trong CSS3 không?

+1

@hakre - Liên kết của bạn bằng CSS và đây là trong CSS3. –

+2

CSS không CSS3 không phải CSS không phải CSS3 không phải CSS không ...?Nếu bạn yêu cầu một cách rõ ràng cho một tính năng CSS chỉ được xây dựng trong phiên bản 3, vui lòng yêu cầu nó (không phải CSS nói chung - có cơ thể câu hỏi của bạn khác với tiêu đề ở đây, vì vậy đừng đổ lỗi cho tôi;)) – hakre

+0

ở phần thân dưới tiêu đề câu hỏi. Bạn nên sử dụng cơ thể để làm cho câu hỏi CSS3 rõ ràng (và trong khi chúng ta đang nói xin vui lòng nói nếu CSS3 hoặc CSS3 +) – hakre

Trả lời

274

Có thể. Nếu không sử dụng số expression() của IE, bạn có thể thực hiện điều đó trong CSS3 bằng cách sử dụng calc().

div { 
    width: 100%; 
    width: -webkit-calc(100% - 50px); 
    width: -moz-calc(100% - 50px); 
    width: calc(100% - 50px); 
} 

Demo: http://jsfiddle.net/thirtydot/Nw3yd/66/

Điều này sẽ làm cho cuộc sống của bạn dễ dàng hơn rất nhiều. Nó hiện đang được hỗ trợ trong 3 trình duyệt chính: Firefox, Google Chrome (WebKit), và IE9: http://caniuse.com/calc

MDN: https://developer.mozilla.org/en/CSS/-moz-calc

+40

Các vấn đề là a) câu hỏi không rõ ràng về chiều rộng so với chiều cao và b) tự trả lời không phải là câu trả lời hay nhất. Đối với chiều rộng, sandeep là tốt hơn, cho chiều cao, gilly3's. Câu trả lời của OP không được hỗ trợ trên một số thống kê trình duyệt quan trọng hiện nay. (IE7/8) – shannon

+16

BTW: Phiên bản không có tiền tố phải đi sau phiên bản tiền tố, không phải trước đó. Xem https://developer.mozilla.org/Writing_Forward_Compatible_Websites Ngoài ra, theo kinh nghiệm của tôi, rất nhiều tình huống calc() có thể được thay thế bằng 'box-sizing'. – luiscubal

+1

"expression()" gây ra vấn đề, bởi vì trình duyệt tính toán lại các chức năng (bên trong các biểu thức) trên mỗi điểm ảnh của di chuyển chuột, nó tác động đến việc sử dụng bộ vi xử lý. Và trong trường hợp này (với calc) điều này xảy ra? – 19WAS85

159

Một DIV tự động chụp rộng mẹ của. Vì vậy, không cần phải xác định bất kỳ width. Thông thường chỉ đơn giản là sẽ viết nó như thế này:

div{ 
    margin-right:50px; 
} 

Kiểm tra này fiddle

+11

Làm thế nào về [this] (http://jsfiddle.net/Nw3yd/3/) vs [this] (http://jsfiddle.net/Nw3yd/4/)? – Chango

+4

@Chango - [Điều đó] (http://jsfiddle.net/Nw3yd/4/) là hoàn toàn tuyệt vời khi bạn thay đổi kích thước cửa sổ. –

+1

@Chango có thể là bạn muốn đạt được http://jsfiddle.net/Nw3yd/6/ – sandeep

37

lựa chọn khác là định vị tuyệt đối.

div { 
    position: absolute; 
    left: 0; 
    right: 50px; 
} 

fiddle

Nhưng, giải pháp Sandeep là một trong những bạn thường nên sử dụng. Chỉ cần tránh lạm dụng float. Điều này ngăn cản các yếu tố tự nhiên làm đầy container của họ.

-4

Vâng, chúng tôi có thể làm điều đó bằng cách làm cho

#custom_div{ 
width:100%; 
margin-right:50px; 
} 

Cảm ơn

+4

lý do bạn xác định chiều rộng: tự động; – sandeep

+9

Đây là câu trả lời giống như của sandeep, ngoài 'width: auto;', không có hiệu lực. Câu trả lời của bạn không thêm bất kỳ giá trị nào cả. Thay vì đăng phiên bản của riêng bạn của câu trả lời của sandeep bạn nên có upvoted câu trả lời của sandeep. –

7

Giải pháp của tôi làm việc có và không có float: left.

HTML:

<div></div> 

css:

div { 
    height: 20px; 
    background: black; 
    float: left; 
    width: 100%; 
    padding-right: 50px; 
    box-sizing: border-box; 
    background-clip: content-box; 
}​ 

Demo

Compatibility:
Firefox 3.6, Safari 5, Chrome 6, Opera 10, IE 9

+2

Các div trong phương pháp của bạn vẫn chiếm tất cả chiều rộng của màn hình, vì vậy nếu bạn đặt hai trong số chúng, bạn không thể làm cho chúng nổi bên cạnh cái khác. – Chango

4

jsFiddle

Sử dụng màn hình blockmargin. display:block khi không được kết hợp với một số height/width được xác định sẽ cố gắng điền vào đó là cấp độ gốc.

header { 
    width:100%; 
    background:#d0d0d0; 
    height:100%; 
} 
h1 { 
    display:block; 
    border:#000 solid 1px; 
    margin:0 50px 0 0; 
    height:100px; 
} 
<header> 
    <h1></h1> 
</header> 
Các vấn đề liên quan