Làm cách nào tôi có thể chia tỷ lệ toàn bộ trang web bằng CSS?


151

Sử dụng Firefox, bạn có thể phóng to toàn bộ trang web bằng cách nhấn CTRL +. Những gì nó làm là tỷ lệ phóng to toàn bộ trang web (phông chữ, hình ảnh, vv).

Làm cách nào để sao chép cùng chức năng bằng CSS đơn giản?

Có cái gì đó giống như page-size: 150%(sẽ tăng toàn bộ phần trang thêm x% không?)


7
Tính năng thu phóng trang của Firefox xuất hiện trong mọi trình duyệt hiện đại - sao chép nó có vẻ khá vô nghĩa.
Quentin

1
Tôi đồng ý với David. Có vẻ như vô nghĩa để sao chép điều này vì các trình duyệt ngày nay đã tích hợp tính năng này ....
người dùng

5
đây thực sự sẽ là một tính năng cực kỳ hữu ích cho các thiết bị di động. Rất nhiều điện thoại hiện đang tăng PPI của họ mà không tạo ra sự khác biệt (tất nhiên là ngoài iPhone4).
DA.

38
Nó không sao chép nó. Nó có thể hữu ích cho một cái gì đó như xem trước trang / phần tử trong div nhúng.
RichieHH

3
Nhà thiết kế trang phải có thể đặt thu phóng mặc định cho trang của mình. Tôi có một trang lớn khi tôi tạo nó, nhưng bây giờ nhỏ do màn hình độ phân giải cao: lonniebest.com/CardTrick Thay vì làm lại trang, tôi muốn được phóng to theo mặc định.
Lonnie hay nhất

Câu trả lời:


182

Bạn có thể sử dụng thuộc tính CSS zoom- được hỗ trợ trong IE 5.5+, Opera và Safari 4 và Chrome

Tôi có thể sử dụng: css Zoom

Firefox là trình duyệt chính duy nhất không hỗ trợ Zoom ( mục bugzilla tại đây ) nhưng bạn có thể sử dụng thuộc tính biến đổi "độc quyền" trong Firefox 3.5 .

Vì vậy, bạn có thể sử dụng:

div.zoomed { 
    zoom: 3; 
    -moz-transform: scale(3); 
    -moz-transform-origin: 0 0;
} 

1
Thuộc tính thu phóng độc quyền chỉ được hỗ trợ bởi IE. tham
Quentin

15
David, tài liệu tham khảo đó đã rất lỗi thời - hãy nhìn vào các phiên bản trình duyệt mà nó liệt kê. CSS Zoom được hỗ trợ trong tất cả các trình duyệt chính hiện tại trừ Firefox. Và nó không độc quyền hơn bất kỳ tiện ích mở rộng -moz- CSS nào.
Jon Galloway

3
Lưu ý: Tôi nghĩ rằng các giải pháp khác đã được đề xuất - chẳng hạn như tỷ lệ dựa trên em và% - là "thuần túy" hơn nhưng không nhất thiết phải thực tế trên hầu hết các bố cục web trừ khi bạn xây dựng theo cách đó từ đầu.
Jon Galloway

1
Tôi đã thử nghiệm Opera 10b2 và dường như nó không hỗ trợ nó. Firefox hàng đêm hành xử kỳ quặc (mảnh phóng to biến mất). IE5 / 6 bị lỗi. Chỉ hoạt động tốt trong WebKit.
Kornel

2
cảm ơn jon, thông tin tuyệt vời trong thang đo firefox -moz-Transform thực sự hoạt động, nhưng tùy thuộc vào trường hợp sử dụng của bạn, bạn có thể cần phải sửa vị trí của phần tử bằng cách sử dụng -moz-Transform-origin (cfr. developer.mozilla.org/En/CSS/-moz-transform -origin )
futtta

80

Đây là một câu trả lời khá muộn, nhưng bạn có thể sử dụng

body {
   transform: scale(1.1);
   transform-origin: 0 0;
   // add prefixed versions too.
}

