I've done this with the Classic Designer (it would be very hard or even impossible to do this with the Modern Designer). Since I see you tagged your post as Version 10, Classic Designer is all you have anyway, so that's a moot point.
Here's an example (tested on Classic Designer Version 11.0.2212.30987).
This example includes a custom HTML element with three paragraphs of text (just using some lorem ipsum for example). This also includes 6 span elements within it, that give it locations for the fields to be moved to and any associated errors to be moved to as well. There are also two single line fields (currency fields specifically in this example) and one checkbox field.
Here's how it looks in the Layout designer:

Here's the actual HTML of that Custom HTML element, with the 6 span elements within it.
1 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Transaction amount: $ <span id="field1_placeholder"></span> Dictum sit amet justo donec enim diam vulputate ut. Quis risus sed vulputate odio ut enim blandit volutpat. Faucibus a pellentesque sit amet porttitor. Massa tincidunt nunc pulvinar sapien et. Sagittis orci a scelerisque purus semper eget.</p><span id="field1_errors"></span> |
3 | <p>Faucibus nisl tincidunt eget nullam non. Nunc sed velit dignissim sodales ut eu sem. Transaction amount: $ <span id="field2_placeholder"></span> Adipiscing vitae proin sagittis nisl rhoncus mattis rhoncus urna neque. Nunc lobortis mattis aliquam faucibus purus in massa tempor nec. Donec pretium vulputate sapien nec sagittis aliquam malesuada. Iaculis eu non diam phasellus vestibulum lorem sed.</p><span id="field2_errors"></span> |
5 | <p>Mattis vulputate enim nulla aliquet porttitor lacus. Est placerat in egestas erat imperdiet sed euismod. Checkbox field: <span id="field3_placeholder"></span> Arcu bibendum at varius vel pharetra vel turpis nunc. Aliquet porttitor lacus luctus accumsan tortor posuere ac ut consequat. Id aliquet risus feugiat in ante metus dictum.</p><span id="field3_errors"></span> |
This Javascript is used to move the fields and their errors messages into those 6 span elements of the paragraph:
01 | $(document).ready( function () { |
05 | $( '.field1_original input' ).addClass( 'field1_new' ).appendTo( '#field1_placeholder' ); |
06 | $( '.field2_original input' ).addClass( 'field2_new' ).appendTo( '#field2_placeholder' ); |
10 | $( '.field1_original .ro' ).addClass( 'ro_underline' ).appendTo( '#field1_placeholder' ); |
11 | $( '.field2_original .ro' ).addClass( 'ro_underline' ).appendTo( '#field2_placeholder' ); |
15 | $( '.field3_original .radio-checkbox-fieldset' ).addClass( 'field3_new' ).appendTo( '#field3_placeholder' ); |
19 | $( '.field3_original .ro' ).closest( '.cf-field' ).appendTo( '#field3_placeholder' ); |
22 | $( '.field1_original' ).hide(); |
23 | $( '.field2_original' ).hide(); |
24 | $( '.field3_original' ).hide(); |
30 | $( '.field1_new' ).blur(moveSingleLineErrors); |
31 | $( '.field1_new' ).change(moveSingleLineErrors); |
32 | $( '.field2_new' ).blur(moveSingleLineErrors); |
33 | $( '.field2_new' ).change(moveSingleLineErrors); |
34 | function moveSingleLineErrors() { |
35 | $( '#field1_placeholder .parsley-errors-list' ).appendTo( '#field1_errors' ); |
36 | $( '#field2_placeholder .parsley-errors-list' ).appendTo( '#field2_errors' ); |
44 | $( '.field3_new input' ).blur(moveCheckboxErrors); |
45 | $( '.field3_new input' ).change(moveCheckboxErrors); |
46 | function moveCheckboxErrors() { |
47 | $( '.field3_original .parsley-errors-list' ).appendTo( '#field3_errors' ); |
I also included this CSS that impacts the fields after they are moved to their new locations.
2 | .field 1 _new { width : 100px ;} |
3 | .field 2 _new { width : 100px ;} |
6 | .field 3 _new { display : inline ;} |
9 | .ro_underline { border-bottom : 0.1 rem solid ;} |
The end result looks like this:

And when error messages are present:

And when the form is populated:

And the readonly/archival version of the form:
