2017-10-26 8 views
0

스타일 시트에서 다음 CSS 스타일을 표현하는 세련된 (즉, 비 장황한) 방법이 있습니까?CSS에서 예측 가능한 반복 패턴을 표현하는 방법은 무엇입니까?

for (var i = 1; i < 20; i++) { 
    var nestedLists = 'ul '; 
    var selector = 'left: ' + (144 + (18 * i)) + 'px;'; 
    var lastRule = document.styleSheets[0].cssRules.length; 
    document.styleSheets[0].insertRule('.my-class ' + nestedLists.repeat(i) + ' li::after {' + selector + '}', lastRule); 
} 

하지만 표현하는 간결한 CSS - 기본 구문의 어떤 종류를 찾고 있어요 :

.my-class ul li::after {left: 162px;} 
.my-class ul ul li::after {left: 180px;} 
.my-class ul ul ul li::after {left: 198px;} 
.my-class ul ul ul ul li::after {left: 216px;} 
.my-class ul ul ul ul ul li::after {left: 234px;} 
.my-class ul ul ul ul ul ul li::after {left: 252px;} 
.my-class ul ul ul ul ul ul ul li::after {left: 270px;} 
.my-class ul ul ul ul ul ul ul ul li::after {left: 288px;} 
.my-class ul ul ul ul ul ul ul ul ul li::after {left: 306px;} 
.my-class ul ul ul ul ul ul ul ul ul ul li::after {left: 324px;} 
.my-class ul ul ul ul ul ul ul ul ul ul ul li::after {left: 342px;} 
.my-class ul ul ul ul ul ul ul ul ul ul ul ul li::after {left: 360px;} 
.my-class ul ul ul ul ul ul ul ul ul ul ul ul ul li::after {left: 378px;} 
.my-class ul ul ul ul ul ul ul ul ul ul ul ul ul ul li::after {left: 396px;} 
.my-class ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul li::after {left: 414px;} 
.my-class ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul li::after {left: 432px;} 
.my-class ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul li::after {left: 450px;} 
.my-class ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul li::after {left: 468px;} 
.my-class ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul li::after {left: 486px;} 

은 내가 계산 자바 스크립트에서 다음 루프를 사용하여 CSSOM에 위의 스타일 규칙을 추가 할 수 있다는 사실을 알고 가능한 경우 위의 줄.

예 :CSS 사용자 정의 등록 정보를 사용하여 뭔가를 영리하게 할 수 있습니까? 이하 또는 말대꾸를 사용


하시기 바랍니다 어떤 솔루션이 없습니다. 감사. 여기


는 절대 위치 ::after 가상 엘레멘트 디스플레이 스크린이다 질문 본문에 언급 된 바와 같이

enter image description here

+0

난 그렇게 생각하지 않습니다. 그러나이 스타일의 목적은 정확히 무엇입니까? 요소를 스타일링 할 때 다른 마크 업과 다른 접근 방식을 사용하여 동일한 레이아웃을 얻는 훨씬 좋은 방법이 종종 있습니다. – Bergi

+1

해결하려고하는 실제 문제를 강조하십시오. 분명히 그것에 대해 가장 우아한 방법이 아니기 때문에 - 당신이 찾고있는 진실한 대답을 얻기 위해 잘못된 질문을하고 있습니다. –

+0

이것은 대화 형 양식의 일련의 중첩 목록 용입니다. 사용자는 임의의 수의 새로운 중첩 목록을 열 수 있습니다. 이론적으로, UI에는 처음 25 개만 허용되지만 중첩 목록은 무한히 많을 수 있습니다. – Rounin

답변

0

을 한 가지 방법은 쓰기 일부 자바 스크립트를 배포하는 CSSOM에 대한 CSS 규칙, 계산식 :

예제 :

for (var i = 1; i < 20; i++) { 
 
    var nestedLists = 'ul '; 
 
    var selector = 'left: ' + (144 + (18 * i)) + 'px;'; 
 
    var lastRule = document.styleSheets[0].cssRules.length; 
 
    document.styleSheets[0].insertRule('.my-class ' + nestedLists.repeat(i) + ' li::after {' + selector + '}', lastRule); 
 
    console.log(document.styleSheets[0].cssRules[lastRule].cssText); 
 
}