현재 CSS 미디어 쿼리를 사용하여 반응 형 웹 사이트를 개발 중입니다. 서버가 각 뷰포트마다 다른 HTML / CSS를 반환하면 훨씬 쉬울 것입니다.
HTML 파일을 요청할 때 클라이언트가 뷰포트 정보를 포함시킬 수없는 이유가 궁금합니다. 이 동작은 Accept-Language
헤더를 사용하여 올바른 언어로 웹 사이트를 반환하는 데 이미 일반적입니다 .
현재 CSS 미디어 쿼리를 사용하여 반응 형 웹 사이트를 개발 중입니다. 서버가 각 뷰포트마다 다른 HTML / CSS를 반환하면 훨씬 쉬울 것입니다.
HTML 파일을 요청할 때 클라이언트가 뷰포트 정보를 포함시킬 수없는 이유가 궁금합니다. 이 동작은 Accept-Language
헤더를 사용하여 올바른 언어로 웹 사이트를 반환하는 데 이미 일반적입니다 .
답변:
간단히 말해 Wild Wild Web이 작동하도록 설계된 방식은 아닙니다.
원래 디자인은 단순히 HTML이 브라우저에 문서에 대한 힌트를 준 것입니다. 강조 할 비트, 이미지 파일을 가져올 위치 글꼴 및 크기에 대한 결정은 브라우저 및 로컬 구성 설정의 작업이었습니다.
그렇습니다. 전 세계가 발전한 것을 알고 있습니다. 이제 웹 디자이너는 우리의 눈으로 보는 모든 픽셀을 제어 할 것으로 기대합니다. 과거에는 데스크탑 테마가 그렇게하는 일이었습니다.
나는 당신이 반응 형 웹 디자인 에 대한 아이디어를 완전히 얻지 못했다고 생각합니다 . 클라이언트의 웹 브라우저를 기반으로 다른 HTML / CSS / JS를 제공하는 것은 오래 전부터 있었으며 여전히 일부 웹 사이트가 여전히 존재한다고 확신합니다. 웹 사이트를위한 친절한 주제.
내 생각에 누락 된 것은 시나리오에서 사용자가 뷰 포트를 세로에서 가로로 변경하면 페이지를 새로 고치지 않으면 응답하는 대답을 얻지 못한다는 것입니다. 웹 브라우저 창의 크기를 조정하거나 기본 확대 / 축소를 변경하는 경우에도 동일한 조치가 필요합니다. 또한 페이지의 요소는 다른 요소에도 반응 할 수 있습니다. 예를 들어 오른쪽의 사이드 바를 숨기면 기본 컨텐츠가 변경에 응답합니다. 페이지를 새로 고치지 않으면 다시는 불가능합니다.
또한 HTTP 요청은 전체 웹 페이지 를 서버하도록 설계되지 않았습니다 . 대부분의 경우 뷰포트 메타 정보를 전달할 필요가없는 일반 데이터, 파일, 이미지 등을 보내거나 받기위한 요청을 보내고 인터넷 과 같은 규모의 오버 헤드 가 많이 발생합니다. .
당신이 있습니까 있는지 당신은 반응 디자인을하고있어? 반응 형 디자인은 기술적으로 유동적 인 디자인과 미디어 쿼리의 조합입니다.
유동적 인 디자인은 배치 방법에 대해 현명한 경우 뷰포트 문제의 90 %를 해결합니다. 미디어 쿼리는 현재 차원에 따라 그리드 특성을 변경하여 다른 10 %를 얻습니다.
유동적 (모든 곳의 비율, 모든 것의 상대적 크기, 픽셀로 지정된 것 등) 만하려고하면 뷰포트의 크기가 크게 다를 때 (데스크톱 가로보기와 비교하여) 할 문제가 발생합니다. 모바일 인물 사진). 2048px에서 640px로 갈 때 일부는 적합하지 않습니다. 미디어 쿼리 만 수행하려고하면 수십 및 수십 개의 미디어 쿼리가 중단되고 기본적으로 CSS 클래스를 미세 관리합니다. 두 방법 모두 RWD에는 적합하지 않습니다. 모든 것을 얻기 위해이 두 가지를 결합해야합니다.
내 충고 : 데스크탑 풍경, iPad 초상화 및 풍경, iPhone 초상화 및 풍경과 같은 3 가지 또는 4 가지의 "공칭 해상도 및 방향"을 만들고이를 와이어 프레임으로 처리하십시오. 그런 다음 해당 나누기에 대한 미디어 쿼리를 설정하십시오. 그런 다음 유동적 인 레이아웃을 사용하여 몇 가지 중단 점을 고수하기 위해 열심히 노력하십시오. 아마도 어떤 종류의 CSS 그리드 (수십 가지가 사전 빌드되어 있거나 직접 롤링 할 수 있음) 일 가능성이 큽니다.
컨텐츠를 가져 오는 동적 웹 사이트가있는 경우 다음과 같은 코드를 통해 트릭을 수행합니다 (ES6에서).
var headers = new Headers();
headers.set('window-w', window.innerWidth); // or $('html').width() with jQuery
headers.set('window-h', window.innerHeight); // or $('html').height() with jQuery
fetch(url, {'credentials': 'include', 'headers': headers})
.then(function(response) {
...
참고 : '자격 증명'은 세션 쿠키 용입니다.
그런 다음 서버 측에서 헤더를 읽을 수 있습니다 (예 : PHP).
$headers = getallheaders();
if (isset($headers['window-w']) and isset($headers['window-h'])) {
$window_w = 1 * $headers['window-w'];
$window_h = 1 * $headers['window-h'];
if ($window_w * $window_h > 0) {
...