Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Получить координаты псевдоэлемента before или after (https://javascript.ru/forum/events/72509-poluchit-koordinaty-psevdoehlementa-before-ili-after.html)

милт 03.02.2018 09:07

Получить координаты псевдоэлемента before или after
 
Как получить координаты псевдоэлементов before или after? В интернете нет никакой информации об этом :blink:

Nexus 03.02.2018 11:50

Замените псевдо-элементы на "настоящие" и работайте с ними.

Aetae 03.02.2018 11:54

Потому что тебе это не должно быть нужно. Псевдоэлементы это по задумке маленькие детали оформления и не должны учавствовать в чём-то большем.
Можно конечно получить текущие стили getComputedStyle(element, ":before"), а потом вручную вывести из этого координаты.

милт 27.05.2018 20:31

Цитата:

Сообщение от Aetae (Сообщение 476939)
Можно конечно получить текущие стили getComputedStyle(element, ":before"), а потом вручную вывести из этого координаты.

Можете подсказать как вывести координаты вручную?

j0hnik 28.05.2018 04:13

var bef = getComputedStyle(document.querySelector('.el'),':before');
bef.top
bef.left

милт 04.07.2018 20:51

Цитата:

Сообщение от j0hnik (Сообщение 486127)
var bef = getComputedStyle(document.querySelector('.el'),':before');
bef.top
bef.left

А если там прописано 'auto' тогда как?

Aetae 04.07.2018 21:03

Ручками, учитывая всю логику блочной модели.

j0hnik 04.07.2018 23:19

Всегда можно получить координаты самого элемента и прибавить к ним нужные значения (отступов, бордюров и прочего что там есть)

Alexandroppolus 05.07.2018 14:42

j0hnik,
увы, не всё так просто )
http://jsfiddle.net/9mc7xoqt/
здесь координаты ::афтера не связаны с его владельцем

рони 05.07.2018 15:51

стиль псевдо-элемента top/left
 
Alexandroppolus,
а если так?
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
.parent {
  position: relative;
  width: 300px;
  border: 1px solid black;
}
.m {
  padding: 40px;
}
.test {
  background: #999;
  height: 100px;
}
.test::after {
  content: "after";
  background: red;
  position: absolute;
  top: 5px;
  left: 5px;
}

  </style>


</head>

<body>
<div class="parent">
<div class="m">
<div class="test">

</div>
</div>
</div>
 <script>
function getOffsetSum(elem) {
  var top = 0,
    left = 0;

  while (elem) {
    top = top + parseInt(elem.offsetTop);
    left = left + parseInt(elem.offsetLeft);
    elem = elem.offsetParent;
  }

  return {
    top: top,
    left: left
  };
}
function getStyle(parent, pseudo, style)
{
parent = document.querySelector(parent)
var stylePseudo = getComputedStyle(parent,pseudo);
var styleParent = getComputedStyle(parent);
var positionPseudo = stylePseudo.position;
var positionParent = styleParent.position;
if(positionPseudo == "absolute" && positionParent != "relative") parent = parent.offsetParent;
if(positionPseudo == "fixed") parent = document.body;
styleParent = getComputedStyle(parent);
return parseInt(stylePseudo[style], 10) + getOffsetSum(parent)[style] + pageYOffset
}


alert(getStyle(".test", "::after", "top"));




  </script>
</body>
</html>


Часовой пояс GMT +3, время: 08:50.