Web site Developer I Advertising and marketing I Social Media Advertising and marketing I Content material Creators I Branding Creators I Administration I System SolutionHow To Develop A Textual content Editor For The Internet — Smashing Journal

Web site Developer I Advertising and marketing I Social Media Advertising and marketing I Content material Creators I Branding Creators I Administration I System SolutionHow To Develop A Textual content Editor For The Internet — Smashing Journal

Web site Developer I Advertising and marketing I Social Media Advertising and marketing I Content material Creators I Branding Creators I Administration I System Answer

Fast abstract ↬

How do textual content typing and enhancing work on the internet? Though this course of may appear easy, there’s quite a lot of technical nuance behind its obvious simplicity. This text seems at how typing on the internet works.

I work for Readymag, which makes a browser-based design device that helps folks create web sites, portfolios, and every kind of on-line publications, with out coding. Many widgets can be found in our device, and the textual content widget is without doubt one of the most generally used.

The textual content widget is a text-entry subject the place the consumer can type textual content utilizing a variety of controls within the editor. Every management applies a CSS property to the textual content. From the consumer’s facet, it seems like an extraordinary subject for getting into textual content, however an enormous variety of advanced processes are hidden behind its obvious simplicity.

On this article, I’ll clarify the challenges my firm confronted and the options we used to create a textual content widget in our utility. I’ll additionally dive into how we carried out it and what we realized alongside the way in which — and the way typing on the internet works normally.

Modifying Textual content On The Internet

There are a number of methods to implement text-input fields on the internet. We might use a easy textual content subject, or a multi-line textarea component, or the contenteditable attribute to make an enter editable, or doc.designMode = on. How are they totally different?

Text widget in Readymag

Textual content widget in Readymag. (Giant preview)

The enter and textarea components are perfect for including textual content to a web page, however they don’t present a wealthy text-formatting expertise. For this, we will use the contenteditable attribute to make virtually any component editable and allow the usage of textual content kinds.

See the Pen “Textual content Inputs” by Ilya Medvedev.

See the Pen “Textual content Inputs” by Ilya Medvedev.

If it’s good to edit the whole web page without delay, you should utilize doc.designMode. This mode permits any component inside a given doc to be edited, even an iframe.

We opted for the contenteditable attribute, which incorporates all the needed text-editing capabilities. With this attribute, any textual content on the web page turns into editable, which is essential if we need to allow folks to type textual content with CSS. For instance, customers might then type chosen sections or the whole textual content immediately.

Textual content Types And Font Properties

We allow customers to type textual content in any method they want by offering entry to all choices that CSS gives out of the field. Along with the well-known properties, comparable to font, type, coloration, and ornament, we give customers the chance to make use of OpenType font options, comparable to ligatures, stylistic units, fractions, and so forth. These options work by the font-feature-settings CSS property, which permits customers to customise textual content kinds.

Be aware: I extremely advocate studying Sparanoid’s glorious article showcasing all of OpenType’s options.

Using font properties in the text widget

Utilizing font properties within the textual content widget. (Giant preview)

Fashionable typography has taken an enormous step ahead, permitting for the usage of variable fonts on the internet through the font-variation-settings property.

OpenType font features showcase

OpenType font options showcase. (Giant preview)

Every variable font has variable properties whose values you may change. For instance, in an ordinary font, you may change the font weight utilizing strictly specified values (400, 500, 600, and so forth), whereas in a variable font, you should utilize any worth within the out there vary, offering extra in depth potentialities for textual content styling.