để phóng to trang 110%. Mặc dù zoomphong cách là có, nhưng Firefox vẫn không hỗ trợ nó một cách đáng buồn.

Ngoài ra, điều này hơi khác so với thu phóng của bạn. Các css transformcông việc như phóng to hình ảnh, vì vậy nó sẽ phóng to trang của bạn nhưng không gây ra hiện tượng chỉnh lại, v.v.


Chỉnh sửa cập nhật nguồn gốc biến đổi.


1
Cảm ơn vì điều này, nhưng bạn cần một số dấu chấm phẩy giữa các khai báo. Ngoài ra, khi tôi thử điều này, trang đã dịch sang trái, qua lề trái, để phần bên trái của trang không còn hiển thị nữa. Việc thêm các khai báo "... Transform-origin: 0 0" tương ứng đã sửa lỗi đó.
Dave Burton

vâng, tôi nên đề cập rằng nội dung được cắt bớt transform. Cảm ơn các bình luận.
kumarharsh

1
Tôi đồng ý với @Dave Burton: sử dụng transform-origin: 0 0;làm những gì tôi muốn. Ví dụ: để phóng to trang tới 150% : transform: scale(1.5); transform-origin: 0 0;. Tôi tin rằng câu trả lời hay của @kumar_harsh nên được sửa lại.
Kai Carver

@KaiCarver nếu bạn sử dụng phương pháp này, nó sẽ luôn dẫn đến việc cắt. Không có vấn đề mà chỉ bạn sử dụng cho transform-origin. Những gì tôi đã viết chỉ là một ví dụ về giá trị sử dụng. Bạn hoàn toàn có thể sử dụng miễn phí transform-origin: 0 0nếu phù hợp với trường hợp sử dụng của bạn (hoặc nếu bạn không quan tâm đến những gì ở góc dưới bên phải)
kumarharsh

@AngularM bạn có thể chia sẻ một đoạn mã để hiển thị hành vi không? Tôi chắc chắn có một số lý do khác cho việc này.
kumarharsh

18

Nếu CSS của bạn được xây dựng hoàn toàn xung quanh exhoặc emđơn vị, thì điều này có thể khả thi và khả thi. Bạn chỉ cần khai báo font-size: 150%theo phong cách của bạn cho bodyhoặc html. Điều này sẽ gây ra mọi độ dài khác để chia tỷ lệ. Tuy nhiên, bạn không thể chia tỷ lệ hình ảnh theo cách này, trừ khi chúng cũng có kiểu dáng.

Nhưng dù sao đó cũng là một vấn đề rất lớn nếu trên hầu hết các trang web.


3
Điều đó sẽ chỉ thay đổi kích thước phông chữ của tôi. CTRL + cũng đề xuất mở rộng chiều rộng, chiều cao và kích thước hình ảnh cố định.

2
Tôi biết, nhưng nó gần như bạn có thể có với CSS thuần túy. Ngoài ra, không chỉ phông chữ của bạn thay đổi mà mọi thứ trong đó kích thước được chỉ định là bội số của kích thước phông chữ. Ý nghĩa, mọi thứ bạn sử dụng %, emhoặc exđơn vị.
Joey

1
Điều đó không đúng. Tôi đã thử nghiệm giải pháp tôi liệt kê bên dưới (thuộc tính zoom + -moz-Transform) và nó hoạt động trên FF3.5, IE6 +, Safari và Opera. Nó chia tỷ lệ hình ảnh cũng như văn bản. Bạn có thể chia tỷ lệ các trang trong CSS.
Jon Galloway

6

Như Johannes nói - không đủ đại diện để nhận xét trực tiếp về câu trả lời của anh ấy - bạn thực sự có thể làm điều này miễn là kích thước của tất cả các yếu tố được chỉ định là bội số của kích thước phông chữ. Có nghĩa là, mọi thứ bạn sử dụng%, em hoặc ex các đơn vị". Mặc dù tôi nghĩ rằng% dựa trên việc chứa phần tử, không phải cỡ chữ.

