В Javascript мы можем использовать что-то вроде window.getComputedStyle(element,null).getPropertyValue(property)
для получения свойства стиля данного элемента. При этом любое свойство может измениться с помощью адаптивного веб-дизайна при любом размере экрана.
Мне интересно, можно ли проанализировать таблицу стилей, связанную с элементом, чтобы определить стили, которые будут применяться к нему во всех размерах/точках останова окна.
Например, <p>
имеет font-size: 16px
на настольном компьютере и font-size: 18px
на мобильном устройстве (устанавливается @media (max-width: 768px) { ... }
. Я хотел бы знать, что размер шрифта будет 18 пикселей на мобильном устройстве без необходимости изменять размер до мобильного размера и снова выбирать размер шрифта.
Я полагаю, что с некоторой умной обработкой текста в JS я мог бы отсортировать таблицу стилей для @media
и посмотреть, отражается ли она на элементе, но для больших или нескольких таблиц стилей, встроенных стилей и внедренных стилей этот метод, вероятно, будет невозможно получить на 100% точно. .
Любые идеи?
Мысль...
Можно ли обернуть элемент в смоделированный (скрытый) элемент window
, а затем использовать JS для изменения его размера, чтобы он запускал медиа-запросы?
Другой подход...
Я начал играть с document.styleSheets
, но даже это кажется довольно невыполнимой задачей, чтобы добиться совершенства. В моем примере ниже я обернул выделенный текст в элемент, а затем передал его методу ниже (написанному на coffeescript).
analyzeSelectiontyles: (selectionElement) ->
selectionParents = []
while selectionElement
selectionParents.unshift selectionElement
selectionElement = selectionElement.parentNode
pageStylesheets = document.styleSheets
for stylesheet in pageStylesheets
rules = stylesheet.cssRules
for rule of rules
if rules[rule]["type"] is 1
console.log 'standard style'
if rules[rule]["type"] is 4
console.log 'media query'
# If it's a standard style rule or a media query containing
# style rules we have to check to see if the style rule applies
# to any one of our selectionParents defined above, and in
# Which order so as to simulate "cascading"
.oO( This Q is sort of X/Y problem )
Похоже, вы можете прекрасно понять это во время выполнения, нет необходимости знать размер во всех точках останова перед загрузкой страницы. Просто измерьте элемент в тот момент, когда вы хотите отобразить наложение, и, возможно, добавьте обработчик изменения размера для повторного выравнивания во время изменения размера. - person try-catch-finally   schedule 22.12.2014