Расположение всплывающей подсказки в ячейке таблицы

Я использую React и у меня есть таблица с некоторыми действиями (удаление, редактирование и т. Д.) В ячейке. И мне нужно поставить всплывающую подсказку на каждое действие. Я не использую jquery и не планирую, и не поддерживаю заголовки (мне нужно обновить эту подсказку до некоторых определенных данных или даже другого компонента).

Поэтому проблема в том, что я не могу правильно расположить подсказку (например, в середине верхней или нижней части). Witch params должен получить мой компонент и как это сделать с помощью css?

const Tooltip = ({position = 'top', display, style, children}) => {
  let displayClass = display ? `fade ${position} in` : `tooltip-${position}`
  return (
    <div className={`tooltip ${displayClass} `} role='tooltip'>
      <div className='tooltip-arrow' />
      <div className='tooltip-inner'>
        {children}
      </div>
    </div>

  )
}

const ActionLinkItem = ({page, action, data, onMouseEnter, onMouseLeave, display, tooltipText, id}) => {
  const {buttonClass, icon} = actionsStyles[action]
  return (
    <Link to={`/${page}/${action.toLowerCase()}/${data.id}`}>
      <a
        className={`btn btn-xs ${buttonClass}`}
        id={id}
        onMouseEnter={onMouseEnter}
        onMouseLeave={onMouseLeave}
            ><i className={`fa fa-${icon}`} />
        <Tooltip display={display} action={action}>{tooltipText}</Tooltip>
      </a>
    </Link>
  )
}

export default class Actions extends Component {
  constructor (props) {
    super(props)
    this.state = {
      tooltipActive: ''
    }
  }

  handleHover (event) {
    this.setState({
      tooltipActive: event.target.id
    })
  }

  handleBlur (event) {
    this.setState({
      tooltipActive: ''
    })
  }

  getActionsTemplate () {
    const {actions, data, page} = this.props
    return actions.map(action => {
      let display = this.state.tooltipActive === `${action.action}-${data.id}`
      let id = `${action.action}-${data.id}`
      let tooltip = tooltipText[action.action].replace(/{type}/g, page).replace(/{item}/g, data.name
      return <ActionLinkItem
            key={`${data.id}-${action.action}`}
            page={page}
            action={action.action}
            data={data}
            id={id}
            tooltipText={tooltip}
            display={display}
            onMouseEnter={(e) => this.handleHover(e)}
            onMouseLeave={(e) => this.handleBlur(e)}
          />    
     })
   }

  render () {
    return (
      <div className='row'>
        {this.getActionsTemplate()}
      </div>
    )
  }
}

1 ответ

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

Итак, добавьте стиль position: relative в in ActionLinkItem и добавьте стиль `position: absolute к внешнему в Tooltip.

Для добавления кредита вам нужно установить ширину всплывающей подсказки и расположить или отцентрировать ее в ActionLinkItem, используя такие стили, как bottom: 100%,

Вы также можете выполнить некоторые вычисления, чтобы убедиться, что ваша подсказка не выходит за пределы страницы, перемещая ее влево и вправо, если содержимое находится справа или слева соответственно.

Другие вопросы по тегам