Кратко
СкопированоМетод remove позволяет удалить определённое CSS-свойство у элемента, возвращая его к значению по умолчанию или удаляя его полностью из стиля элемента.
Пример
СкопированоПревращаем круг в квадрат:
const circle = document.getElementById('round')function turnToSquare() { circle.style.removeProperty('border-radius')}
const circle = document.getElementById('round')
function turnToSquare() {
circle.style.removeProperty('border-radius')
}
Как пишется
Скопированоremove принимает один аргумент — строку с именем свойства. Название должно соответствовать CSS-формату: background, а не background. Регистр букв значения не имеет — BACKGROUND тоже сработает.
Метод возвращает строку со старым значением удалённого свойства. Если свойство не было установлено, метод вернёт пустую строку ''.
const oldShadow = vampire.style.removeProperty('box-shadow')console.log(oldShadow) // '0 0 10px rgba(0,0,0,0.5)'
const oldShadow = vampire.style.removeProperty('box-shadow')
console.log(oldShadow) // '0 0 10px rgba(0,0,0,0.5)'
Как понять
СкопированоМетод remove удаляет отдельное CSS-свойство элемента. Доступен метод в интерфейсе CSSStyleDeclaration.
Удалить свойство получится только для inline стилей. Для read свойств выбрасывается ошибка NoModificationAllowed, изменять их напрямую не получится.
Например, вычисленные стили (computed styles) — это то, что браузер рассчитал, применив все CSS-правила к элементу. Их нельзя изменить напрямую:
const circle = document.getElementById('round')// ❌ Ошибка! Uncaught NoModificationAllowedErrorwindow.getComputedStyle(circle).removeProperty('border-radius')
const circle = document.getElementById('round')
// ❌ Ошибка! Uncaught NoModificationAllowedError
window.getComputedStyle(circle).removeProperty('border-radius')
Однако удалять свойства из таблиц стилей всё же можно, обратившись к CSSRules.
⚠️ Важно: этот способ требует точного знания структуры таблиц стилей и может быть ненадёжным в случае подключения новых стилей.
const circle = document.getElementById('round')// ✅ Так работать будетconst declaration = document.styleSheets[0].cssRules[1].style;declaration.removeProperty('border-radius')
const circle = document.getElementById('round')
// ✅ Так работать будет
const declaration = document.styleSheets[0].cssRules[1].style;
declaration.removeProperty('border-radius')
🚀 Один из полезных сценариев использования remove — управление подсказками для браузера с помощью свойства will:
const animatedElement = document.getElementById('animated')function startAnimation() { // Подсказываем браузеру, что свойство transform будет анимироваться animatedElement.style.willChange = 'transform' // Запускаем анимацию animatedElement.classList.add('animate') // После завершения анимации удаляем подсказку, чтобы освободить память // и не занимать ресурсы браузера излишними обещаниями анимации setTimeout(() => { animatedElement.style.removeProperty('will-change') }, 1000)}
const animatedElement = document.getElementById('animated')
function startAnimation() {
// Подсказываем браузеру, что свойство transform будет анимироваться
animatedElement.style.willChange = 'transform'
// Запускаем анимацию
animatedElement.classList.add('animate')
// После завершения анимации удаляем подсказку, чтобы освободить память
// и не занимать ресурсы браузера излишними обещаниями анимации
setTimeout(() => {
animatedElement.style.removeProperty('will-change')
}, 1000)
}
Есть альтернатива — можно использовать style и указать свойству значение null. Названия в этом случае пишем через camelCase:
vampire.style.boxShadow = null
vampire.style.boxShadow = null
Чтобы управлять отображением элемента и менять вычисленные стили, лучше использовать другой подход, устанавливая элементу классы-модификаторы с нужным набором стилей. Для этого можно использовать ClassList.