.style-1 {
  font-weight: 600;

.style-2 {
  font-variation-settings: "wght" 777;

Beneath you may see an instance of how working with a variable font seems in a textual content widget.

Instance of font-variation-settings

Along with the registered values (wght, wdth, slnt, and so on.), font makers can even create their very own distinctive font options (as within the instance above). To present our customers the chance to make use of all doable font options, we want this data first.

All the options you need to use needs to be outlined within the font file. Let’s have a look at its specs. Every font may be represented within the type of tables, offering all the totally different data used when rendering its characters.

We use two tables to gather this details about fonts:

  1. Glyph Substitution Desk
    The glyph substitution desk (GSUB) accommodates an inventory of glyph-rendering knowledge. The GSUB.featureList object is an enumeration of font options and their properties. You possibly can view an instance of knowledge within the desk on GitHub. On this desk, the tag subject is most attention-grabbing. That is the title of the font characteristic, and it signifies that this characteristic is accessible with this font. We will safely use tag within the font-feature-settings property.
  2. Font Variations Desk
    The font variations desk (fvar) is a illustration of the variable properties related to a font. An instance of the desk can be out there on GitHub. Every object is a font property, with an outline of doable values (min, max, default) and a localized title (if any). We use these values with the font-variation-settings property.

With the assistance of those two tables, we will cowl all of our necessities: utilizing variable font properties and varied font options. The ensuing knowledge is displayed within the text-widget controls within the editor, the place customers can type textual content with out utilizing any code.

Utilizing Your Keyboard

Textual content enter is without doubt one of the most necessary elements of the text-widget consumer expertise. Along with enabling shortcuts for working with textual content, we needed to take care of some uncommon challenges. Navigating textual content with the arrow keys was undoubtedly one among them.

Hidden characters icons

Hidden characters icons. (Giant preview)

Whereas the consumer is enhancing, the textual content widget additionally reveals hidden characters, comparable to non-breaking areas and line breaks. They’re carried out as SVG icons inserted within the textual content, which poses an issue: If we use contenteditable, then these icons stop customers from transferring their cursor with the arrow keys.

The answer is easy sufficient: Use a span and the :earlier than pseudo-element. This manner, the browser perceives the icon as being textual content and the arrow keys work nice.

span:earlier than {
  content material: "";
  top: 1em;
  place: relative;
  background-repeat: no-repeat;
  background-image: url("knowledge:picture/svg+xml,...");
  background-position: heart backside;
  background-size: 1em;


There are two keyboard shortcuts for pasting textual content in a textual content widget.

Cmd/Ctrl + V pastes textual content from the clipboard and retains any kinds it had within the authentic doc. If the textual content was copied from an utility comparable to Pages, Notes, Phrase or Google Docs, then your clipboard will comprise HTML data, not simply plain textual content. This HTML may be parsed and pasted whereas preserving the unique kinds.

You may get the HTML knowledge as follows:

// https://www.w3.org/TR/clipboard-apis/#reading-from-clipboard
doc.addEventListener('paste', (e) => {
  const textual content = e.clipboardData.getData('textual content/plain');
  const html = e.clipboardData.getData('textual content/html');

As well as, we’ve got the Cmd + Shift + V shortcut. While you insert textual content utilizing this keyboard mixture, the browser will go away the plain knowledge within the payload, so styling is managed by the paste vacation spot. These shortcuts exist within the browser by default, however it’s good to keep in mind to implement them in your challenge.

Textual content Choice And Focus

See the Pen “Choice instance” by Ilya Medvedev.

See the Pen “Choice instance” by Ilya Medvedev.

Textual content choice helps customers see which piece of textual content is at present being edited. Let’s strive a easy instance: an enter subject with a button to regulate the boldness of the textual content.

On this instance, we will choose a chunk of textual content and press the Daring button, and the choice within the textual content will stay afterwards. However what if our instance is extra difficult? Say we add an enter subject to the text-size selector. On this case, the main target will shift to the brand new enter.

There are two choices for fixing this drawback:

  • After every enter occasion, we pressure the main target to maneuver again to the textual content block. On this case, the choice will begin blinking after a sure variety of enter occasions — we don’t need that.
  • We will add the textual content block to an iframe. As you in all probability know, an iframe has its personal world window object. So, so long as the choice is throughout the iframe, it would persist even when the main target exterior is moved.

We ended up with an iframe-wrapped textual content widget. So, so long as the choice is throughout the iframe, it would persist even when the main target exterior is moved. Check out the screenshot beneath. We now have two picks on the web page: the chosen fragment within the textual content widget and the chosen worth of the textual content dimension within the management.

Text selection within iframe

Textual content choice inside iframe. (Giant preview)

Efficiency Throughout Textual content Enter

The responsiveness of your text-editing interface is necessary. Monitor the frames-per-second (FPS) worth intently, particularly on the subject of duties like enhancing textual content at a excessive pace or altering the font dimension.

Readymag has two viewports: desktop and cell. Textual content kinds can seem totally different in every. Whereas the textual content is being entered, the editor will carry out varied calculations to synchronize knowledge between viewports. Excessive responsiveness is achieved through the use of the browser API: requestAnimationFrame and requestIdleCallback:

It is a nice strategy to carry out tedious operations with out blocking the primary thread.


Enabling accessibility is without doubt one of the most necessary practices in internet improvement at present. In case your web site is designed with accessibility in thoughts, it would give extra folks entry to your product. This implies accommodating not solely folks with disabilities but additionally customers on totally different platforms: desktop and contact gadgets, display screen readers, listening to gadgets, and so forth. To know simply how necessary making tasks accessible may be, I like to recommend trying out the latest accessibility statistics.

To start incorporating internet accessibility practices, first verify the Internet Content material Accessibility Tips (WCAG), essentially the most complete useful resource on the subject. And so long as Readymag is a device for publication, along with WCAG, we additionally have to comply with the Authoring Software Accessibility Tips (ATAG).

Our crew is at present on the stage of integrating accessibility into the editor. In subsequent articles, we’ll share extra about our journey in the direction of absolutely integrating accessibility at Readymag. You can even verify any work made with Readymag utilizing our accessibility guidelines.

Finest Practices

Lastly, listed below are some suggestions that will help you develop a textual content editor on the internet:

  • Think twice about format.
    Establish upfront what capabilities you want and the way you’ll work with the weather within the textual content editor.
  • Arrange visible testing.
    While you work with textual content, you can not rely completely on the snapshot check consequence. You would possibly get the proper consequence within the check, anticipating the given CSS for the block, however typically the consequence won’t be what you anticipated.
  • Check your work in numerous browsers.
    Whereas most browsers assist new on-line options fairly effectively, there are sometimes issues with displaying the identical kinds in numerous browsers.
  • Use characteristic flags for safer improvement of latest options.
  • Measure FPS within the browser when getting into textual content.
    Don’t do CPU-intensive duties in a single thread.
  • Don’t be afraid to experiment.
  • Final however not least, strive Textual content Widget in Readymag.
Smashing Editorial
(vf, il, al, yk)

Supply hyperlink

Leave a Reply