Я пытаюсь создать следующий макет с помощью CSS Flex. Это кажется простым, но есть одна сложная часть, которую я объясню ниже.
HTML:
<div class = "flex">
<div class = "icon-col">
<div class = "icon" style = "max-width:120px;">
<svg>image code here...</svg>
</div>
</div>
<div class = "text-col">
<h4>Awesome Design</h4>
<p>Nullam vel sem. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur blandit mollis lacus. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc.</p>
</div>
</div>
CSS:
.flex {
display: flex;
flex-direction: row;
}
.icon-col, .text-col {
flex: 1;
}
.icon {
width: 100%;
}
Предварительный просмотр кода:https://codepen.io/anon/pen/KEjJeO
Как видно на превью, между иконкой и текстом слишком много места. Значок должен иметь размер 120 пикселей, как указано во встроенном CSS, а ширина текстового столбца должна увеличиваться или уменьшаться в зависимости от размера значка.
Попробуйте сложную часть:
Значок имеет динамическую ширину.
Я могу определить ширину значка, используя только встроенный стиль в HTML, в элементе .icon, как показано выше в HTML.
У меня нет контроля над элементом .icon-col, поскольку я добавляю ему динамическую ширину. Было бы легко, если бы я мог просто добавить ширину к .icon-col.
Я также не могу добавить ширину к .text-col, потому что он должен автоматически изменяться в зависимости от размера значка.
Как .icon-col может иметь ту же ширину, что и его дочерний элемент .icon, и автоматически изменять размер текстового столбца?
Очень запутанно. Можете ли вы уточнить свой вопрос?
ваша ссылка на codepen также не работает. отредактируйте вопрос и добавьте короткую заметку со скриншотом, как и ожидалось.
@Saravana сайт codepen, кажется, не работает
Короче говоря, я хочу создать макет на картинке, но могу добавить ширину только к элементу .icon
поэтому содержимое приближается в зависимости от ширины значка? Вы используете значок svg или источник изображения.
почему бы не добавить flex-grow:0 к icon-col?
@Саравана svg значок






Вы можете группировать и перемещать вещи, но это просто для того, чтобы получить представление.
.flex2 {
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
background-color: blue;
}
.icon-col {
flex: 1 1 20%;
background-color: #ff0000;
position: relative;
padding: 20px;
}
.abacadabra {
width: 120px;
max-width: 120px;
position: relative;
float: right;
right: 5px
}
.text-col {
flex: 1 1 80%;
background-color: #ffff00;
padding: 20px
}<div class = "flex2">
<div class = "icon-col">
<div class = "abacadabra">
<svg aria-hidden = "true" data-prefix = "fas" data-icon = "tools" class = "svg-inline--fa ugbfa-tools fa-w-16 " role = "img" xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 512 512"><path fill = "currentColor" d = "M501.1 395.7L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7zM331.7 225c28.3 0 54.9 11 74.9 31l19.4 19.4c15.8-6.9 30.8-16.5 43.8-29.5 37.1-37.1 49.7-89.3 37.9-136.7-2.2-9-13.5-12.1-20.1-5.5l-74.4 74.4-67.9-11.3L334 98.9l74.4-74.4c6.6-6.6 3.4-17.9-5.7-20.2-47.4-11.7-99.6.9-136.6 37.9-28.5 28.5-41.9 66.1-41.2 103.6l82.1 82.1c8.1-1.9 16.5-2.9 24.7-2.9zm-103.9 82l-56.7-56.7L18.7 402.8c-25 25-25 65.5 0 90.5s65.5 25 90.5 0l123.6-123.6c-7.6-19.9-9.9-41.6-5-62.7zM64 472c-13.2 0-24-10.8-24-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13.2-10.7 24-24 24z"></path></svg>
</div>
</div>
<div class = "text-col">
<h4>Awesome Design</h4>
<p>Nullam vel sem. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur blandit mollis lacus. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc.</p>
</div>
</div>
Объяснение слишком широкое. можете сделать короткую заметку в комментарии