jQuery를 사용하여 ::before
및 ::after
(및 세미콜론이있는 이전 버전과 같은) CSS 의사 요소를 선택 / 조작하는 방법이 있습니까?
예를 들어, 내 스타일 시트에는 다음 규칙이 있습니다.
.span::after{ content:'foo' }
jQuery를 사용하여 'foo'를 'bar'로 변경하는 방법
jQuery를 사용하여 ::before
및 ::after
(및 세미콜론이있는 이전 버전과 같은) CSS 의사 요소를 선택 / 조작하는 방법이 있습니까?
예를 들어, 내 스타일 시트에는 다음 규칙이 있습니다.
.span::after{ content:'foo' }
jQuery를 사용하여 'foo'를 'bar'로 변경하는 방법
답변:
데이터 속성을 사용하여 내용을 의사 요소에 전달한 다음 jQuery를 사용하여 다음을 조작 할 수도 있습니다.
HTML에서 :
<span>foo</span>
jQuery에서 :
$('span').hover(function(){
$(this).attr('data-content','bar');
});
CSS에서 :
span:after {
content: attr(data-content) ' any other text you may want';
}
'다른 텍스트'가 표시되지 않게하려면 이것을 다음과 같이 seucolega의 솔루션과 결합 할 수 있습니다.
HTML에서 :
<span>foo</span>
jQuery에서 :
$('span').hover(function(){
$(this).addClass('change').attr('data-content','bar');
});
CSS에서 :
span.change:after {
content: attr(data-content) ' any other text you may want';
}
attr
기능 을 사용하기위한 사양에 대한 링크가 content
있습니까? 이 말을 들어 본 적이 없어서 놀랍습니다 ...
attr()
CSS2 이외의 브라우저는 아직 구현 되지 않았지만 CSS2 자체 attr()
는 content
속성에 대해서만 정의 되었기 때문 입니다.
jQuery가 할 수있는 다른 모든 것에 대한 대답은 간단한 질문이라고 생각할 것입니다. 불행히도 문제는 기술적 인 문제로 귀결됩니다 . css : after 및 : before 규칙은 DOM의 일부가 아니므로 jQuery의 DOM 메소드를 사용하여 변경할 수 없습니다.
이 있습니다 자바 스크립트 및 / 또는 CSS 해결 방법을 사용하여 이러한 요소를 조작하는 방법; 사용하는 것은 정확한 요구 사항에 따라 다릅니다.
저는 "최고의"접근 방식으로 널리 간주되는 것으로 시작하겠습니다.
이 방법에서는, 당신은 이미 다른과의 CSS에서 클래스를 만들었습니다 :after
또는 :before
스타일. 이 "새"클래스를 나중에 스타일 시트에 배치하여 대체되도록하십시오.
p:before {
content: "foo";
}
p.special:before {
content: "bar";
}
그런 다음 jQuery (또는 바닐라 JavaScript)를 사용하여이 클래스를 쉽게 추가하거나 제거 할 수 있습니다.
$('p').on('click', function() {
$(this).toggleClass('special');
});
:before
이거나 :after
그렇지 않다그것은 포함하여 문서 스타일 시트에 직접 스타일을 추가 자바 스크립트를 사용하는 것이 가능 :after
하고 :before
스타일. jQuery는 편리한 지름길을 제공하지 않지만 다행히 JS는 그렇게 복잡하지 않습니다.
var str = "bar";
document.styleSheets[0].addRule('p.special:before','content: "'+str+'";');
.addRule()
관련 .insertRule()
방법 은 오늘날 상당히 잘 지원됩니다.
변형으로, jQuery를 사용하여 완전히 새로운 스타일 시트를 문서에 추가 할 수 있지만 필요한 코드는 더 깔끔하지 않습니다.
var str = "bar";
$('<style>p.special:before{content:"'+str+'"}</style>').appendTo('head');
값을 추가하는 것이 아니라 값을 "조작"하는 것에 대해 다른 접근 방식을 사용하여 기존 또는 스타일 을 읽을:after
:before
수도 있습니다 .
var str = window.getComputedStyle(document.querySelector('p'), ':before')
.getPropertyValue('content');
약간 짧은 코드를 위해 jQuery document.querySelector('p')
를 $('p')[0]
사용할 때 바꿀 수 있습니다 .
당신은 또한 할 수 있습니다 사용 attr()
하여 CSS에서 특정 DOM 속성을 읽을 수 있습니다. ( 브라우저가 지원하는 경우 :before
, 그것은 지원 attr()
뿐만 아니라. ) 이것을 결합하여 content:
몇 가지주의 깊게 준비 CSS, 우리는 (그러나 내용 변경 되지 않은 다른 특성, 마진 또는 색상 등)의 :before
및 :after
동적 :
p:before {
content: attr(data-before);
color: red;
cursor: pointer;
}
JS :
$('p').on('click', function () {
$(this).attr('data-before','bar');
});
CSS를 미리 준비 할 수없는 경우 두 번째 기술과 결합 할 수 있습니다.
var str = "bar";
document.styleSheets[0].addRule('p:before', 'content: attr(data-before);');
$('p').on('click', function () {
$(this).attr('data-before', str);
});
attr
CSS에서 URL 또는 RGB 색상이 아닌 콘텐츠 문자열에만 적용 할 수 있습니다비록 그것들이 다른 실제 DOM 요소들처럼 마치 CSS를 통해 브라우저에 의해 렌더링되지만, 의사 요소는 이름에서 알 수 있듯이 실제 요소가 아니기 때문에 의사 요소 자체는 DOM의 일부가 아닙니다. jQuery를 사용하여 직접 선택하고 조작하십시오 (또는 Selectors API 조차도 해당 하는 JavaScript API ). 이것은 누구의 스타일 당신이 스크립트를 수정하려는 모든 의사 요소에 적용되며 단지 ::before
및::after
.
CSSOM (think window.getComputedStyle()
)을 통해 런타임에 의사 요소 스타일에만 직접 액세스 할 수 있습니다..css()
의사 요소를 지원하지 않는 메소드 인 되지 않습니다.
예를 들어 다음과 같은 다른 방법을 항상 찾을 수 있습니다.
스타일을 하나 이상의 임의 클래스의 의사 요소에 적용한 다음 클래스 간을 전환 합니다 (빠른 예는 secolea의 답변 참조 ). 요소와 요소 상태, 사용 방식을 구분
문서 스타일 시트를 변경하여 위의 의사 요소에 적용되는 스타일 조작
의사 요소를 조작하기 위해 사용자 정의 속성 (일명 CSS 변수) 에 의존 할 수도 있습니다 . 우리는 사양 에서 읽을 수 있습니다 :
사용자 정의 속성은 일반 속성이므로 모든 요소에서 선언 할 수 있으며 일반 상속 및 계단식 규칙 으로 해결 되며 @media 및 기타 조건부 규칙으로 조건부로 만들 수 있으며 HTML 스타일 속성 에서 사용할 수 있으며 읽거나 설정할 수 있습니다 CSSOM 등을 사용하여
이를 고려하면 아이디어는 요소 내에서 사용자 정의 특성을 정의하는 것이며 의사 요소는 단순히 특성을 상속합니다. 따라서 쉽게 수정할 수 있습니다.
1) 인라인 스타일 사용 :
.box:before {
content:var(--content,"I am a before element");
color:var(--color, red);
font-size:25px;
}
<div class="box"></div>
<div class="box" style="--color:blue;--content:'I am a blue element'"></div>
<div class="box" style="--color:black"></div>
<div class="box" style="--color:#f0f;--content:'another element'"></div>
2) CSS와 클래스 사용
.box:before {
content:var(--content,"I am a before element");
color:var(--color, red);
font-size:25px;
}
.blue {
--color:blue;
--content:'I am a blue element';
}
.black {
--color:black;
}
<div class="box"></div>
<div class="box black" ></div>
<div class="box blue"></div>
3) 자바 스크립트 사용
document.querySelectorAll('.box')[0].style.setProperty("--color", "blue");
document.querySelectorAll('.box')[1].style.setProperty("--content", "'I am another element'");
.box:before {
content:var(--content,"I am a before element");
color:var(--color, red);
font-size:25px;
}
<div class="box"></div>
<div class="box"></div>
4) jQuery 사용
$('.box').eq(0).css("--color", "blue");
/* the css() function with custom properties works only with a jQuery vesion >= 3.x
with older version we can use style attribute to set the value. Simply pay
attention if you already have inline style defined!
*/
$('.box').eq(1).attr("style","--color:#f0f");
.box:before {
content:"I am a before element";
color:var(--color, red);
font-size:25px;
}
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
복잡한 값과 함께 사용할 수도 있습니다.
.box {
--c:"content";
--b:linear-gradient(red,blue);
--s:20px;
--p:0 15px;
}
.box:before {
content: var(--c);
background:var(--b);
color:#fff;
font-size: calc(2 * var(--s) + 5px);
padding:var(--p);
}
<div class="box"></div>
내가 구문을 고려하고 있음을 알 수 있습니다 var(--c,value)
.value
기본값이며, 또한 대체 값이라고합니다.
동일한 사양에서 다음을 읽을 수 있습니다.
사용자 정의 속성 값은 var () 함수를 사용하여 다른 속성 값으로 대체 할 수 있습니다. var ()의 구문은 다음과 같습니다.
var() = var( <custom-property-name> [, <declaration-value> ]? )
함수의 첫 번째 인수는 대체 할 사용자 정의 특성의 이름입니다. 함수에 대한 두 번째 인수 (제공된 경우)는 대체 값으로, 참조 된 사용자 정의 특성이 유효하지 않은 경우 대체 값으로 사용됩니다 .
그리고 나중에 :
속성 값에서 var ()를 대체하려면
var()
함수 에 대한 첫 번째 인수로 명명 된 사용자 정의 특성 이 애니메이션으로 오염되어 있고var()
함수가 애니메이션 특성 또는 그 중 하나에서 사용중인 경우 사용자 정의 특성을이 알고리즘의 나머지 부분에 대한 초기 값으로 간주하십시오.var()
함수 에 대한 첫 번째 인수로 명명 된 사용자 정의 특성 값이 초기 값 이외var()
의 값이면 해당 사용자 정의 특성 값으로 함수를 바꾸십시오 .- 그렇지 않으면
var()
함수가 두 번째 인수로 폴백 값을 갖는 경우 함수를 폴백 값으로 대체하십시오var()
. 있다면var()
대체 참고 문헌뿐만 아니라 그들을 대체합니다.- 그렇지 않으면
var()
함수가 포함 된 속성이 계산 된 값 시간에 유효하지 않습니다.
사용자 정의 속성을 설정하지 않거나 OR로 설정 initial
하거나 잘못된 값을 포함하면 폴백 값이 사용됩니다. initial
사용자 정의 특성을 기본값으로 재설정하려는 경우 사용이 유용 할 수 있습니다.
관련
CSS 사용자 정의 속성 (일명 CSS 변수) 내에 상속 값을 저장하는 방법은 무엇입니까?
CSS 변수는 관련있는 것으로 간주되는 모든 브라우저 (예 : IE 11)에서 사용하지 못할 수 있습니다. https://caniuse.com/#feat=css-variables
CSS에 정의 된 : after 및 : before 스타일 속성에 액세스하는 방법은 다음과 같습니다.
// Get the color value of .element:before
var color = window.getComputedStyle(
document.querySelector('.element'), ':before'
).getPropertyValue('color');
// Get the content value of .element:before
var content = window.getComputedStyle(
document.querySelector('.element'), ':before'
).getPropertyValue('content');
CSS를 통해 :: before 또는 :: after sudo 요소를 완전히 조작하려면 JS를 사용하면됩니다. 아래를보십시오;
jQuery('head').append('<style id="mystyle" type="text/css"> /* your styles here */ </style>');
<style>
요소에 ID가 어떻게 있는지 확인하십시오. 이 ID를 사용하면 스타일이 동적으로 변경되는 경우 요소를 제거하고 다시 추가 할 수 있습니다.
이런 식으로 요소는 JS의 도움으로 CSS를 통해 원하는 방식으로 정확하게 스타일됩니다.
HTML은 다음과 같습니다.
<div class="icon">
<span class="play">
::before
</span>
</div>
'전에'의 계산 스타일은 content: "VERIFY TO WATCH";
다음은 jQuery의 두 줄입니다.이 요소를 구체적으로 참조하기 위해 여분의 클래스를 추가하고 스타일 요소 (! important 태그 포함)를 추가하여 sudo-element의 컨텐츠 값의 CSS를 변경하는 아이디어가 사용됩니다.
$("span.play:eq(0)").addClass('G');
$('body').append("<style>.G:before{content:'NewText' !important}</style>");
모두 감사합니다! 나는 내가 원하는 것을 할 수 있었다 : D http://jsfiddle.net/Tfc9j/42/ 여기에서 살펴보십시오.
외부 div의 불투명도가 내부 div의 불투명도와 다르고 클릭 somwewhere로 변경되도록하고 싶었습니다.) 감사합니다!
$('#ena').on('click', function () {
$('head').append("<style>#ena:before { opacity:0.3; }</style>");
});
$('#duop').on('click', function (e) {
$('head').append("<style>#ena:before { opacity:0.8; }</style>");
e.stopPropagation();
});
#ena{
width:300px;
height:300px;
border:1px black solid;
position:relative;
}
#duo{
opacity:1;
position:absolute;
top:50px;
width:300px;
height:100px;
background-color:white;
}
#ena:before {
content: attr(data-before);
color: white;
cursor: pointer;
position: absolute;
background-color:red;
opacity:0.9;
width:100%;
height:100%;
}
<div id="ena">
<div id="duo">
<p>ena p</p>
<p id="duop">duoyyyyyyyyyyyyyy p</p>
</div>
</div>
append
사용은 html
최고입니다 예방
가짜 속성을 만들거나 기존 속성을 사용 하여 유사 요소의 스타일 시트에서 상속 할 수 있습니다.
var switched = false;
// Enable color switching
setInterval(function () {
var color = switched ? 'red' : 'darkred';
var element = document.getElementById('arrow');
element.style.backgroundColor = color;
// Managing pseudo-element's css
// using inheritance.
element.style.borderLeftColor = color;
switched = !switched;
}, 1000);
.arrow {
/* SET FICTIONAL PROPERTY */
border-left-color:red;
background-color:red;
width:1em;
height:1em;
display:inline-block;
position:relative;
}
.arrow:after {
border-top:1em solid transparent;
border-right:1em solid transparent;
border-bottom:1em solid transparent;
border-left:1em solid transparent;
/* INHERIT PROPERTY */
border-left-color:inherit;
content:"";
width:0;
height:0;
position:absolute;
left:100%;
top:-50%;
}
<span id="arrow" class="arrow"></span>
"content"속성에서 작동하지 않는 것 같습니다. (
실제 사용을 위해 이것을 쓰지 않았으므로 달성 할 수있는 것에 대한 예를 제공하기 위해 이것은 실용적이지 않습니다.
css = {
before: function(elem,attr){
if($("#cust_style") !== undefined){
$("body").append("<style> " + elem + ":before {" + attr + "} </style>");
} else {
$("#cust_style").remove();
$("body").append("<style> " + elem + ":before {" + attr + "} </style>");
}
}, after: function(elem,attr){
if($("#cust_style") !== undefined){
$("body").append("<style> " + elem + ":after {" + attr + "} </style>");
} else { $("#cust_style").remove();
$("body").append("<style> " + elem + ":after {" + attr + "} </style>");
}
}
}
이것은 현재 /를 추가하거나 필요한 요소를 포함하는 Style 요소를 추가하여 대상 요소의 Pseudo 요소 다음에 영향을 미칩니다.
이것은 다음과 같이 사용될 수 있습니다
css.after("someElement"," content: 'Test'; position: 'absolute'; ") // editing / adding styles to :after
과
css.before( ... ); // to affect the before pseudo element.
after : 및 before : 의사 요소는 DOM을 통해 직접 액세스 할 수 없으며 현재 CSS의 특정 값을 자유롭게 편집 할 수 없습니다.
내 길은 단지 예일 뿐이며 연습에 좋지는 않습니다. 자신의 트릭을 시도하고 실제 사용에 맞게 수정할 수 있습니다.
이것과 다른 것들에 대한 당신 자신의 실험을하십시오!
감사합니다-Adarsh Hegde.
나는 항상 자신의 utils 함수를 추가하고 있습니다.
function setPseudoElContent(selector, value) {
document.styleSheets[0].addRule(selector, 'content: "' + value + '";');
}
setPseudoElContent('.class::after', 'Hello World!');
또는 ES6 기능을 사용하십시오.
const setPseudoElContent = (selector, value) => {
document.styleSheets[0].addRule(selector, `content: "${value}";`);
}
setPseudoElContent('.class::after', 'Hello World!');
그냥 style
머리에 추가 할 수있을 때 클래스 또는 속성을 추가하는 이유
$('head').append('<style>.span:after{ content:'changed content' }</style>')
여기에는 많은 답변이 있지만 수락 된 답변 조차도 :before
또는 의 CSS를 조작하는 데 도움이되는 답변이 :after
없습니다.
여기 내가 그것을 제안하는 방법이 있습니다. HTML이 다음과 같다고 가정 해 봅시다.
<div id="something">Test</div>
그리고 CSS에서 : fore를 설정하고 다음과 같이 디자인합니다.
#something:before{
content:"1st";
font-size:20px;
color:red;
}
#something{
content:'1st';
}
content
나중에 쉽게 가져올 수 있도록 요소 자체에 속성 도 설정 했습니다. 이제는button
클릭하기 전에 :의 색상을 녹색으로 변경하고 글꼴 크기를 30px로 변경하려고합니다. 다음과 같이 달성 할 수 있습니다.
일부 클래스에서 필요한 스타일로 CSS를 정의하십시오 .activeS
.
.activeS:before{
color:green !important;
font-size:30px !important;
}
이제 다음과 같이 클래스를 : before 요소에 추가하여 : before 스타일을 변경할 수 있습니다.
<button id="changeBefore">Change</button>
<script>
$('#changeBefore').click(function(){
$('#something').addClass('activeS');
});
</script>
의 콘텐츠를 얻으려면 :before
다음과 같이 할 수 있습니다.
<button id="getContent">Get Content</button>
<script>
$('#getContent').click(function(){
console.log($('#something').css('content'));//will print '1st'
});
</script>
궁극적으로 :before
jQuery로 컨텐츠 를 동적으로 변경하려면 다음과 같이하십시오.
<button id="changeBefore">Change</button>
<script>
var newValue = '22';//coming from somewhere
var add = '<style>#something:before{content:"'+newValue+'"!important;}</style>';
$('#changeBefore').click(function(){
$('body').append(add);
});
</script>
위의 "changeBefore"버튼을 클릭하면 :before
내용이 #something
동적 값인 '22'로 변경 됩니다 .
나는 그것이 도움이되기를 바랍니다
I에 정의 변수를 사용하여 만들어진 :root
내부 CSS
수정하는 :after
(동일한가 적용되는 :before
) 가상 요소는 , 특히 변동 background-color
A는 서식이 가치 anchor
에 의해 정의 .sliding-middle-out:hover:after
되고 content
다른 가치 anchor
( #reference
다음의) 데모 자바 스크립트를 사용하여 임의의 색을 생성 / jQuery :
HTML
<a href="#" id="changeColor" class="sliding-middle-out" title="Generate a random color">Change link color</a>
<span id="log"></span>
<h6>
<a href="https://stackoverflow.com/a/52360188/2149425" id="reference" class="sliding-middle-out" target="_blank" title="Stack Overflow topic">Reference</a>
</h6>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.rawgit.com/davidmerfield/randomColor/master/randomColor.js"></script>
CSS
:root {
--anchorsFg: #0DAFA4;
}
a, a:visited, a:focus, a:active {
text-decoration: none;
color: var(--anchorsFg);
outline: 0;
font-style: italic;
-webkit-transition: color 250ms ease-in-out;
-moz-transition: color 250ms ease-in-out;
-ms-transition: color 250ms ease-in-out;
-o-transition: color 250ms ease-in-out;
transition: color 250ms ease-in-out;
}
.sliding-middle-out {
display: inline-block;
position: relative;
padding-bottom: 1px;
}
.sliding-middle-out:after {
content: '';
display: block;
margin: auto;
height: 1px;
width: 0px;
background-color: transparent;
-webkit-transition: width 250ms ease-in-out, background-color 250ms ease-in-out;
-moz-transition: width 250ms ease-in-out, background-color 250ms ease-in-out;
-ms-transition: width 250ms ease-in-out, background-color 250ms ease-in-out;
-o-transition: width 250ms ease-in-out, background-color 250ms ease-in-out;
transition: width 250ms ease-in-out, background-color 250ms ease-in-out;
}
.sliding-middle-out:hover:after {
width: 100%;
background-color: var(--anchorsFg);
outline: 0;
}
#reference {
margin-top: 20px;
}
.sliding-middle-out:before {
content: attr(data-content);
display: attr(data-display);
}
JS / jQuery
var anchorsFg = randomColor();
$( ".sliding-middle-out" ).hover(function(){
$( ":root" ).css({"--anchorsFg" : anchorsFg});
});
$( "#reference" ).hover(
function(){
$(this).attr("data-content", "Hello World!").attr("data-display", "block").html("");
},
function(){
$(this).attr("data-content", "Reference").attr("data-display", "inline").html("");
}
);
attr()
제외에 대한 지원 content
은 실제로 부족합니다. caniuse.com에서 확인할 수 있습니다. :root
그리고 css-variables 지원이 더 좋지만, 아직 새로운 지원이므로 아직 널리 보급되지 않았습니다. (또한 caniuse.com에서 이에 대한 지원을 확인)
.css()
특정 요소에 사용 하는 것과 같은 CSS 의사 규칙을 추가하기 위해 jQuery 플러그인을 만들었습니다 .
용법:
$('body')
.css({
backgroundColor: 'white'
})
.cssPseudo('after', {
content: 'attr(title) ", you should try to hover the picture, then click it."',
position: 'absolute',
top: 20, left: 20
})
.cssPseudo('hover:after', {
content: '"Now hover the picture, then click it!"'
});
이 목적으로 내 플러그인을 사용할 수 있습니다.
jQuery :
(function() {
$.pseudoElements = {
length: 0
};
var setPseudoElement = function(parameters) {
if (typeof parameters.argument === 'object' || (parameters.argument !== undefined && parameters.property !== undefined)) {
for (var element of parameters.elements.get()) {
if (!element.pseudoElements) element.pseudoElements = {
styleSheet: null,
before: {
index: null,
properties: null
},
after: {
index: null,
properties: null
},
id: null
};
var selector = (function() {
if (element.pseudoElements.id !== null) {
if (Number(element.getAttribute('data-pe--id')) !== element.pseudoElements.id) element.setAttribute('data-pe--id', element.pseudoElements.id);
return '[data-pe--id="' + element.pseudoElements.id + '"]::' + parameters.pseudoElement;
} else {
var id = $.pseudoElements.length;
$.pseudoElements.length++
element.pseudoElements.id = id;
element.setAttribute('data-pe--id', id);
return '[data-pe--id="' + id + '"]::' + parameters.pseudoElement;
};
})();
if (!element.pseudoElements.styleSheet) {
if (document.styleSheets[0]) {
element.pseudoElements.styleSheet = document.styleSheets[0];
} else {
var styleSheet = document.createElement('style');
document.head.appendChild(styleSheet);
element.pseudoElements.styleSheet = styleSheet.sheet;
};
};
if (element.pseudoElements[parameters.pseudoElement].properties && element.pseudoElements[parameters.pseudoElement].index) {
element.pseudoElements.styleSheet.deleteRule(element.pseudoElements[parameters.pseudoElement].index);
};
if (typeof parameters.argument === 'object') {
parameters.argument = $.extend({}, parameters.argument);
if (!element.pseudoElements[parameters.pseudoElement].properties && !element.pseudoElements[parameters.pseudoElement].index) {
var newIndex = element.pseudoElements.styleSheet.rules.length || element.pseudoElements.styleSheet.cssRules.length || element.pseudoElements.styleSheet.length;
element.pseudoElements[parameters.pseudoElement].index = newIndex;
element.pseudoElements[parameters.pseudoElement].properties = parameters.argument;
};
var properties = '';
for (var property in parameters.argument) {
if (typeof parameters.argument[property] === 'function')
element.pseudoElements[parameters.pseudoElement].properties[property] = parameters.argument[property]();
else
element.pseudoElements[parameters.pseudoElement].properties[property] = parameters.argument[property];
};
for (var property in element.pseudoElements[parameters.pseudoElement].properties) {
properties += property + ': ' + element.pseudoElements[parameters.pseudoElement].properties[property] + ' !important; ';
};
element.pseudoElements.styleSheet.addRule(selector, properties, element.pseudoElements[parameters.pseudoElement].index);
} else if (parameters.argument !== undefined && parameters.property !== undefined) {
if (!element.pseudoElements[parameters.pseudoElement].properties && !element.pseudoElements[parameters.pseudoElement].index) {
var newIndex = element.pseudoElements.styleSheet.rules.length || element.pseudoElements.styleSheet.cssRules.length || element.pseudoElements.styleSheet.length;
element.pseudoElements[parameters.pseudoElement].index = newIndex;
element.pseudoElements[parameters.pseudoElement].properties = {};
};
if (typeof parameters.property === 'function')
element.pseudoElements[parameters.pseudoElement].properties[parameters.argument] = parameters.property();
else
element.pseudoElements[parameters.pseudoElement].properties[parameters.argument] = parameters.property;
var properties = '';
for (var property in element.pseudoElements[parameters.pseudoElement].properties) {
properties += property + ': ' + element.pseudoElements[parameters.pseudoElement].properties[property] + ' !important; ';
};
element.pseudoElements.styleSheet.addRule(selector, properties, element.pseudoElements[parameters.pseudoElement].index);
};
};
return $(parameters.elements);
} else if (parameters.argument !== undefined && parameters.property === undefined) {
var element = $(parameters.elements).get(0);
var windowStyle = window.getComputedStyle(
element, '::' + parameters.pseudoElement
).getPropertyValue(parameters.argument);
if (element.pseudoElements) {
return $(parameters.elements).get(0).pseudoElements[parameters.pseudoElement].properties[parameters.argument] || windowStyle;
} else {
return windowStyle || null;
};
} else {
console.error('Invalid values!');
return false;
};
};
$.fn.cssBefore = function(argument, property) {
return setPseudoElement({
elements: this,
pseudoElement: 'before',
argument: argument,
property: property
});
};
$.fn.cssAfter = function(argument, property) {
return setPseudoElement({
elements: this,
pseudoElement: 'after',
argument: argument,
property: property
});
};
})();
$(function() {
$('.element').cssBefore('content', '"New before!"');
});
.element {
width: 480px;
margin: 0 auto;
border: 2px solid red;
}
.element::before {
content: 'Old before!';
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div class="element"></div>
jQuery.css의 일반 함수에서와 같이 값을 지정해야합니다.
또한 jQuery.css의 일반 함수에서와 같이 의사 요소 매개 변수의 값을 얻을 수도 있습니다.
console.log( $(element).cssBefore(parameter) );
JS :
GitHub : https://github.com/yuri-spivak/managing-the-properties-of-pseudo-elements/
다른 사람이 전체 스타일 요소로 헤드 요소를 추가하는 것에 대해 언급했으며 한 번만 수행하고 한 번 이상 다시 설정 해야하는 경우 나쁘지 않은 스타일 요소로 끝납니다. 그래서 머리에 빈 스타일 요소를 id로 만들고 이것을 다음과 같이 innerHTML로 바꾸지 않도록하십시오.
<style id="pseudo"></style>
그런 다음 JavaScript는 다음과 같습니다.
var pseudo = document.getElementById("pseudo");
function setHeight() {
let height = document.getElementById("container").clientHeight;
pseudo.innerHTML = `.class:before { height: ${height}px; }`
}
setHeight()
이제는 다른 요소의 높이를 기준으로 이전 요소의 높이를 설정하기 위해이 요소가 필요했으며 크기를 조정할 때이를 사용 setHeight()
하여 창 크기를 조정할 때마다 실행할 수 있으며 <style>
제대로 교체 됩니다.
희망은 같은 일을하려고 애쓰는 사람에게 도움이됩니다.
쉽고 효과적인 다른 것들이 있습니다.
<style>
.case-after:after { // set your properties here like eg:
color:#3fd309 !important;
}
.case-before:before { // set your properties here like eg:
color:#151715 !important;
}
</style>
// case for after
$('#button-id').on('click', function() {
$(".target-div").toggleClass('case-after');
});
// case for before
$('#button-id').on('click', function() {
$(".target-div").toggleClass('case-before');
});