이 글에서는 js에서 자동 rem 매칭과 글꼴 크기 계산의 예를 주로 소개합니다. 편집자는 꽤 좋다고 생각해서 지금 공유하고 참고용으로 제공하겠습니다. 편집자를 따라 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.
실제 개발 과정에서 다양한 너비와 높이 계산으로 인해 혼란을 겪는 경우가 많습니다. 특히 rem 계산 방법을 사용하는 적응형 레이아웃은 많은 프로그래머를 당황하게 합니다. 이런 문제를 해결하려면 js를 사용하여 화면 너비 변경을 모니터링하여 HTML 루트 요소인 글꼴 크기의 값을 변경할 수 있다고 생각합니다.
다음은 관련 JavaScript 구현 코드입니다.
(function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function () { var clientWidth = docEl.clientWidth; if (!clientWidth) return; if(clientWidth>=640){ docEl.style.fontSize = '100px'; }else{ docEl.style.fontSize = 100 * (clientWidth / 640) + 'px'; } }; if (!doc.addEventListener) return; win.addEventListener(resizeEvt, recalc, false); doc.addEventListener('DOMContentLoaded', recalc, false); })(document, window);
이 코드는 640px를 기본 값으로 선택합니다. 640px을 선택하는 이유는 무엇입니까?
페이지 너비 640px는 픽셀이 없도록 보장하는 안전한 최대 너비입니다. 모바일 페이지 양쪽 모두 공백으로 남겨두세요. 여기서 px는 장치의 물리적 픽셀과 다른 CSS 논리 픽셀입니다. 예를 들어 iPhone 5는 Retina 화면을 사용하고 2px x 2px의 장치 픽셀을 사용하여 1px x 1px의 CSS 픽셀을 나타내므로 장치 픽셀 번호는 640 x 1136px이고 CSS 논리 픽셀 번호는 320 x 568px입니다. .
그래서 모바일 페이지로 전환하려면 렌더링 너비를 640px로 조정해야 합니다.
예를 들어 페이지의 p 너비가 60이고 높이가 65인 경우 다음과 같이 스타일을 직접 작성할 수 있습니다.
{ width:0.6rem; height:0.65rem }
브라우저 호환성
rem은 CSS3 A에서 새로 도입되었습니다. 측정 단위로 인해 모든 사람은 분명히 브라우저 지원에 대해 좌절감을 느끼고 걱정할 것입니다. 실제로 Mozilla Firefox 3.6+, Apple Safari 5+, Google Chrome, IE9+ 및 Opera11+와 같이 지원되는 브라우저가 꽤 많다는 사실에 놀라지 마세요. 불쌍한 IE6-8은 할 수 없기 때문에 그냥 투명하게 취급하십시오. 저는 항상 이랬습니다.
그러나 단위를 사용하여 글꼴을 설정할 때 IE를 완전히 무시할 수는 없습니다. 이 REM을 사용하고 싶지만 IE에서 효과와도 호환되기를 원한다면 "px"와 "rem"을 함께 사용하는 것을 고려해 볼 수 있습니다. IE6-8에서 효과를 얻으려면 "px"를 사용하고 브라우저의 효과를 얻으려면 "Rem"을 사용하십시오. Ie6-8이 텍스트 변경으로 변경되지 않도록 놔두세요. 누가 Ie6-8을 그렇게 오래되게 만들었나요? 시도하고 싶지 않다면 꽤 흥미로울 것입니다. 아마도 이것이 측정의 주류 단위가 될 것입니다.
전체 예제 코드:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" /> <meta content="telephone=no" name="format-detection" /> <meta name="format-detection" content="email=no" /> <meta http-equiv="Cache-Control" content="no-cache"/> <title>响应式布局</title> <style> html{font-size: 20px;width: 100%;height: 100%;} body{margin: 0;padding: 0;} header,footer{width: 100%;background: #17A578;color: #fff;font-size:1rem;text-align: center;line-height: 2rem;} .footer{position: fixed;bottom: 0;} .box{} .public{width: 5rem;height: 5rem;font-size: 1.2rem;display: inline-block;text-align: center;color: #fff;line-height: 5rem;margin-top: 1rem;} .left{background: #f00;} .center{background: #048F74;} .right{background: #000;} </style> </head> <body> <header>页面头部</header> <p class="box"> <p class="public left">左</p> <p class="public center">中</p> <p class="public right">右</p> <p class="public left">左</p> <p class="public center">中</p> <p class="public right">右</p> </p> <footer class="footer">页面底部</footer> <script> //orientationchange方向改变事件 (function (doc, win) { var docEl = doc.documentElement,//根元素html //判断窗口有没有orientationchange这个方法,有就赋值给一个变量,没有就返回resize方法。 resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function () { var clientWidth = docEl.clientWidth; if (!clientWidth) return; //把document的fontSize大小设置成跟窗口成一定比例的大小,从而实现响应式效果。 docEl.style.fontSize = 20 * (clientWidth / 320) + 'px'; }; //alert(docEl) if (!doc.addEventListener) return; win.addEventListener(resizeEvt, recalc, false);//addEventListener事件方法接受三个参数:第一个是事件名称比如点击事件onclick,第二个是要执行的函数,第三个是布尔值 doc.addEventListener('DOMContentLoaded', recalc, false)//绑定浏览器缩放与加载时间 })(document, window); //alert(document.documentElement.clientWidth/320) </script> </body> </html>
관련 권장 사항:
html5페이지 rem 레이아웃 적응 방법 자세한 설명
javascript는 반응형 개발 예제 공유를 위해 rem을 사용합니다.
위 내용은 js는 rem 자동 일치 및 글꼴 크기 계산을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!