Положение прямой границы не соответствует положению реального элемента

#javascript #html #css #reactjs #flexbox

Вопрос:

У меня странная проблема с ограничительной рамкой. Как вы можете видеть на скриншоте — положение ограничительной рамки ad_agency составляет 1-2 пикселя справа от положения реального элемента. У меня нет нечетных полей, отступов и т. Д., Все они обычные. От него расположена небольшая полоска(4 пикселя в высоту) ниже токена/чипа Ad_agency .getBoundingClientRect() и ее ширина равна ширине токена. Похоже, что визуальная ширина чипов меньше ширины ограничительной рамки, и она перемещает все прошлые элементы из ограничительной рамки (каким-то образом). Если я задам постоянную ширину (например, ширина: 150 пикселей;) — проблема исчезнет, но любые другие параметры ширины дают эту ошибку. введите описание изображения здесь
введите описание изображения здесь
введите описание изображения здесь

Я использую typescript, mobx, react, css.

 const Container = styled(CFlex)<{color: string}>`
    height: 28px;
    background-color: ${props => props.color};
    border-radius: 2px;
    display: inline-flex;
    color: white;
    margin-right: 12px;
    align-items: center;
    position: relative;
    z-index: 20;
    amp;:hover {
      z-index: 23;
}`
 

не знаю, имеет ли это значение, я использую react clone для вставки токена и добавления в него событий мыши:

 {React.cloneElement(this.props.children, {
                onMouseLeave: this.referenceMouseHandler,
                onMouseEnter: (event) => this.referenceMouseHandler(event, true),
            })}
 

где this.props.children = токен

Кто-нибудь знает, как решить эту проблему?

Минимальная версия, в которой возникает проблема(похоже, неправильное расположение содержимого): введите описание изображения здесь

Комментарии:

1. Вы пытались измениться margin-right: 12px; ?

2. Должно быть возможно (и было бы очень полезно) создать минимальный пример кода вашей проблемы только с помощью HTML/CSS/JS. Ожидается, что вы попытаетесь сделать это перед отправкой проблемы в переполнение стека.

3. После нескольких часов поиска информации я обнаружил, что это происходит из-за округления координат в браузере. Я обнаружил такую микро-ошибку позиционирования на многих сайтах с помощью инспектора. Я мог бы округлить сам, но разные браузеры используют разные округления — некоторые используют пол, некоторые заканчивают, некоторые округляют. Таким образом, если позиция элемента равна 100,45 пикселей — браузер будет отображаться так же, как и при 100 пикселей, когда выделенное поле, похоже, удерживает свою позицию с десятичными знаками. Я нахожу проблему, но не знаю, как ее исправить =(