У меня сетка с несколькими столбцами. Каждый столбец содержит заголовок с заголовком. При наведении курсора к заголовку добавляется кнопка для редактирования заголовка. Это привело к росту колонны.
При наведении указателя мыши я хочу сохранить ту же ширину столбца, добавить кнопку и поставить многоточие в заголовке, если последний слишком длинный для правильного добавления кнопки.
Мне уже удалось реализовать это поведение, когда столбцы не находятся в сетке или гибком макете.
Как реализовать это поведение в шаблоне сетки? Столбцы всегда должны занимать 1/3 доступного пространства, поэтому я не могу указать ширину.
Вот код и песочница:
// Header
const Root = styled.div`
display: flex;
align-items: center;
justify-content: space-between;
background: orange;
padding: 0 12px;
`;
const Title = styled.h1`
display: inline-block;
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
word-wrap: normal;
margin-right: 12px;
`;
export default function Header({ title }) {
const [edit, setEdit] = useState(false);
return (
<Root onMouseOver={() => setEdit(true)} onMouseLeave={() => setEdit(false)}>
<Title>{title}</Title>
{edit && <button>edit</button>}
</Root>
);
}
// Grid
const Grid = styled.div`
display: grid;
grid-template-columns: repeat(3, 1fr);
`;
const Col = styled.div`
margin: 12px;
padding: 24px;
`;
export default function App() {
return (
<>
<h1>GRID (not ok)</h1>
<Grid>
<Col>
<Header title="Col 1 long title" />
</Col>
<Col>
<Header title="Col 2" />
</Col>
<Col>
<Header title="Col 3" />
</Col>
</Grid>
<h1>NO GRID (OK)</h1>
<div>
<Col>
<Header title="Col 1 long title" />
</Col>
<Col>
<Header title="Col 2" />
</Col>
<Col>
<Header title="Col 3" />
</Col>
</div>
</>
);
}
песочница: https://codesandbox.io/s/dynamic-text-ellipsis-78vbw?file=/src/App.tsx:72-800
Спасибо за вашу помощь!