Và thông thường bạn sẽ không sử dụng các đơn vị tương đối này cho hình ảnh, vì chúng bao gồm các pixel, nhưng có một mẹo giúp việc này trở nên thực tế hơn rất nhiều.

Nếu bạn xác định body{font-size: 62.5%};thì 1em sẽ tương đương với 10px. Theo tôi biết điều này hoạt động trên tất cả các trình duyệt chính.

Sau đó, bạn có thể chỉ định (ví dụ) hình ảnh vuông 100px của mình với width: 10em; height: 10em;và giả sử tỷ lệ của Firefox được đặt thành mặc định, hình ảnh sẽ có kích thước tự nhiên.

Tạo body{font-size: 125%};và mọi thứ - bao gồm cả hình ảnh - sẽ có kích thước gấp đôi ban đầu.


Tôi không hiểu, nếu tôi nói cơ thể {font-size: 62,5%; cỡ chữ: 125%} - làm thế nào để xác định 1em là 10px. Trình duyệt có thể đơn giản bỏ qua khai báo kích thước phông chữ đầu tiên và sau đó chỉ cần thực hiện 125% = 10px?

Tôi nghĩ bạn hiểu lầm. bạn sẽ không làm cả hai cùng một lúc. 62,5 x2 = 125 ... để hiển thị cách bạn có thể chia tỷ lệ mọi thứ bằng cách điều chỉnh giá trị.
Ape-inago

Vâng. Tôi nên nói rằng 'sau đó nếu bạn sử dụng Javascript để đặt thân {font-size: 125%} thì tất cả các thành phần trang sẽ tăng gấp đôi kích thước'.
e100

3

Với mã này 1em hoặc 100% sẽ bằng 1% chiều cao cơ thể

document.body.style.fontSize = ((window.innerHeight/100)*6.25)+"%"

2
 * {
transform: scale(1.1, 1.1)
}

điều này sẽ biến đổi mọi yếu tố trên trang


1

Jon Tan đã làm điều này với trang web của mình - http://jontangerine.com/ Tất cả mọi thứ bao gồm cả hình ảnh đã được tuyên bố trong ems. Mọi điều. Đây là cách đạt được hiệu quả mong muốn. Thu phóng văn bản và thu phóng màn hình mang lại kết quả gần như chính xác.


1

CSS sẽ không thể phóng to theo yêu cầu, nhưng nếu bạn kết hợp CSS với JS, bạn có thể thay đổi một số giá trị để làm cho trang trông lớn hơn. Tuy nhiên, như đã nói, tính năng này là tiêu chuẩn hiện nay trong các trình duyệt hiện đại: không cần phải sao chép nó. Như một vấn đề thực tế, việc sao chép nó sẽ làm chậm trang web của bạn (nhiều thứ cần tải hơn, nhiều JS hoặc CSS hơn để phân tích hoặc thực thi và áp dụng, v.v.)


Đây là một tính năng trình duyệt tiêu chuẩn, nhưng thêm tính năng trực tiếp vào trang web có nghĩa là bạn không phải phụ thuộc vào (1) chuyên môn của người dùng với trình duyệt họ chọn và (2) hướng dẫn dành riêng cho trình duyệt
Ags1

1

Tôi có đoạn mã sau chia tỷ lệ toàn bộ trang thông qua các thuộc tính CSS. Điều quan trọng là đặt body.style. Thong thành nghịch đảo của thu phóng để tránh cuộn ngang. Bạn cũng phải đặt gốc biến đổi thành trên cùng bên trái để giữ phía trên bên trái của tài liệu ở trên cùng bên trái của cửa sổ.

        var zoom = 1;
        var width = 100;

        function bigger() {
            zoom = zoom + 0.1;
            width = 100 / zoom;
            document.body.style.transformOrigin = "left top";
            document.body.style.transform = "scale(" + zoom + ")";
            document.body.style.width = width + "%";
        }
        function smaller() {
            zoom = zoom - 0.1;
            width = 100 / zoom;
            document.body.style.transformOrigin = "left top";
            document.body.style.transform = "scale(" + zoom + ")";
            document.body.style.width = width + "%";
        }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.