CSS 파일을 <head> 또는 <body> 안에 넣으면 차이점은 무엇입니까?


155

일반적으로 CSS 파일은 안에 <head></head>넣습니다. 안에 넣으면 <body></body>어떤 차이가 있습니까?

답변:


116

jdelStrother가 w3 사양과 ARTstudio에 대해 브라우저 렌더링에 대해 언급 한 내용을 추가하기 만하면됩니다.

<body>시작 하기 전에 CSS를 선언하면 스타일이 실제로로드되었으므로 권장 됩니다. 따라서 사용자는 화면에 무언가가 나타나는 것을 볼 수 있습니다 (예 : 배경색). 그렇지 않으면 CSS가 사용자에게 도달하기 전에 일정 시간 동안 빈 화면이 표시됩니다.

또한 스타일을에서 어딘가에두면 <body>선언 된 스타일이 구문 분석 될 때 브라우저가 페이지를로드 할 때 (로드 할 때 새롭고 오래된 것) 다시 렌더링해야합니다.


10
물론 HTML5에서는 괜찮습니다. 그러나 렌더링 측면에서 브라우저는 내가 언급 한 것처럼 페이지를 다시 렌더링하기 때문에 속도가 느려질 수 있습니다.
mauris

4
예, 의심 할 여지가 없습니다. 방금 수락 된 답변을 읽는 사람들이 그것을 놓치지 않도록 여기에 추가했습니다. :)
Vilx-

3
@Vilx는 잘못된 정보입니다! link그리고 style그들 중 하나 (스타일) 범위 경우를 제외하고 본문에 표시하거나 속성이 없어야합니다 itemprop(링크) 선언합니다.
Christoph

2
@Christoph 이것은 사실이 아니며 html5 및 html4.1 style흐름 요소 이며 (범위가 지정되지 않은 경우에도) 본문에 넣을 수 있습니다.
Kpym

1
@Kpym 당신은 파티에 3 년 늦었습니다 ;-) 그러나 당신은 맞습니다, 스타일은 이제 흐름 요소이며 scoped속성은 더 이상 사용되지 않습니다.
Christoph

40

HTML 스펙의 최신 버전은 이제 <style>body 요소 내 에서 태그를 허용합니다 . https://www.w3.org/TR/html5/dom.html#flow-content 또한 태그 scoped가 있어야하는 전제 조건 이 이제 더 이상 사용되지 않습니다.stylebody

즉, style원하는 곳 어디에서나 태그를 사용할 수 있으며 브라우저가 페이지 트리에서 스타일을 한 번 더 떨어 뜨리면 리플 로우 / 재 도장으로 인해 페이지 성능이 저하 될뿐입니다.

더 이상 사용되지 않는 답변 :

<style>태그 내에 허용되지 <body>W3 사양에 따라. (물론 <div style="color:red">필요한 경우 인라인 스타일을 적용 할 수 있지만 일반적으로 스타일과 내용의 분리가 좋지 않은 것으로 간주됩니다)


3
이것은 사실이 아니며, html 5 및 4.1 <style>흐름 요소 이며 다른 흐름 요소와 같이 본문에 넣을 수 있습니다.
Kpym

1
답변을 최신 상태로 유지 한 내 +1!
Benjamin

14

본문에 CSS를 넣으면 나중에로드됩니다. 브라우저가 인터페이스를 더 빨리 그리기 시작할 수 있도록하는 기술입니다 (즉, 차단 단계를 제거함). 이는 스마트 폰의 사용자 경험에 중요합니다.

나는 하나의 작은 CSS를 유지하기 위해 최선을 다하고 <head>나머지는 맨 아래로 움직입니다. 예를 들어, 페이지가 JQuery UI CSS를 사용하는 경우 항상 <body>JQuery 자바 스크립트 링크 바로 앞에 페이지를 맨 아래로 이동합니다 . 적어도 Jquery가 아닌 모든 항목을 이미 그릴 수 있습니다.


7

헤드는 (W3C 인용)을 위해 설계되었습니다 :

"제목, 검색 엔진에 유용한 키워드 및 문서 내용으로 간주되지 않는 기타 데이터와 같은 현재 문서에 대한 정보 "

HTML 문서전역 구조를 참조하십시오 . CSS는 문서 내용이 아니므로 헤드에 있어야합니다.

또한 다른 모든 웹 개발자는 그것을 볼 것으로 예상하므로 작동하더라도 본문에 넣는 것으로 혼동하지 마십시오!

본문에 넣어야하는 유일한 CSS는 인라인 CSS 이지만 일반적으로 인라인 스타일은 피합니다.


3
나는 당신이 말하는 것을 완전히 따릅니다. 그러나 많은 페이지가있는 상황을 어떻게 처리합니까? 일부 페이지에는 별도의 파일 (내 경우에는 .NET Razor 부분 페이지)의 내용이 포함되어 있으며 해당 파일이 포함될 때마다 특정 스타일 시트도 연결되어야합니까? 각 includ_ing_ing 페이지의 머리글에 링크하거나 includ_ed_ 페이지의 본문에 링크하십시오. 전자는 "css in header"를 준수하고 후자는 "한 번 작성"을 따릅니다.
OutstandingBill

4

표준 ( HTML 4.01 : 스타일 요소 )은 스타일 태그가 헤드 태그 내에서만 허용되도록 명확하게 지정합니다. body 태그에 스타일 태그를 넣으면 브라우저는 가능하면 최대한 활용하려고 시도합니다.

