2013-08-28 3 views
0

브라우저에서로드 할 때, 브라우저 지원, 내가 생각하지 못한 것 등. 자바 스크립트로 선언 된 스타일의 대부분 또는 전부가 최종 사용자 대 CSS 스타일 시트?자바 스크립트 스타일 CSS 스타일 시트

나는 아래 그림과 함께 간단한 예를 던져뿐만 아니라이 Fiddle

HTML :

<body onload="init();"> 
    <div class="container"> 
     <div class="row"> 
      <div class="col"></div> 
      <div class="col"></div> 
      <div class="col"></div> 
     </div> 
     <div class="row"> 
      <div class="col"></div> 
      <div class="col"></div> 
     </div> 
    </div> 
</body> 

자바 스크립트 :

var init = function() { 
    // Using window object to set global variables 
    // since global variables are attached to the window object anyway 
    window.container = document.getElementsByClassName("container"); 
    window.row = document.getElementsByClassName("row"); 
    // Initialize variables 
    window.rows = []; 
    window.cols = []; 

    // Get chidren counts but also setup for future use 
    window.setCounts(); 
    // Now lets calculate the widths 
    window.setWidths(); 
}; 

window.setCounts = function() { 
    for (var c = 0; c < window.row.length; c++) { 
     window.rows.push(window.row[c]); 
     window.rows[c].row_count = 0; 
     for (var i = 0; i < window.row[c].children.length; i++) { 
      if (window.row[c].children[i].className === 'col') { 
       window.rows[c].row_count += 1; 
      } 
     } 
    } 
}; 

// When the screen is resized we need to refactor the widths 
window.onresize = function(event) { 
    window.setWidths(); 
}; 

window.setWidths = function() { 
    window.wWidth = window.innerWidth; 
    window.wHeight = window.innerHeight; 
    var container_width = window.wWidth * 0.95; 
    var row_width = container_width * 0.98; 

    for (var i = 0; i < window.container.length; i++) { 
     window.container[i].style.width = (window.wWidth * 0.97) + "px"; 
     window.container[i].style.height = ((window.wHeight * 0.90)) + "px"; 
    } 

    for (var c = 0; c < window.rows.length; c++) { 
     window.rows[c].style.width = row_width + "px"; 
     for (var i = 0; i < window.rows[c].children.length; i++) { 
      if (window.rows[c].children[i].className === 'col') { 
       window.rows[c].children[i].style.width = (row_width/window.rows[c].row_count) + "px"; 
       window.rows[c].children[i].innerText = (row_width/window.rows[c].row_count) + "px"; 
      } 
     } 
    } 
}; 

그리고 마지막으로 CSS (임시, 고민 모든 적용 자바 스크립트 내 스타일) :

div { 
    overflow: hidden; 
} 
.container { 
    margin: auto; 
    margin-top: 5px; 
    border: 1px solid red; 
} 
.row { 
    margin: auto; 
    margin-top: 5px; 
    border: 1px solid black; 
    clear: both; 
} 
.col { 
    float: left; 
    text-align: center; 
} 
012 3,516,

참고 :
내가 JQuery와 같은 외부 라이브러리를 구현 피하기 위해 같은 것, 나는 위의이 코드가 JQuery와 함께 할 쉬울 것이라는 점을 알고있다. 지금까지 필자는 외부 라이브러리를 AngularJS에 응용 프로그램의 백본으로 제한 했으므로 웹 응용 프로그램의 업그레이드 및 중단 가능성을 줄일 수 있습니다. 그것은 선호와 장수의 문제입니다 (제 의견으로는), 그렇지 않으면 저를 설득하려고하지 마십시오.

+1

CSS가 더 빠르고 빠릅니다. –

+1

이 자료를 되돌릴 수있는 자료가 있습니까? 선호도의 문제인가요, 아니면 당신에게 더 쉬운가? 그 이유는 무엇입니까? – jnthnjns

+1

"resize"핸들러에서 모든 작업을 수행하면 ** 매우 ** 부진한 응용 프로그램이 생성됩니다. – Pointy

답변

5

DOM 스타일 시트는 DOM이 완전히로드되기 전에로드 할 수 있습니다. 즉, DOM 객체가 표시되기 전에 즉시 적용 할 수 있습니다.

자바 스크립트를 통해 객체에 직접 적용된 CSS 스타일은 DOM 객체가 처음 표시되어 DOM 객체가 파싱되기 전에는 적용될 수없는 경우가 종종 있습니다. 예를 들어 페이지에 객체를 숨기려면 <head> 섹션에서로드 한 CSS 규칙에 객체를 지정하면 해당 객체가 표시되지 않습니다. 객체를 숨기려면 자바 스크립트를 통해 CSS를 할당하면 객체가 처음에 나타나고 자바 스크립트가 숨겨져 실행됩니다.


또한, 표시 및 동작 사이의 분리 (CSS와 스크립트 동작 제어에 의해 제어되는 프레젠테이션) 종종 바람직하다 일반적인 개념이있다. 두 가지가 완전히 분리 될 수는 없지만 사이트의 "보기"와 "표현"에 대해 주로 작업하는 대개 프로젝트의 다른 사람들과 사이트의 "상호 작용"또는 "행동"에 대한 작업이 서로 다릅니다. 별도의 장소에서 다른 측면을 제어하는 ​​주요 측면을 유지하는 것은 사이트를 유지 관리하는 데 매우 유용 할 수 있습니다. 예를 들어 회사는 색 구성표를 변경하기로 결정할 수 있으며 가능한 모든 자바 스크립트를 검색하여 모든 색 참조를 찾는 것이 아니라 일부 CSS를 찾고 수정하는 것이 훨씬 간단 할 수 있습니다.


, 당신은 자바 스크립트를 사용하여 특정 스타일을받을 오브젝트를 지정해야하는 경우가 마지막으로 있다면, 당신은 여전히 ​​CSS 규칙의 스타일링 정보를 넣어 동적 객체에 클래스를 추가하기 위해 자바 스크립트를 사용할 수 있습니다. 그런 식으로 표현은 CSS 규칙을 "유지하기 쉽도록"지정됩니다.


모두 CSS는 모든 것을 수행 할 수 없습니다. 특히 계산을 할 수 없으며 때로는 복잡한 레이아웃을 사용하여 목표를 달성하는 데 도움이되는 일부 자바 스크립트를 사용하는 것이 더 간단하거나 더 신뢰할 수 있습니다. 여기에 제시된 아이디어는 표현과 행동을 최대한 분리하여 목표에 도달하는 가장 간단하고 유지 보수가 용이 한 방법을 선택하는 것입니다.

3

CSS는 JavaScript보다 훨씬 관리하기 쉬우 며 CSS를 사용하면 JavaScript로 모방하기가 매우 어렵습니다.

add/remove_class와 같은 메커니즘을 통해 CSS의 동적 특성을 최대한 활용할 수 있습니다.

샘플 코드는 일부 치수 계산을 수행하는 것처럼 보입니다. CSS는 항상 이것을 처리 할 수는 없으므로이 제한된 용도로 JavaScript가 더 좋습니다.

+1

그게 내가 기대고있는 곳이야. 이 질문은 클래스/id 선언의 과도한 양, 예를 들어'span1'에서'span12'를 피하고 가능한 한 자동화 된 것으로 만들기로 결정했을 때 나온 것입니다. 이것이 저의 견해가이 부분에 집중 한 이유입니다. 귀하의 의견을 보내 주셔서 감사합니다. +1 – jnthnjns