How to configure ckeditor to not wrap content in <p> block?

CkeditorWord Wrap

Ckeditor Problem Overview


I am using ckeditor on my website to make it easier for users to input HTML.

However, the data I get back from ckeditor is wrapped in <p></p> blocks. (Which I don't want.)

Is there some configuration setting that forces the editor to not wrap the text in anything?

Ckeditor Solutions


Solution 1 - Ckeditor

Add the following to your config.js file for CKEditor:

config.enterMode = CKEDITOR.ENTER_BR;

Example:

...

CKEDITOR.editorConfig = function (config)
{
	config.enterMode = CKEDITOR.ENTER_BR;

    ...
};

Details

The configuration setting that controls this behavior is based on what you want to happen when the user presses Enter.

Just in case someone who's new to working with HTML reads this, I'm including some basic explanation of the concepts involved and why a tag will need to be inserted when the Enter key is pressed.

We know that if we enter some text into an HTML document and then put additional text on a new line, the browser won't display the text as two lines, it will ignore any carriage returns and will condense multiple spaces between characters to a single space.

The following HTML:

qwer
tyui

Will be rendered as:

> qwer tyui

So the editor needs to insert an HTML tag to tell the browser that it should display the second group of text on a new line.

The configuration setting that controls this is config.enterMode and it offers three options:

1 - Insert paragraph

The default setting creates a paragraph element each time Enter is pressed:

config.enterMode = CKEDITOR.ENTER_P; // inserts `<p>...</p>`
2 - Insert 'div'

You can choose to create a div element instead of a paragraph:

config.enterMode = CKEDITOR.ENTER_DIV; // inserts `<div></div>`
3 - Insert break (the setting you're looking for)

If you prefer to not wrap the text in anything, you can choose to insert a line break tag:

config.enterMode = CKEDITOR.ENTER_BR; // inserts `<br />`

The CKEditor documentation indicates that using the ENTER_BR setting is not recommended:

> Note: It is recommended to use the CKEDITOR.ENTER_P setting because of its semantic value and correctness. The editor is optimized for this setting.

There is a second setting that controls a similar situation –config.autoParagraph. How it functions depends on the config.enterMode setting discussed above.

autoParagraph determines whether inline elements such as span are wrapped in the block element (p or div) specified by the enterMode setting. The default is to wrap inline elements, so if you enter a span like this (as HTML):

<span>asdfg</span>

It will be wrapped in a p or div element like this:

<p><span>asdfg</span></p>

or this:

<div><span>asdfg</span></div>

The inline element won't be wrapped if you set this to false or if you set enterMode to CKEDITOR.ENTER_BR.

The CKEditor documentation includes this note about config.autoParagraph:

> Note: Changing the default value might introduce unpredictable usability issues.

Even more settings

There are three more settings that are somewhat related to this subject:

  • config.fillEmptyBlocks
  • config.forceEnterMode
  • config.ignoreEmptyParagraph

Reference

A complete list of the available configuration options can be found here:

Solution 2 - Ckeditor

I know I'm a little late to the game, but I think the option the OP is looking for is:

config.autoParagraph = false;

Solution 3 - Ckeditor

This is answered perfectly well above, however as mentioned you should not really be changing this in the main config.

The correct way to do this is per .replace really.

i.e.

    <form name="title" method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>">
    <textarea id="editor2" name="editor2" rows="300"><?php echo $editor2;?></textarea>
    <textarea id="editor1" name="editor1" rows="1" cols="50" onfocus="this.value=''; this.onfocus=null;">Type Tab Title Here:</textarea>
    <input type="submit" value="Submit">
    </form>

<script type="text/javascript">  
    CKEDITOR.replace( 'editor2', { 
    enterMode: CKEDITOR.ENTER_BR, 
    on: {'instanceReady': function (evt) { evt.editor.execCommand('maximize');     }},
    });      
    </script>

Solution 4 - Ckeditor

A very simple solution without any configuration change is to use

  1. shift+enter for a line break <br>, and
  2. just enter would cause a new paragraph.

Advantage is that you don't have to do any configuration changes. Plus, you have both.

Solution 5 - Ckeditor

If you want to exclude <p> tag and want only basic editing tool like Bold Italic superscript Subscript etc in Ckeditor then follow these steps:

I am 100% sure about this as I researched 36 Hours continuously :)

Step 1: Add this script in your PHP webpage

<script type="text/javascript">  
    CKEDITOR.replace( 'editor1', { 
    enterMode: CKEDITOR.ENTER_BR, 
    on: {'instanceReady': function (evt) { evt.editor.execCommand('');}},
    }); 
</script>

Step 2: add id="editor2" and onfocus="this.value='';" in your textarea like this

<textarea id="editor2" name="AsYourWish" onfocus="this.value='';">

Step 3: Be sure that remove Class="ckeditor" from Textarea.

Step 4: Reload your webpage if not happened Delete Cache/History and Restart PC/laptop.

Step 5: Its Done :)

Solution 6 - Ckeditor

For Django-ckeditor add this config in your settings.py file:

ENTER_P    = 1 # default
ENTER_BR   = 2
ENTER_DIV  = 3

CKEDITOR_CONFIGS = {
    'default': {
        'enterMode': ENTER_BR,
    },
}

Solution 7 - Ckeditor

If anyone comes here with ckeditor 5, don't look for this option. They have removed it, I've spent days tyring to figure this out.

> I'm afraid you're not going to like it, but enter mode BR is the root > of all evil. If we were able we'd removed it from CKEditor 4 long time > ago and we're definitely not going to implement it in CKEditor 5.

Related GitHub issue

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNathan OsmanView Question on Stackoverflow
Solution 1 - CkeditorcodewaggleView Answer on Stackoverflow
Solution 2 - CkeditorMikeBmanView Answer on Stackoverflow
Solution 3 - CkeditorabluemanView Answer on Stackoverflow
Solution 4 - CkeditorXpleriaView Answer on Stackoverflow
Solution 5 - CkeditorRishi RichView Answer on Stackoverflow
Solution 6 - CkeditorRavi DhimanView Answer on Stackoverflow
Solution 7 - CkeditorShamseer AhammedView Answer on Stackoverflow