엄격한 문서 유형을 지정하면 브라우저가 본문의 스타일 태그를 무시할 수 있습니다. 현재 브라우저 에서이 작업을 수행하는지 여부는 알 수 없지만 스타일 요소를 배치하는 위치에 대해 모든 버전이 완화 될 것이라고는 생각하지 않습니다.


1
@Pacerier : HTML5에서 style태그는 scoped속성 이있는 경우 본문에서 허용됩니다 .
Guffa


2
@Pacerier : 그 의견의 정보가 불완전하기 때문입니다. body 태그에 스타일 태그가있을 수 있지만 범위 속성이있는 경우 에만 가능합니다. 다음은 스타일 태그를 지정하는 표준 문서입니다. dev.w3.org/html5/spec-preview/the-style-element.html
Guffa

W3 범위에 따르면 속성은 firefox에서만 지원되므로 요점은 무엇입니까?
JSON


1

이전 답변뿐만 아니라, 요소 내에 스타일 코드 블록을 퍼팅 불구하고 있습니다 현대적인 브라우저에서 작동, 브라우저가 텍스트로 코드를 렌더링하는 것이 특히 이전 버전의 브라우저로, 항상 위험이있다 (즉, 아직 바로하지 않습니다하지만) 스타일 섹션이 CDATA 섹션에 포함되지 않는 한.

물론 인라인 스타일 이외의 요소에 요소를 넣으면 W3C HTML / XHTML 사양을 충족하지 않으므로 본문에 페이지가 있으면 W3C 유효성 검사기에서 오류가 발생한다는 것입니다. 모든 코드가 유효하면 예기치 않은 디스플레이 문제를 쉽게 버그 검색하여 실수를 쉽게 발견 할 수 있습니다. 유효하지 않은 HTML 요소는 코드에서 발생하는 위치를 넘어서서 모든 요소의 소급에 부정적인 영향을 줄 수 있으므로 브라우저가 유효하지 않은 요소를 발견하면 표시 방법에 대해 가장 잘 추측 할 수 있으며 브라우저마다 렌더링 방식에 따라 다른 결정을 내릴 수 있습니다.

전환 또는 엄격한 doctype을 사용하든 (X) HTML 사양에 따라 여전히 유효하지 않습니다.


0

실제로 스타일을 본문에 넣음으로써 CSS 사용의 목적을 물리치게됩니다. 요점은 컨텐츠를 프리젠 테이션 (및 기능)과 분리하는 것입니다. 이렇게하면 스타일이 아닌 스타일 시트에서 내용을 변경할 수 있습니다. 인라인 스타일 방법을 사용하면 인라인 스타일이있는 모든 페이지를 하나씩 변경해야합니다. 한 페이지 나 세 개 또는 열 개를 놓칠 수 있으므로 지루하고 위험합니다.

스타일 시트를 사용하면 스타일 시트 만 변경하면됩니다. 변경 사항은 스타일 시트에 링크 된 모든 HTML 페이지에 자동으로 전파됩니다.

neonble의 요점은 또 다른 큰 이유입니다. CSS 인라인을 추가하여 HTML을 망칠 경우 렌더링이 문제가됩니다. HTML은 코드에 예외를 발생시키지 않습니다. 대신에 밖으로 나가서 최선의 방법으로 렌더링하고 계속 진행합니다.

스타일 시트를 사용하여 웹 표준을 준수하면 더 나은 웹 사이트를 만들 수 있습니다. 페이지의 내용이 원하는 방식과 정확히 일치하지 않기 때문에 도움이 필요한 경우 CSS를 본문과 반대로 머리에 배치하면 자신과 도움을 요청하는 사람이 훨씬 더 나은 문제 해결을 할 수 있습니다.


2
나는 당신이 무엇을 말하는지 이해하지 못합니다. " 인라인 스타일 방법을 사용하면" -인라인 스타일 사용에 대해 누가 이야기하고 있습니까? 질문은 CSS 파일 이라고 합니다 .
TJ

0

두 가지 상충되는 답변 :

링크 태그의 MDN 페이지 에서 :

<link>요소는 하나의 발생 <head>또는 <body> 그 신체 확인하는 링크 유형을 갖고 있는지 여부에 따라, 요소. 예를 들어, 스타일 시트 링크 유형은 body-ok이므로 <link rel="stylesheet">본문에서 a 가 허용됩니다. 그러나 이것은 모범 사례가 아닙니다. <link>신체 내용과 요소 를 분리 하여 머리에 넣는 것이 더 합리적 입니다.

CSS에서 The Definitive Guide (제 4 판 / 2017) 10 페이지

외부 스타일 시트를 성공적으로로드하려면 헤드 요소 내부에 링크를 배치해야하지만 다른 요소에는 배치 할 수 없습니다.


-1

차이점이 있습니다. 페이지로드는 비동기식이므로 외부 스타일 시트가있는 경우 링크 태그에 도달하면 CSS 파일이 즉시로드되므로 맨 위에 표시하는 것이 좋습니다.


-1

어떤 차이가 있습니까?

장점 : 때로는 코드가 즉시 생성되고 (예 : PHP를 통해 빌드하고 동적으로 크기가 지정된 각 목록에 고유 한 클래스가 필요한 경우 (예 : 변환 항목 타이밍)) 특정 위치에 특정 속성을 적용하기가 더 쉽습니다.

단점 : 먼 미래에 언젠가는 느리게 작동하지 않을 수 있습니다.

그것에 대한 나의 일반적인 견해 :하지 않아도되지만,해야한다면 잠을 잃지 마십시오.


-3

<style>본문에 넣는 것은 모든 최신 브라우저에서 잘 작동합니다.

나는 이베이에서 이것을 사용하고 있었다.

작동하면 차지 마십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.